Completely remove /contrib/retep, with Peter's approval; now on Source
authorBruce Momjian
Mon, 21 Oct 2002 00:35:41 +0000 (00:35 +0000)
committerBruce Momjian
Mon, 21 Oct 2002 00:35:41 +0000 (00:35 +0000)
Forge.

41 files changed:
contrib/retep/CHANGELOG [deleted file]
contrib/retep/Implementation [deleted file]
contrib/retep/Makefile [deleted file]
contrib/retep/README [deleted file]
contrib/retep/build.xml [deleted file]
contrib/retep/data/cds.dtd [deleted file]
contrib/retep/data/cds.xml [deleted file]
contrib/retep/retep.jpx [deleted file]
contrib/retep/uk/org/retep/dtu/DCollection.java [deleted file]
contrib/retep/uk/org/retep/dtu/DConstants.java [deleted file]
contrib/retep/uk/org/retep/dtu/DElement.java [deleted file]
contrib/retep/uk/org/retep/dtu/DEnvironment.java [deleted file]
contrib/retep/uk/org/retep/dtu/DModule.java [deleted file]
contrib/retep/uk/org/retep/dtu/DModuleXML.java [deleted file]
contrib/retep/uk/org/retep/dtu/DNode.java [deleted file]
contrib/retep/uk/org/retep/dtu/DProcessor.java [deleted file]
contrib/retep/uk/org/retep/dtu/DTransform.java [deleted file]
contrib/retep/uk/org/retep/tools.properties [deleted file]
contrib/retep/uk/org/retep/tools/Tool.java [deleted file]
contrib/retep/uk/org/retep/util/ExceptionDialog.java [deleted file]
contrib/retep/uk/org/retep/util/Globals.java [deleted file]
contrib/retep/uk/org/retep/util/Logger.java [deleted file]
contrib/retep/uk/org/retep/util/Main.java [deleted file]
contrib/retep/uk/org/retep/util/StandaloneApp.java [deleted file]
contrib/retep/uk/org/retep/util/hba/Editor.java [deleted file]
contrib/retep/uk/org/retep/util/hba/Main.java [deleted file]
contrib/retep/uk/org/retep/util/hba/Record.java [deleted file]
contrib/retep/uk/org/retep/util/misc/IPAddress.java [deleted file]
contrib/retep/uk/org/retep/util/misc/PropertiesIO.java [deleted file]
contrib/retep/uk/org/retep/util/misc/WStringTokenizer.java [deleted file]
contrib/retep/uk/org/retep/util/models/HBATableModel.java [deleted file]
contrib/retep/uk/org/retep/util/models/PropertiesTableModel.java [deleted file]
contrib/retep/uk/org/retep/util/proped/Main.java [deleted file]
contrib/retep/uk/org/retep/util/proped/PropertyEditor.java [deleted file]
contrib/retep/uk/org/retep/xml/core/XMLFactory.java [deleted file]
contrib/retep/uk/org/retep/xml/core/XMLFactoryException.java [deleted file]
contrib/retep/uk/org/retep/xml/jdbc/XMLDatabase.java [deleted file]
contrib/retep/uk/org/retep/xml/jdbc/XMLResultSet.java [deleted file]
contrib/retep/uk/org/retep/xml/parser/TagHandler.java [deleted file]
contrib/retep/uk/org/retep/xml/parser/TagListener.java [deleted file]
contrib/retep/uk/org/retep/xml/test/XMLExport.java [deleted file]

diff --git a/contrib/retep/CHANGELOG b/contrib/retep/CHANGELOG
deleted file mode 100644 (file)
index 188c401..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Fri Mar 02 16:08:00 GMT 2001 [email protected]
-    - Started importing in the rest of the retep tools.
-
-Tue Jan 23 10:19:00 GMT 2001 [email protected]
-    - Finished the XML Export classes
-   - First of the test data suite now in CVS.
-
diff --git a/contrib/retep/Implementation b/contrib/retep/Implementation
deleted file mode 100644 (file)
index b3125ac..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-Retep Tools Implementation
---------------------------
-
-
-The tools are designed to be put into a single jar file, but each one is
-executable either individually or part of one single application.
-
-To run the big application, you can either:
-
-  java -jar retepTools.jar
-
-or with the retepTools.jar in the classpath run:
-
-  java uk.org.retep.tools.Main
-
-Windows users: For you you can also double click the retepTools.jar as windows
-will automatically run javac for you.
-
-To run the individual tools, you must have the .jar file in your classpath and
-then run the relevant Main class.
-
-Tool                          Type        Class
-------------------------------------------------------------------------------
-pg_hba.conf Editor/repairer   Editor      uk.org.retep.util.hba.Main
-Properties Editor             Editor      uk.org.retep.util.proped.Main
-
-
-Layout of the classes
----------------------
-
-Simply, tools that work on property files (Java properties, resource files,
-configuration settings - pg_hba.conf for example) go under uk.org.retep.util in
-their own package. Other utility classes (like PropertyIO) go in to the
-uk.org.retep.util.misc package except for certain ones where they are related.
-
-ie: TableModels. In swing you have JTable which uses a TableModel to display
-(and possibly update) some data. These go under uk.org.retep.util.models where
-you will find PropertiesTableModel for example. This one allows a Properties
-object to be displayed & updated.
-
-Come core classes like Logger, ExceptionDialog etc go into the main
-uk.org.retep.util package.
-
-Directory/Package                   Contents
-------------------------------------------------------------------------------
-uk.org.retep                        Home of the tools.properties file
-uk.org.retep.tools                  The main all-in-one application
-uk.org.retep.dtu                    The Data Transform Unit
-uk.org.retep.util                   Core utility classes
-uk.org.retep.util.hba               pg_hba.conf editor/repairer
-uk.org.retep.util.misc              Misc utility classes
-uk.org.retep.util.models            Swing table models
-uk.org.retep.util.proped            Property Editor
-uk.org.retep.util.xml.core          Basic XML Factory
-uk.org.retep.util.xml.jdbc          JDBC/XML interface
-uk.org.retep.util.xml.parser        Simple SAX parser
-
-Structure of a tool
--------------------
-
-Each tool has at least 2 base classes, and an entry in the tools.properties
-file. For this example, I'll show you the Properties Editor:
-
-Base package      uk.org.retep.util.proped
-Main tool class   uk.org.retep.util.proped.PropertyEditor
-Standalone class  uk.org.retep.util.proped.Main
-
-The main tool class is the entry point used by the main application. Because
-they are used in a GUI, this class must extend javax.swing.JComponent and
-implement the uk.org.retep.tools.Tool interface. (NB: You will find I always
-use JPanel, but JComponent is used here so that any swing class can be used
-you are not limited to JPanel.)
-
-The standalone class is a basic static class that implements the main method.
-It should extend the uk.org.retep.misc.StandaloneApp class and be written along
-the lines of the following example:
-
-      import uk.org.retep.util.StandaloneApp;
-      import javax.swing.JComponent;
-
-      public class Main extends StandaloneApp
-      {
-        public Main(String[] args)
-        throws Exception
-        {
-          super(args);
-        }
-
-        public JComponent init()
-        throws Exception
-        {
-          // Your initialisation here. In this case the PropertyEditor
-          PropertyEditor panel = new PropertyEditor();
-
-          // do stuff here, ie load a file if supplied
-
-          // return the tool
-          return panel;
-        }
-
-        public static void main(String[] args)
-        throws Exception
-        {
-          Main main = new Main(args);
-          main.pack();
-          main.setVisible(true);
-        }
-      }
-
-you will find a template in the uk.org.retep.util.Main class. Simply copy this
-classes source, as it gives you the basic stub. Just add your own implementation
-if init() like the one above. Look at the full Main class for the
-PropertiesEditor to see how to get at the command line args.
-
-By convention, the standalone class is named Main.
-
diff --git a/contrib/retep/Makefile b/contrib/retep/Makefile
deleted file mode 100644 (file)
index e5de9c7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#-------------------------------------------------------------------------
-#
-# Makefile for contributed retep tools
-#
-# Copyright (c) 2001, PostgreSQL Global Development Group
-#
-# $Header: /cvsroot/pgsql/contrib/retep/Attic/Makefile,v 1.1 2001/07/06 23:07:20 petere Exp $
-#
-#-------------------------------------------------------------------------
-
-subdir = contrib/retep
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-
-all:
-   $(ANT) -buildfile $(srcdir)/build.xml all
-
-install: installdirs
-   $(ANT) -buildfile $(srcdir)/build.xml install \
-     -Dinstall.directory=$(javadir)
-
-installdirs:
-   $(mkinstalldirs) $(javadir)
-
-uninstall:
-   $(ANT) -buildfile $(srcdir)/build.xml uninstall \
-     -Dinstall.directory=$(javadir)
-
-clean distclean maintainer-clean:
-   $(ANT) -buildfile $(srcdir)/build.xml clean
diff --git a/contrib/retep/README b/contrib/retep/README
deleted file mode 100644 (file)
index 5355c9d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-Before you ask what retepTools are, they are my personal suite of utilities.
-About 90% of them are JDBC related (either they use JDBC, or I use them in
-developing the JDBC driver).
-
-Now, because of various reasons I won't go into now, in January 2001 I decided
-to release the entire lot to the public. I could have used something like
-SourceForge, but as they are mainly JDBC related I thought here is the best
-place.
-
-Now all (bar retepPDF, see end-note) will over the next few months be going
-into the /contrib/retep directory. They range from simple XML Inport/Export
-classes to entire sub-systems that can be plugged into applications.
-
-All this lot were never released, so I'm placing them under PostgreSQL's
-licence.
-
-Please refer to Implementation for details of what package does what.
-
-It all requires Java2SE (JDK1.2) as a minimum. I do have some plans for some
-EJB tools later, so those will need Java2EE, but not yet ;-)
-
-Peter Mount
-March 2 2001
-
-retepPDF: This is not included for two reasons:
-
-1: It's big and not really related in any way to PostgreSQL
-2: More importantly, I (may be foolishly) released it some 3 years ago under
-   the LGPL. As a few people have added to it, it's not really possible to
-   change the licence, and I don't want to polute PostgreSQL's source tree ;-)
-
-retepGraph: This was an old graphics library. It's been obsolete for 3 years
-now, so it's not going in.
-
diff --git a/contrib/retep/build.xml b/contrib/retep/build.xml
deleted file mode 100644 (file)
index 04a8db5..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-  
-]>
-
-
-
-  
-  
-  
-  
-  
-
-  
-  
-    
-    
-    
-    
-  
-
-  
-    
-*** WARNING: Contributed retep tools need jdk1.2 or later.
-***          Compilation NOT done
-    
-  
-
-
-  
-  
-    
-  
-
-
-  
-  
-    
-       
-         
-       
-
-       
-         
-       
-    
-   
-
-
-  
-  
-    
-      
-      
-    
-  
-
-
-  
-  
-    
-    
-  
-
-
-  
-    
-      
-        
-      
-    
-  
-
-
-  
-    
-      
-        
-      
-    
-  
-
-
-  
-  
-    
-    
-  
-
-
diff --git a/contrib/retep/data/cds.dtd b/contrib/retep/data/cds.dtd
deleted file mode 100644 (file)
index df542c3..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-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
deleted file mode 100644 (file)
index fb0203b..0000000
+++ /dev/null
@@ -1,2691 +0,0 @@
-
-  
-    
-      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
-  
-
-
diff --git a/contrib/retep/retep.jpx b/contrib/retep/retep.jpx
deleted file mode 100644 (file)
index dcf68ac..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-\r
-\r
-\r
-\r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-  \r
-\r
-\r
diff --git a/contrib/retep/uk/org/retep/dtu/DCollection.java b/contrib/retep/uk/org/retep/dtu/DCollection.java
deleted file mode 100644 (file)
index e97fc06..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-package uk.org.retep.dtu;
-
-import uk.org.retep.xml.core.XMLFactory;
-import uk.org.retep.xml.core.XMLFactoryException;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Iterator;
-
-public class DCollection implements Collection
-{
-  protected int num,max,inc;
-
-  protected DElement elements[];
-
-  public DCollection()
-  {
-    this(10);
-  }
-
-  public DCollection(int aIncrement)
-  {
-    num=0;
-    max=0;
-    inc=aIncrement;
-    elements=null;
-  }
-
-  protected void resize()
-  {
-    if(num>=max) {
-      max+=inc;
-      DElement n[] = new DElement[max];
-      if(elements!=null) {
-        System.arraycopy(elements,0,n,0,elements.length);
-      }
-      elements=n;
-    }
-  }
-
-  public int size()
-  {
-    return num;
-  }
-
-  public boolean isEmpty()
-  {
-    return (num==0);
-  }
-
-  /**
-   * Checks the list using it's XML id.
-   */
-  public synchronized boolean contains(Object parm1)
-  {
-    if(parm1 instanceof DElement) {
-      DElement e = (DElement) parm1;
-      int ei = e.getID();
-
-      // out of range?
-      if(ei<0 || ei>=num)
-        return false;
-
-      return elements[ei].equals(e);
-    }
-
-    return false;
-  }
-
-  public Iterator iterator()
-  {
-    return new iterator(this);
-  }
-
-  /**
-   * Inner class to implement an Iterator
-   */
-  protected class iterator implements Iterator
-  {
-    protected DCollection c;
-    protected int i;
-
-    public iterator(DCollection aCollection)
-    {
-      c=aCollection;
-      i=0;
-    }
-
-    public boolean hasNext()
-    {
-      return i
-    }
-
-    public Object next() {
-      return c.getElement(i++);
-    }
-
-    public void remove() {
-    }
-  }
-
-  public synchronized Object[] toArray()
-  {
-    Object o[] = new Object[num];
-    System.arraycopy(elements,0,o,0,num);
-    return o;
-  }
-
-  public Object[] toArray(Object[] parm1)
-  {
-    /**@todo: Implement this java.util.Collection method*/
-    throw new java.lang.UnsupportedOperationException("Method toArray() not yet implemented.");
-  }
-
-  /**
-   * Adds a node to the Collection, and sets it's ID to its position in the Collection
-   */
-  public synchronized boolean add(Object parm1)
-  {
-    if(parm1 instanceof DElement) {
-      DElement e = (DElement) parm1;
-
-      // Do nothing if it's already in a Collection
-      if(e.getID()>-1) {
-        return false;
-      }
-
-      // Add to the Collection
-      resize();
-      e.setID(num);
-      elements[num++] = e;
-      return true;
-    }
-    return false;
-  }
-
-  public synchronized boolean remove(Object parm1)
-  {
-    if(parm1 instanceof DElement) {
-      DElement e = (DElement) parm1;
-      int ei = e.getID();
-      if(ei<0 || ei>=num)
-        return false;
-
-      // Mark the node as parentless
-      e.setID(-1);
-
-      // Now remove from the array by moving latter nodes, fixing their ids
-      // in the process
-      for(int j=ei,k=ei+1;k
-        elements[j]=elements[k];
-        elements[j].setID(j);
-      }
-      num--;
-      return true;
-    }
-
-    return false;
-  }
-
-  public boolean containsAll(Collection parm1)
-  {
-    /**@todo: Implement this java.util.Collection method*/
-    throw new java.lang.UnsupportedOperationException("Method containsAll() not yet implemented.");
-  }
-
-  public boolean addAll(Collection parm1)
-  {
-    /**@todo: Implement this java.util.Collection method*/
-    throw new java.lang.UnsupportedOperationException("Method addAll() not yet implemented.");
-  }
-
-  public boolean removeAll(Collection parm1)
-  {
-    /**@todo: Implement this java.util.Collection method*/
-    throw new java.lang.UnsupportedOperationException("Method removeAll() not yet implemented.");
-  }
-
-  public boolean retainAll(Collection parm1)
-  {
-    /**@todo: Implement this java.util.Collection method*/
-    throw new java.lang.UnsupportedOperationException("Method retainAll() not yet implemented.");
-  }
-
-  public synchronized void clear()
-  {
-    // Mark each node as parentless
-    for(int i=0;i
-      elements[i].setID(-1);
-    }
-
-    // dispose the array
-    num=0;
-    max=0;
-    elements=null;
-  }
-
-  /**
-   * Returns the element with supplied id.
-   * @return element or null
-   */
-  public synchronized DElement getElement(int id)
-  {
-    if(id<0 || id>=num)
-      return null;
-
-    return elements[id];
-  }
-
-  /**
-   * Repairs the collection, ensuring all id's are correct
-   */
-  public synchronized void repair()
-  {
-    for(int i=0;i
-      elements[i].setID(i);
-    }
-  }
-
-  public synchronized void saveXML(XMLFactory aFactory)
-  throws IOException, XMLFactoryException
-  {
-    for(int i=0;i
-      elements[i].saveXML(aFactory);
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/dtu/DConstants.java b/contrib/retep/uk/org/retep/dtu/DConstants.java
deleted file mode 100644 (file)
index fb825d7..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-package uk.org.retep.dtu;
-
-public class DConstants
-{
-  /**
-   * A global version number
-   */
-  public static final String XML_VERSION_ID = "V7.1-2001-02-26";
-
-  /**
-   * XML Tag names
-   */
-  public static final String XML_DISPLAYNAME= "DISPLAYNAME";
-  public static final String XML_FROM       = "FROM";
-  public static final String XML_ID         = "ID";
-  public static final String XML_MODULE     = "MODULE";
-  public static final String XML_NODE       = "NODE";
-  public static final String XML_TO         = "TO";
-  public static final String XML_TRANSFORM  = "TRANSFORM";
-  public static final String XML_TYPE       = "TYPE";
-  public static final String XML_VERSION    = "VERSION";
-  public static final String XML_X          = "X";
-  public static final String XML_Y          = "Y";
-
-  public static final int NOP       = 0;      // No operation or always run transform
-  public static final int SUCCESS   = 1;      // Run transform only if DNode.OK
-  public static final int ERROR     = 2;      // Run transform only if DNode.ERROR
-
-  /**
-   * Node types 20-39 reserved for Transformation types
-   */
-  public static final int TRANSFORMBASE = 20;
-
-  /**
-   * Node types 20-99 reserved for Internal Node implementations
-   */
-  public static final int INTERNALBASE = 50;
-
-  /**
-   * Node types 100+ are for user extensions
-   */
-  public static final int USERBASE  = 100;
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/dtu/DElement.java b/contrib/retep/uk/org/retep/dtu/DElement.java
deleted file mode 100644 (file)
index 73fa7e8..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-package uk.org.retep.dtu;
-
-import uk.org.retep.xml.core.XMLFactory;
-import uk.org.retep.xml.core.XMLFactoryException;
-
-import java.io.IOException;
-
-public interface DElement
-{
-  /**
-   * Fetch the unique ID of this Element
-   */
-  public int getID();
-
-  /**
-   * Sets the unique id - normally set by DCollection
-   */
-  public void setID(int id);
-
-  /**
-   * @return the type of the Element
-   */
-  public int getType();
-
-  /**
-   * Set's the element type
-   */
-  public void setType(int aType);
-
-  public void saveXML(XMLFactory aFactory) throws IOException, XMLFactoryException;
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/dtu/DEnvironment.java b/contrib/retep/uk/org/retep/dtu/DEnvironment.java
deleted file mode 100644 (file)
index 2efcfe8..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-package uk.org.retep.dtu;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-
-public class DEnvironment
-{
-  protected HashMap dsrc;
-
-  public DEnvironment()
-  {
-    dsrc=new HashMap();
-  }
-
-  public void addDataSource(String aKey,Object aObject)
-  {
-    dsrc.put(aKey,aObject);
-  }
-
-  public Object getDataSource(String aKey)
-  {
-    return dsrc.get(aKey);
-  }
-
-  public Iterator getDataSources()
-  {
-    return dsrc.values().iterator();
-  }
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/dtu/DModule.java b/contrib/retep/uk/org/retep/dtu/DModule.java
deleted file mode 100644 (file)
index 21d037f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-package uk.org.retep.dtu;
-
-import uk.org.retep.xml.core.XMLFactory;
-import uk.org.retep.xml.core.XMLFactoryException;
-import uk.org.retep.xml.parser.TagListener;
-import uk.org.retep.util.Logger;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * DModule represents a programatic module of steps used within the DTU
- */
-public class DModule implements Serializable
-{
-  // The nodes and transitions between them
-  protected DCollection nodes;
-
-  protected String displayName;
-
-  public static final String DEFAULT_DISPLAYNAME = "unnamed module";
-
-  public DModule()
-  {
-    nodes=new DCollection();
-    displayName=DEFAULT_DISPLAYNAME;
-    Logger.log(Logger.DEBUG,"new DModule",this);
-  }
-
-  // Expensive!
-  public DNode getNode(int id)
-  {
-    return (DNode) nodes.getElement(id);
-  }
-
-  public DNode addNode(DNode aNode)
-  {
-    Logger.log(Logger.DEBUG,"DModule.addNode",aNode);
-    nodes.add(aNode);
-    return aNode;
-  }
-
-  public void removeNode(DNode aNode)
-  {
-    Logger.log(Logger.DEBUG,"DModule.removeNode",aNode);
-    nodes.remove(aNode);
-  }
-
-  public void clear()
-  {
-    Logger.log(Logger.DEBUG,"DModule.clear",this);
-    nodes.clear();
-  }
-
-  public void setDisplayName(String aName)
-  {
-    Logger.log(Logger.DEBUG,"DModule.setDisplayName",aName);
-    displayName = aName;
-  }
-
-  public String getDisplayName()
-  {
-    return displayName;
-  }
-
-  public Iterator iterator()
-  {
-    return nodes.iterator();
-  }
-
-  /**
-   * Writes an XML representation of this module to an XMLFactory. The caller
-   * must close the factory after use!
-   */
-  public synchronized void saveXML(XMLFactory aFactory)
-  throws IOException, XMLFactoryException
-  {
-    Logger.log(Logger.DEBUG,"DModule.saveXML start",this);
-    Iterator it;
-
-    aFactory.startTag(DConstants.XML_MODULE);
-    aFactory.addAttribute(DConstants.XML_DISPLAYNAME,displayName);
-    aFactory.addAttribute(DConstants.XML_VERSION,DConstants.XML_VERSION_ID);
-
-    // The nodes
-    nodes.saveXML(aFactory);
-
-    // The transforms
-    //trans.saveXML(aFactory);
-
-    aFactory.endTag(); // MODULE
-    Logger.log(Logger.DEBUG,"DModule.saveXML end",this);
-  }
-
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/dtu/DModuleXML.java b/contrib/retep/uk/org/retep/dtu/DModuleXML.java
deleted file mode 100644 (file)
index 31552cd..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-package uk.org.retep.dtu;
-
-import uk.org.retep.xml.core.XMLFactory;
-import uk.org.retep.xml.core.XMLFactoryException;
-import uk.org.retep.xml.parser.TagHandler;
-import uk.org.retep.xml.parser.TagListener;
-import uk.org.retep.util.Logger;
-
-import java.io.CharArrayWriter;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.ArrayList;
-
-import org.xml.sax.InputSource;
-import org.xml.sax.Parser;
-import org.xml.sax.SAXException;
-import javax.xml.parsers.ParserConfigurationException;
-
-public class DModuleXML implements TagListener
-{
-  protected TagHandler handler;
-
-  protected DModule module = null;
-  protected DNode node = null;
-  protected DTransform trans = null;
-
-  protected ArrayList txmap;
-
-  public DModuleXML()
-  {
-    handler = new TagHandler();
-    handler.addTagListener(this);
-
-    txmap = new ArrayList();
-
-    Logger.log(Logger.DEBUG,"DModuleXML initialised");
-  }
-
-  public TagHandler getTagHandler()
-  {
-    return handler;
-  }
-
-  /**
-   * Used to optimise the switch handling in tagStart.
-   *
-   * The values of each T_* constant must match the corresponding element no
-   * in the tags static array.
-   */
-  private static final int T_DEFAULT=-1;
-  private static final int T_MODULE =0;
-  private static final int T_NODE   =1;
-  private static final int T_TRANS  =2;
-  private static final String tags[] = {
-    DConstants.XML_MODULE,
-    DConstants.XML_NODE,
-    DConstants.XML_TRANSFORM
-  };
-
-  /**
-   * This is called when a tag has just been started.
-   * 

NB: args is volatile, so if you use it beyond the lifetime of

-   * this call, then you must make a copy of the HashMap (and not use simply
-   * store this HashMap).
-   * @param level The number of tags above this
-   * @param tag The tag name
-   * @param args A HashMap of any arguments
-   */
-  public void tagStart(int level,String tag,HashMap args)
-  {
-    Logger.log(Logger.DEBUG,"DModuleXML.tagStart",tag);
-
-    // Prefetch some common attributes
-    String sType = (String) args.get(DConstants.XML_TYPE);
-    String sX = (String) args.get(DConstants.XML_X);
-    String sY = (String) args.get(DConstants.XML_Y);
-
-    int type=-1,x=-1,y=-1;
-
-    if(sType!=null) {
-      type = Integer.parseInt(sType);
-    }
-
-    if(sX!=null) {
-      y = Integer.parseInt(sX);
-    }
-
-    if(sY!=null) {
-      x = Integer.parseInt(sY);
-    }
-
-    // Match the tag against the tags array (used for switch() )
-    int tagID=T_DEFAULT;
-    for(int i=0;i
-      if(tag.equals(tags[i])) {
-        tagID=i;
-      }
-    }
-
-    switch(tagID)
-      {
-          // The main module tag
-        case T_MODULE:
-          module = new DModule();
-
-          String sDisplayName = (String) args.get(DConstants.XML_DISPLAYNAME);
-          if(sDisplayName!=null) {
-            module.setDisplayName(sDisplayName);
-          }
-          break;
-
-          // Basic nodes
-        case T_NODE:
-          node = new DNode();
-          node.setType(type);
-          module.addNode(node);
-          break;
-
-          // Basic transforms
-        case T_TRANS:
-          trans = new DTransform();
-          trans.setType(type);
-
-          // When finished we fix the transforms
-          int to = Integer.parseInt((String) args.get(DConstants.XML_TO));
-          txmap.add(new tx(node,trans,to));
-
-          break;
-
-        default:
-          // ignore unknown tags for now
-          break;
-      }
-  }
-
-  protected class tx
-  {
-    public DNode node;
-    public DTransform transform;
-    public int toID;
-
-    public tx(DNode aNode,DTransform aTransform,int aID)
-    {
-      node=aNode;
-      transform=aTransform;
-      toID=aID;
-    }
-  }
-
-  /**
-   * This method is called by ContHandler to process a tag once it has been
-   * fully processed.
-   * 

NB: content is volatile, so you must copy its contents if you use

-   * it beyond the lifetime of this call.
-   * @param content CharArrayWriter containing the content of the tag.
-   */
-  public void tagContent(CharArrayWriter content)
-  {
-    // Ignore
-  }
-
-  public void fixTransforms()
-  {
-    DNode     to;
-    Iterator  it = txmap.iterator();
-
-    while(it.hasNext()) {
-      tx x = (tx) it.next();
-
-      //Logger.log(Logger.DEBUG,"Fixing transform "+x.toID,x.transform,Integer.toString(x.node.getID()),Integer.toString(module.getNode(x.toID).getID()));
-      to    = module.getNode(x.toID);
-
-      x.transform.setFrom(x.node);
-      x.transform.setTo(to);
-      //to.setFrom(x.transform);
-    }
-
-  }
-
-  /**
-   * Parse an InputSource and return the contained module.
-   * @return DModule loaded, null if the xml file does not contain a module.
-   */
-  public DModule parse(InputSource is)
-  throws IOException,SAXException
-  {
-    getTagHandler().parse(is);
-    fixTransforms();
-    return module;
-  }
-
-  /**
-   * Parse an uri and return the contained module.
-   * @return DModule loaded, null if the xml file does not contain a module.
-   */
-  public DModule parse(String uri)
-  throws IOException,SAXException
-  {
-    getTagHandler().parse(uri);
-    fixTransforms();
-    return module;
-  }
-
-  /**
-   * Debug test - read xml from one file and save to another.
-   */
-  public static void main(String args[]) throws Exception
-  {
-    if(args.length!=2) {
-      System.err.println("Syntax: java DModuleXML in-file out-file");
-      System.exit(1);
-    }
-
-    Logger.setLevel(Logger.DEBUG);
-
-    Logger.log(Logger.INFO,"DModuleXML Read test1.xml");
-    DModuleXML dm = new DModuleXML();
-    DModule module = dm.parse(new InputSource(new FileInputStream(args[0])));
-
-    Logger.log(Logger.INFO,"Parse complete");
-
-    Logger.log(Logger.INFO,"DModuleXML Write XML");
-    FileWriter fw = new FileWriter(args[1]);
-    module.saveXML(new XMLFactory(fw));
-    fw.close();
-    Logger.log(Logger.INFO,"Write complete");
-
-    DProcessor.run(module);
-  }
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/dtu/DNode.java b/contrib/retep/uk/org/retep/dtu/DNode.java
deleted file mode 100644 (file)
index 7a83217..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-package uk.org.retep.dtu;
-
-import uk.org.retep.util.Logger;
-import uk.org.retep.xml.core.XMLFactory;
-import uk.org.retep.xml.core.XMLFactoryException;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Iterator;
-
-/**
- * This is the base class for all nodes.
- */
-public class DNode implements DElement, Serializable
-{
-  // The id of this node
-  protected int id;
-
-  // The type of this node
-  protected int type;
-
-  protected int x,y;
-
-  public static final int OK      = 0;  // Node last ran fine
-  public static final int ERROR   = 1;  // Node failed on last run
-
-  /**
-   * This type of node does nothing
-   */
-  public static int NOP   = 0; // No action
-
-  public DNode()
-  {
-    this(NOP);
-  }
-
-  public DNode(int aType)
-  {
-    id=-1;
-    type=aType;
-
-    // Init the transform linkage
-    mf=mt=5;
-    nf=nt=0;
-    fn = new DTransform[mf];
-    tn = new DTransform[mt];
-
-    Logger.log(Logger.DEBUG,"new DNode");
-  }
-
-  public int getID()
-  {
-    return id;
-  }
-
-  public void setID(int aID)
-  {
-    id=aID;
-    Logger.log(Logger.DEBUG,"DNode.setID",aID);
-  }
-
-  public int getType()
-  {
-    return type;
-  }
-
-  public void setType(int aType)
-  {
-    type=aType;
-    Logger.log(Logger.DEBUG,"DNode.setType",aType);
-  }
-
-  /**
-   */
-  public void saveXML(XMLFactory aFactory)
-  throws IOException, XMLFactoryException
-  {
-    Logger.log(Logger.DEBUG,"DNode.saveXML start",this);
-    Iterator it;
-
-    aFactory.startTag(DConstants.XML_NODE);
-    aFactory.addAttribute(DConstants.XML_ID,new Integer(getID()));
-    aFactory.addAttribute(DConstants.XML_TYPE,new Integer(getType()));
-
-    // used for display only
-    aFactory.addAttribute(DConstants.XML_X,new Integer(getX()));
-    aFactory.addAttribute(DConstants.XML_Y,new Integer(getY()));
-
-    // Save the transforms here (only the from list required)
-    for(int i=0;i
-      fn[i].saveXML(aFactory);
-    }
-
-    aFactory.endTag(); // NODE
-    Logger.log(Logger.DEBUG,"DNode.saveXML finish",this);
-  }
-
-  public void setPosition(int aX,int aY)
-  {
-    x=aX;
-    y=aY;
-  }
-
-  public int getX()
-  {
-    return x;
-  }
-
-  public int getY()
-  {
-    return y;
-  }
-
-  public void setX(int aX)
-  {
-    x=aX;
-  }
-
-  public void setY(int aY)
-  {
-    y=aY;
-  }
-
-  /**
-   * This must be overidden to do something
-   * @return Return status
-   */
-  public int run(DEnvironment env)
-  {
-    return OK;
-  }
-
-  /**
-   * Node Transforms...
-   */
-  protected int nf,mf,nt,mt;
-  protected DTransform fn[],tn[];
-
-  /**
-   * Executes the transform
-   */
-  public DTransform getTransform(int aID)
-  {
-    return tn[aID];
-  }
-
-  /**
-   * @return number of transforms
-   */
-  public int getFromTransforms()
-  {
-    return nf;
-  }
-
-  /**
-   * @return number of transforms
-   */
-  public int getToTransforms()
-  {
-    return nt;
-  }
-
-  /**
-   * Adds a transform to this node (called by DTransform)
-   */
-  protected synchronized void setFrom(DTransform aTransform)
-  {
-    for(int i=0;i
-      if(fn[i].equals(aTransform)) {
-        return;
-      }
-    }
-    if(nf>=mf) {
-      mf+=5;
-      DTransform nn[] = new DTransform[mf];
-      System.arraycopy(fn,0,nn,0,nf);
-      fn=nn;
-    }
-    fn[nf++]=aTransform;
-  }
-
-  /**
-   * Adds a transform to this node (called by DTransform)
-   */
-  protected synchronized void setTo(DTransform aTransform)
-  {
-    for(int i=0;i
-      if(tn[i].equals(aTransform)) {
-        return;
-      }
-    }
-    if(nt>=mt) {
-      mt+=5;
-      DTransform nn[] = new DTransform[mt];
-      System.arraycopy(tn,0,nn,0,nt);
-      tn=nn;
-    }
-    tn[nt++]=aTransform;
-  }
-
-  /**
-   * Removes a transform (called by DTransform)
-   */
-  protected synchronized void removeFrom(DTransform aTransform)
-  {
-    for(int i=0;i
-      if(tn[i].equals(aTransform)) {
-        for(int j=i+1;j
-          fn[i]=fn[j];
-        }
-        nf--;
-        return;
-      }
-    }
-  }
-
-  /**
-   * Removes a transform (called by DTransform)
-   */
-  protected synchronized void removeTo(DTransform aTransform)
-  {
-    for(int i=0;i
-      if(tn[i].equals(aTransform)) {
-        for(int j=i+1;j
-          tn[i]=tn[j];
-        }
-        nt--;
-        return;
-      }
-    }
-  }
-
-}
diff --git a/contrib/retep/uk/org/retep/dtu/DProcessor.java b/contrib/retep/uk/org/retep/dtu/DProcessor.java
deleted file mode 100644 (file)
index 7745a18..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-package uk.org.retep.dtu;
-
-import uk.org.retep.util.Logger;
-
-import java.util.Iterator;
-
-/**
- * This class processes a Module. It's implemented as a Thread and there can
- * be many threads running on a single module
- */
-public class DProcessor
-{
-  /**
-   * This starts a module
-   */
-  public static DProcessor run(DModule aModule) {
-    // 3600000 is 1 hour in milliseconds
-    return run(aModule,3600000);
-  }
-
-  /**
-   * This starts a module
-   */
-  public static DProcessor run(DModule aModule,long timeout) {
-    return new DProcessor(aModule,timeout);
-  }
-
-  protected DProcessor(DModule aModule,long timeout) {
-    ThreadGroup group = new ThreadGroup(aModule.getDisplayName()+" DProcessor");
-
-    // Setup the environment
-    DEnvironment env = new DEnvironment();
-
-    // loop for any nodes without a transform pointing _to_ it.
-    Iterator it = aModule.iterator();
-    while(it.hasNext()) {
-      DNode node = (DNode) it.next();
-
-      // Only start if we have no predecessor
-      if(node.getFromTransforms()==0) {
-        proc proc = new proc(group,aModule,node,env);
-        proc.start();
-      }
-    }
-
-    // Now wait until all the threads have finished
-    boolean running=true;
-    try {
-      int cnt=1; // must loop at least once!
-
-      while(cnt>0) {
-        int numThreads = group.activeCount();
-        Thread threads[] = new Thread[numThreads];
-        cnt = group.enumerate(threads,false);
-
-        //Logger.log(Logger.DEBUG,"Waiting on threads",cnt);
-        while(cnt>0) {
-          //Logger.log(Logger.DEBUG,"Waiting on thread",cnt);
-          threads[--cnt].join(timeout);
-        }
-
-        Logger.log(Logger.DEBUG,"All threads appear to have died, retesting");
-      }
-    } catch(InterruptedException ie) {
-      Logger.log(Logger.ERROR,"DProcessor, exception caught while waiting for threads to die",ie);
-    }
-
-    // finally close any open datasources
-    Logger.log(Logger.DEBUG,"DProcessor cleanup");
-
-    Logger.log(Logger.DEBUG,"DProcessor finished");
-  }
-
-  class proc implements Runnable
-  {
-    protected DModule module; // The module being run
-    protected DNode   pc;     // current Program Counter
-
-    protected DEnvironment env; // Shared environment
-
-    // Used when launching new threads only
-    protected DTransform trans; // If not null, a transform to run first
-    protected int status;
-
-    protected Thread thread;
-
-    /**
-     * Start processing from DNode aNode. This is called by DProcessor at
-     * initialisation only.
-     */
-    protected proc(ThreadGroup aGroup,DModule aModule,DNode aNode,DEnvironment aEnv)
-    {
-      // aGroup will be null when forking...
-      if(aGroup==null) {
-        thread = new Thread(this);
-      } else {
-        thread = new Thread(aGroup,this);
-      }
-
-      module = aModule;
-      pc = aNode;
-      env = aEnv;
-    }
-
-    /**
-     * Start processing the DTransform aTransform from aNode (does not execute
-     * the node). This is called by this inner class itself when forking new
-     * threads.
-     */
-    protected proc(DModule aModule,DNode aNode,DEnvironment aEnv,DTransform aTransform,int aStatus)
-    {
-      this(null,aModule,aNode,aEnv);
-      trans = aTransform;
-      status = aStatus;
-    }
-
-    /**
-     * Start this thread
-     */
-    public void start()
-    {
-      thread.start();
-    }
-
-    public void run()
-    {
-      // Handle an initial transform first. It's used when a new Thread was created.
-      if(trans!=null) {
-        transform(trans,false,status);
-        trans=null;
-      }
-
-      while(pc!=null) {
-        //Logger.log(Logger.DEBUG,"running node ",pc.getID());
-
-        // Process the node
-        int status = pc.run(env);
-        //Logger.log(Logger.DEBUG,"      status ",status);
-
-        // Now the transforms. This thread continues with the first one that runs,
-        // but any others that will also run will do so in their own thread.
-        // If no transform runs (or there are none), then the thread will die.
-        int numTrans = pc.getToTransforms();
-        boolean fork=false;
-        for(int i=0;i
-          fork = transform(pc.getTransform(i),fork,status);
-          //Logger.log(Logger.DEBUG,"fork",fork?"true":"false");
-        }
-        //Logger.log(Logger.DEBUG,"fork",fork?"true":"false");
-        if(!fork) {
-          // No transforms ran, so we quit this thread
-          pc=null;
-        }
-
-        // This lets the other threads a chance to run
-        Thread.yield();
-      }
-    }
-
-    /**
-     * This executes a transform
-     * @param aTransform DTransform to execute
-     * @param fork true then a new process is triggered
-     * @param status The return status of the previous node
-     * @return true if the transform ran or a fork occured.
-     */
-    public boolean transform(DTransform aTransform,boolean fork,int status)
-    {
-      // Check to see if the transform will run (based on the calling nodes return
-      // status
-      if(!aTransform.willRun(status,env)) {
-        return false;
-      }
-
-      if(fork) {
-        // Create the new processor but this time we want a transform to run
-        proc proc = new proc(module,pc,env,aTransform,status);
-        return true;
-      }
-
-      if(aTransform.run(env)) {
-        pc=aTransform.getTo();
-        return true;
-      }
-
-      return false;
-    }
-
-  } // class proc
-
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/dtu/DTransform.java b/contrib/retep/uk/org/retep/dtu/DTransform.java
deleted file mode 100644 (file)
index 88aac19..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-package uk.org.retep.dtu;
-
-import uk.org.retep.xml.core.XMLFactory;
-import uk.org.retep.xml.core.XMLFactoryException;
-
-import java.io.IOException;
-
-/**
- * This manages the links between two nodes.
- */
-public class DTransform
-{
-  protected DNode from,to;
-  protected int type;
-
-  public DTransform()
-  {
-    this(null,null);
-  }
-
-  public DTransform(DNode aFrom,DNode aTo)
-  {
-    from=aFrom;
-    to=aTo;
-  }
-
-  public int getType()
-  {
-    return type;
-  }
-
-  public void setType(int aType)
-  {
-    type=aType;
-  }
-
-  public void setFrom(DNode aNode)
-  {
-    if(from!=null) {
-      from.removeTo(this);
-    }
-
-    from=aNode;
-    from.setTo(this);
-  }
-
-  public DNode getFrom()
-  {
-    return from;
-  }
-
-  public void setTo(DNode aNode)
-  {
-    if(to!=null) {
-      to.removeFrom(this);
-    }
-
-    to=aNode;
-    aNode.setFrom(this);
-  }
-
-  public DNode getTo()
-  {
-    return to;
-  }
-
-  /**
-   * This ensures the minimum tag/attributes are generated.
-   * To extend, extend saveCustomXML() which is called by this method
-   * appropriately.
-   */
-  public final void saveXML(XMLFactory aFactory)
-  throws IOException, XMLFactoryException
-  {
-    // Bare minimum is the tag type, and the destination node's id
-    aFactory.startTag(DConstants.XML_TRANSFORM);
-    aFactory.addAttribute(DConstants.XML_TYPE,Integer.toString(getType()));
-    aFactory.addAttribute(DConstants.XML_TO,Integer.toString(to.getID()));
-    saveCustomXML(aFactory);
-    aFactory.endTag();
-  }
-
-  /**
-   * Custom transformations must overide this method and write direct to the
-   * supplied XMLFactory. A tag is currently open when the method is called, but
-   * is closed immediately this method exits.
-   */
-  public void saveCustomXML(XMLFactory aFactory)
-  throws IOException, XMLFactoryException
-  {
-    // Default method does nothing...
-  }
-
-  /**
-   * Checks to see if we should run based on the calling nodes status. Overide
-   * this to add this sort of checking.
-   *
-   * @param status The return status of the calling node
-   * @param env DEnvironment we are using
-   * @return true if we will run.
-   */
-  public boolean willRun(int status,DEnvironment env)
-  {
-    switch(getType())
-    {
-      // NOP is the generic link - always run
-      case DConstants.NOP:
-        return true;
-
-      // SUCCESS only runs if the previous node was OK
-      case DConstants.SUCCESS:
-        return status==DNode.OK;
-
-      case DConstants.ERROR:
-        return status==DNode.ERROR;
-
-      // Default - always run. Overide the method if you need to change this
-      default:
-        return true;
-    }
-  }
-
-  /**
-   * Overide this for a transform to do something.
-   * @param env DEnvironment we are using
-   * @return true if we actually ran. DProcessor will jump to the getTo() node if so.
-   */
-  public boolean run(DEnvironment env)
-  {
-    return true;
-  }
-
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/tools.properties b/contrib/retep/uk/org/retep/tools.properties
deleted file mode 100644 (file)
index 38dc668..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#Written by Retep PropertyEditor\r
-#Sat Mar 03 16:29:44 GMT+00:00 2001\r
-tool.hba=pg_hba.conf editor\r
-tool.hba.class=uk.org.retep.util.hba.Editor\r
-tool.proped.class=uk.org.retep.util.proped.PropertyEditor\r
-tool.hba.type=Misc\r
-tool.proped.type=Misc\r
-tool.proped=Properties Editor\r
diff --git a/contrib/retep/uk/org/retep/tools/Tool.java b/contrib/retep/uk/org/retep/tools/Tool.java
deleted file mode 100644 (file)
index ffd19ae..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-package uk.org.retep.tools;
-
-import javax.swing.JMenuBar;
-
-/**
- * Tools can implement this interface to provide the parent manager (the big
- * application or the StandaloneApp class) enough details to display them.
- *
- * If a tool does not implement this class, it gets basic treatment.
- *
- * @author
- * @version 1.0
- */
-
-public interface Tool
-{
-  /**
-   * @return the JMenuBar for this tool, null if none.
-   */
-  public JMenuBar getMenuBar();
-
-  /**
-   * @return the title string to go into the JFrame/JInternalFrame's title bar.
-   */
-  public String getTitle();
-
-  /**
-   * Called by StandaloneApp to indicate this is within a StandaloneApp.
-   * You should assume you are not in standalone mode until this is called.
-   */
-  public void setStandaloneMode(boolean aMode);
-
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/ExceptionDialog.java b/contrib/retep/uk/org/retep/util/ExceptionDialog.java
deleted file mode 100644 (file)
index ea3d5c4..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-package uk.org.retep.util;
-
-import java.awt.*;
-import javax.swing.*;
-import java.awt.event.*;
-
-/**
- * Display an Exception to the user
- * @author
- * @version 1.0
- */
-
-public class ExceptionDialog extends JDialog
-{
-  // This is used to store the parent frame.
-  // Classes like StandaloneApp set's this so that the
-  // displayException() method can work without knowing/finding out
-  // the parent Frame/JFrame.
-  private static Frame globalFrame;
-
-  private static ExceptionDialog globalDialog;
-
-  JPanel panel1 = new JPanel();
-  BorderLayout borderLayout1 = new BorderLayout();
-  JTextArea message = new JTextArea();
-  JPanel jPanel1 = new JPanel();
-  JButton jButton1 = new JButton();
-  GridLayout gridLayout1 = new GridLayout();
-  JButton jButton2 = new JButton();
-  JLabel jLabel1 = new JLabel();
-
-  public ExceptionDialog(Frame frame, String title, boolean modal)
-  {
-    super(frame, title, modal);
-    try
-    {
-      jbInit();
-      pack();
-    }
-    catch(Exception ex)
-    {
-      ex.printStackTrace();
-    }
-  }
-
-  public ExceptionDialog()
-  {
-    this(null, "", false);
-  }
-  void jbInit() throws Exception
-  {
-    panel1.setLayout(borderLayout1);
-    message.setBorder(BorderFactory.createLoweredBevelBorder());
-    message.setText("jTextArea1");
-    message.setBackground(Color.lightGray);
-    message.setEditable(false);
-    jButton1.setText("Close");
-    jButton1.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        jButton1_actionPerformed(e);
-      }
-    });
-    jPanel1.setLayout(gridLayout1);
-    jButton2.setEnabled(false);
-    jButton2.setText("Stack Trace");
-    jLabel1.setEnabled(false);
-    getContentPane().add(panel1);
-    panel1.add(message, BorderLayout.CENTER);
-    this.getContentPane().add(jPanel1, BorderLayout.SOUTH);
-    jPanel1.add(jButton2, null);
-    jPanel1.add(jLabel1, null);
-    jPanel1.add(jButton1, null);
-  }
-
-  /**
-   * Sets the Frame used to display all dialog boxes.
-   */
-  public static void setFrame(Frame aFrame)
-  {
-    globalFrame = aFrame;
-  }
-
-  /**
-   * Displays a dialog based on the exception
-   * @param ex Exception that was thrown
-   */
-  public static void displayException(Exception ex)
-  {
-    displayException(ex,null);
-  }
-
-  /**
-   * Displays a dialog based on the exception
-   * @param ex Exception that was thrown
-   */
-  public static void displayException(Exception ex,String msg)
-  {
-    String cname = ex.getClass().getName();
-    int i=cname.lastIndexOf(".");
-    displayException(cname.substring(i+1),ex,msg);
-  }
-
-  public static void displayException(String title,Exception ex)
-  {
-    displayException(title,ex,null);
-  }
-
-  public static void displayException(String title,Exception ex,String msg)
-  {
-    Logger.log(Logger.ERROR,title,ex.getMessage());
-
-    // Default to a stack trace if no frame set
-    if(globalFrame==null) {
-      ex.printStackTrace();
-      return;
-    }
-
-    if(globalDialog==null) {
-      globalDialog=new ExceptionDialog(globalFrame,title,true);
-      globalDialog.pack();
-    }
-
-    globalDialog.setTitle(title);
-
-    if(msg!=null) {
-      globalDialog.message.setText(msg);
-      globalDialog.message.append(":\n");
-    }
-    globalDialog.message.append(ex.getMessage());
-
-    globalDialog.pack();
-    globalDialog.setVisible(true);
-  }
-
-  void jButton1_actionPerformed(ActionEvent e)
-  {
-    setVisible(false);
-  }
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/Globals.java b/contrib/retep/uk/org/retep/util/Globals.java
deleted file mode 100644 (file)
index c0e3548..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-package uk.org.retep.util;
-
-import uk.org.retep.util.Logger;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Properties;
-
-/**
- * This is a Singleton that stores global properties, command line arguments
- * etc.
- *
- * All tools are guranteed that this will exist.
- *
- * @author
- * @version 1.0
- */
-
-public class Globals
-{
-  private static final Globals SINGLETON = new Globals();
-
-  private Hashtable   global= new Hashtable();
-  private Properties  props = new Properties();
-  private ArrayList   args  = new ArrayList();
-
-  private Globals()
-  {
-  }
-
-  public static Globals getInstance()
-  {
-    return SINGLETON;
-  }
-
-  /**
-   * Retrieves an object from the global pool
-   * @param aKey key of the object
-   * @return The object, null if not found
-   */
-  public Object get(Object aKey)
-  {
-    return global.get(aKey);
-  }
-
-  /**
-   * Stores an object into the global pool
-   * @param aKey key of the object
-   * @param aObj the object to store
-   * @return aObj
-   */
-  public Object put(Object aKey,Object aObj)
-  {
-    return global.put(aKey,aObj);
-  }
-
-  /**
-   * Returns a Properties object of all properties
-   */
-  /*
-  public Properties getProperties()
-  {
-    return props;
-  }
-  */
-
-  /**
-   * @param aProp a property supplied to the command line
-   * @return property or NULL if not present
-   */
-  public String getProperty(String aProp)
-  {
-    return props.getProperty(aProp);
-  }
-
-  /**
-   * @param aProp a property supplied to the command line
-   * @param aDefault default to return if property was not supplied
-   * @return property value
-   */
-  public String getProperty(String aProp,String aDefault)
-  {
-    return props.getProperty(aProp,aDefault);
-  }
-
-  /**
-   * @param aID ID of the argument, 0 ... getArgumentCount()-1
-   * @return argument
-   */
-  public String getArgument(int aID)
-  {
-    return (String) args.get(aID);
-  }
-
-  /**
-   * Returns an array of String objects representing the arguments
-   */
-  public String[] getArguments()
-  {
-    return (String[]) args.toArray();
-  }
-
-  /**
-   * Returns an Iterator of the arguments
-   */
-  public Iterator getArgumentIterator()
-  {
-    return args.iterator();
-  }
-
-  /**
-   * @return number of arguments
-   */
-  public int getArgumentCount()
-  {
-    return args.size();
-  }
-
-  /**
-   * Parses the command line arguments
-   */
-  public void parseArguments(String[] aArgs)
-  throws Exception
-  {
-    for(int i=0;i
-      String arg = aArgs[i];
-      if(arg.startsWith("--") || arg.startsWith("-")) {
-        if(arg.length()>1) {
-          // Split the option at the first '=' char if any
-          int s = arg.startsWith("--") ? 2 : 1 ;  // -- or -
-          int e = arg.indexOf("=");
-          String key,val;
-          if(e>s) {
-            // Format: -key=value
-            key=arg.substring(s,e-1);
-            val=arg.substring(e+1);
-          } else if(e>-1 && e<=s) {
-            // Can't have a property without a key!
-            throw new Exception("Invalid option -=");
-          } else {
-            key=arg.substring(s);
-            val=""; // can't be null
-          }
-
-          if(key.equals("d")) {
-            // -d | --d is reserved to set the Logger level
-            int level=0;
-            if(!val.equals("")) {
-              level=Integer.parseInt(val);
-            }
-            Logger.setLevel(level);
-          } else {
-            // Add all other properties into the Properties object
-            props.put(key,val);
-            Logger.log(Logger.INFO,"Argument",key,val);
-          }
-
-        } else {
-          // Just a - on its own?
-          System.out.println("Unknown option: -");
-        }
-      } else {
-        // Add the argument to the array
-        args.add(arg);
-      }
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/Logger.java b/contrib/retep/uk/org/retep/util/Logger.java
deleted file mode 100644 (file)
index c272f1d..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-package uk.org.retep.util;
-
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
-
-public class Logger
-{
-  protected static int level;
-  protected static PrintWriter logger;
-
-  public static final int NONE  = -1;
-  public static final int INFO  = 0;
-  public static final int ERROR = 1;
-  public static final int DEBUG = 2;
-  public static final int ALL   = 3;
-
-  static {
-    level = NONE;
-    logger = null;
-  };
-
-  private static final String levels[] = {
-    "INFO :",
-    "ERROR:",
-    "DEBUG:",
-    "ALL  :"
-  };
-
-  public static void setLevel(int aLevel)
-  {
-    // Incase we have not yet set a logger
-    if(logger==null) {
-      logger = new PrintWriter(System.out);
-    }
-
-    if(aLevel
-      aLevel=NONE;
-    } else if(aLevel>ALL) {
-      aLevel=ALL;
-    }
-
-    level=aLevel;
-
-    if(level>NONE) {
-      log(INFO,"Log level changed to",level,levels[level]);
-    }
-  }
-
-  public static void setLogger(PrintWriter pw)
-  {
-    if(logger!=null) {
-      try {
-        logger.flush();
-        logger.close();
-      } catch(Exception ex) {
-        logger=pw;
-        log(ERROR,"Exception while closing logger",ex);
-      }
-    }
-    logger=pw;
-  }
-
-  public static void log(String msg)
-  {
-    log(INFO,msg);
-  }
-
-  public static void log(int aLevel,String msg)
-  {
-    write(aLevel,msg,null);
-  }
-
-  public static void log(int aLevel,String msg,int arg1)
-  {
-    Object o[] = {new Integer(arg1)};
-    write(aLevel,msg,o);
-  }
-
-  public static void log(int aLevel,String msg,int arg1,Object arg2)
-  {
-    Object o[] = {new Integer(arg1),arg2};
-    write(aLevel,msg,o);
-  }
-
-  public static void log(int aLevel,String msg,double arg1)
-  {
-    Object o[] = {new Double(arg1)};
-    write(aLevel,msg,o);
-  }
-
-  public static void log(int aLevel,String msg,double arg1,Object arg2)
-  {
-    Object o[] = {new Double(arg1),arg2};
-    write(aLevel,msg,o);
-  }
-
-  public static void log(int aLevel,String msg,Object arg1)
-  {
-    Object o[] = {arg1};
-    write(aLevel,msg,o);
-  }
-
-  public static void log(int aLevel,String msg,Object arg1,Object arg2)
-  {
-    Object o[] = {arg1,arg2};
-    write(aLevel,msg,o);
-  }
-
-  public static void log(int aLevel,String msg,Object arg1,Object arg2,Object arg3)
-  {
-    Object o[] = {arg1,arg2,arg3};
-    write(aLevel,msg,o);
-  }
-
-  public static void log(int aLevel,String msg,Throwable t)
-  {
-    CharArrayWriter buffer = new CharArrayWriter();
-    PrintWriter printWriter = new PrintWriter(buffer);
-    t.printStackTrace(printWriter);
-    Object o[] = {buffer.toString()};
-    buffer.close();
-    write(aLevel,msg,o);
-  }
-
-  private static void write(int aLevel,String aMsg,Object args[])
-  {
-    // Can't be above ALL
-    if(aLevel>ALL) {
-      aLevel=ALL;
-    }
-
-    // Ignore if below or equal to NONE
-    if(aLevellevel) {
-      return;
-    }
-
-    logger.print("Logger:");
-    logger.print(levels[aLevel]);
-    logger.print(aMsg);
-    if(args!=null) {
-      for(int a=0;a
-        logger.print(":");
-        logger.print(args[a]);
-      }
-    }
-    logger.println();
-    logger.flush();
-  }
-
-}
diff --git a/contrib/retep/uk/org/retep/util/Main.java b/contrib/retep/uk/org/retep/util/Main.java
deleted file mode 100644 (file)
index 5df75e0..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-package uk.org.retep.util;
-
-import uk.org.retep.util.StandaloneApp;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-
-/**
- * This is a template for your own Tools. Copy not extend this class. Please
- * refer to Implementation for details.
- *
- * All you need to to is implement the init() method.
- *
- * $Id: Main.java,v 1.1 2001/03/05 09:15:36 peter Exp $
- */
-
-public class Main extends StandaloneApp
-{
-  public Main(String[] args)
-  throws Exception
-  {
-    super(args);
-  }
-
-  public JComponent init()
-  throws Exception
-  {
-    // Create your tool here, then do things like load files based on the
-    // command line arguments. Then return that tool.
-
-    // NB: This just allows us to compile. You're implementation must return
-    // the Tool itself.
-    return new JLabel("Replace with your own tool!");
-  }
-
-  public static void main(String[] args)
-  throws Exception
-  {
-    Main main = new Main(args);
-    main.pack();
-    main.setVisible(true);
-  }
-}
diff --git a/contrib/retep/uk/org/retep/util/StandaloneApp.java b/contrib/retep/uk/org/retep/util/StandaloneApp.java
deleted file mode 100644 (file)
index 8340a56..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package uk.org.retep.util;
-
-import uk.org.retep.tools.Tool;
-import uk.org.retep.util.Globals;
-import uk.org.retep.util.ExceptionDialog;
-
-import java.awt.*;
-import javax.swing.*;
-import java.awt.event.*;
-
-/**
- * This provides the basic services needed for enabling some of the tools to
- * run in a Stand-alone fassion.
- *
- * Note: Because it's designed for standalone use, if this window is closed,
- * the JVM is terminated. Do not use for normal application use.
- *
- * $Id: StandaloneApp.java,v 1.2 2001/03/05 10:18:48 peter Exp $
- *
- * @author
- * @version 1.0
- */
-
-public abstract class StandaloneApp extends JFrame
-{
-  public StandaloneApp(String[] aArgs)
-  throws Exception
-  {
-    super(); // Initialise JFrame
-
-    // Allow dialogs to work with us
-    ExceptionDialog.setFrame(this);
-
-    // Add a window listener
-    this.addWindowListener(new java.awt.event.WindowAdapter()
-    {
-      public void windowClosing(WindowEvent e)
-      {
-        System.exit(0);
-      }
-    });
-
-    // Parse the command line arguments
-    Globals.getInstance().parseArguments(aArgs);
-
-    // Now initialise this tool (init is overidden)
-    JComponent tool = null;
-    try {
-      tool = init();
-    } catch(Exception ex) {
-      ex.printStackTrace();
-      System.exit(1);
-    }
-
-    // Now add to this frame
-    this.getContentPane().add(tool, BorderLayout.CENTER);
-
-    // Finally call the Tool interface
-    if(tool instanceof Tool) {
-      Tool t = (Tool) tool;
-
-      // Notify the tool we are a standalone
-      t.setStandaloneMode(true);
-
-      // Fetch the title
-      setTitle(t.getTitle());
-
-      // and a MenuBar (if needed)
-      JMenuBar mb = t.getMenuBar();
-      if(mb!=null) {
-        setJMenuBar(t.getMenuBar());
-      }
-    } else {
-      // Ok, set a default title string
-      setTitle("RetepTools Standalone");
-    }
-
-  }
-
-  /**
-   * You must overide this method with your initialiser.
-   */
-  public abstract JComponent init() throws Exception;
-
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/hba/Editor.java b/contrib/retep/uk/org/retep/util/hba/Editor.java
deleted file mode 100644 (file)
index 6571bfe..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-package uk.org.retep.util.hba;
-
-import uk.org.retep.tools.Tool;
-import uk.org.retep.util.models.HBATableModel;
-
-import java.awt.*;
-import java.io.*;
-import java.util.*;
-import javax.swing.table.*;
-import javax.swing.*;
-
-/**
- * pg_hba.conf editor (& repairer)
- *
- * @author
- * @version 1.0
- */
-
-public class Editor extends JPanel implements Tool
-{
-  BorderLayout borderLayout1 = new BorderLayout();
-  HBATableModel model = new HBATableModel();
-  JPanel jPanel1 = new JPanel();
-  GridBagLayout gridBagLayout1 = new GridBagLayout();
-  JLabel jLabel1 = new JLabel();
-  JComboBox typeEntry = new JComboBox();
-  JLabel jLabel2 = new JLabel();
-  JLabel jLabel3 = new JLabel();
-  JLabel jLabel4 = new JLabel();
-  JTextField ipEntry = new JTextField();
-  JTextField maskEntry = new JTextField();
-  JComboBox authEntry = new JComboBox();
-  JTextField argEntry = new JTextField();
-  JLabel jLabel5 = new JLabel();
-  JPanel jPanel2 = new JPanel();
-  FlowLayout flowLayout1 = new FlowLayout();
-  JButton jButton1 = new JButton();
-  JButton jButton2 = new JButton();
-  JScrollPane jScrollPane1 = new JScrollPane();
-  JButton jButton3 = new JButton();
-  JTable jTable1 = new JTable();
-
-  public Editor()
-  {
-    try
-    {
-      jbInit();
-    }
-    catch(Exception ex)
-    {
-      ex.printStackTrace();
-    }
-  }
-  void jbInit() throws Exception
-  {
-    this.setLayout(borderLayout1);
-    jTable1.setPreferredSize(new Dimension(600, 300));
-    jTable1.setModel(model);
-    this.setPreferredSize(new Dimension(600, 300));
-    this.add(jScrollPane1, BorderLayout.CENTER);
-    jScrollPane1.getViewport().add(jTable1, null);
-    jPanel1.setLayout(gridBagLayout1);
-    jLabel1.setText("Type");
-    jLabel2.setText("IP Address");
-    jLabel3.setText("Mask");
-    jLabel4.setText("Authentication");
-    ipEntry.setText("jTextField1");
-    maskEntry.setText("jTextField2");
-    argEntry.setText("jTextField3");
-    jLabel5.setText("Argument");
-    jPanel2.setLayout(flowLayout1);
-    jButton1.setText("New entry");
-    jButton2.setText("Validate");
-    jButton3.setText("Devele");
-    this.add(jPanel1, BorderLayout.SOUTH);
-    jPanel1.add(jLabel1, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(typeEntry, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(jLabel2, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(jLabel3, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(jLabel4, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(ipEntry, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(maskEntry, new GridBagConstraints(4, 1, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(authEntry, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(argEntry, new GridBagConstraints(4, 2, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(jLabel5, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
-            ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel1.add(jPanel2, new GridBagConstraints(0, 3, 5, 1, 0.0, 0.0
-            ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
-    jPanel2.add(jButton3, null);
-    jPanel2.add(jButton1, null);
-    jPanel2.add(jButton2, null);
-  }
-
-  public void openFile(String aFilename)
-  throws IOException
-  {
-    FileInputStream fis = new FileInputStream(aFilename);
-    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
-    ArrayList list = model.getArray();
-
-    String s = br.readLine();
-    while(s!=null) {
-      if(s.startsWith("#")) {
-        // ignore comments
-      } else {
-        Record rec = Record.parseLine(s);
-        if(rec!=null) {
-          rec.validate();
-          list.add(rec);
-        }
-      }
-      s=br.readLine();
-    }
-
-    model.fireTableDataChanged();
-  }
-
-  public JMenuBar getMenuBar()
-  {
-    return null;
-  }
-
-  public String getTitle()
-  {
-    return "pg_hba.conf Editor/Repair tool";
-  }
-
-  public void setStandaloneMode(boolean aMode)
-  {
-  }
-
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/hba/Main.java b/contrib/retep/uk/org/retep/util/hba/Main.java
deleted file mode 100644 (file)
index 3d93431..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-package uk.org.retep.util.hba;
-
-import uk.org.retep.util.ExceptionDialog;
-import uk.org.retep.util.Globals;
-import uk.org.retep.util.Logger;
-import uk.org.retep.util.StandaloneApp;
-
-import java.io.IOException;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-
-/**
- * Standalone entry point for the Properties editor
- *
- * $Id: Main.java,v 1.1 2001/03/05 09:15:37 peter Exp $
- */
-
-public class Main extends StandaloneApp
-{
-  public Main(String[] args)
-  throws Exception
-  {
-    super(args);
-  }
-
-  public JComponent init()
-  throws Exception
-  {
-    Globals globals = Globals.getInstance();
-
-    Editor editor = new Editor();
-
-    if(globals.getArgumentCount()>0) {
-      editor.openFile(globals.getArgument(0));
-    }
-
-    return editor;
-  }
-
-  public static void main(String[] args)
-  throws Exception
-  {
-    Main main = new Main(args);
-    main.pack();
-    main.setVisible(true);
-  }
-}
diff --git a/contrib/retep/uk/org/retep/util/hba/Record.java b/contrib/retep/uk/org/retep/util/hba/Record.java
deleted file mode 100644 (file)
index b91e6dc..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-package uk.org.retep.util.hba;
-
-import uk.org.retep.util.Logger;
-import uk.org.retep.util.misc.IPAddress;
-import uk.org.retep.util.misc.WStringTokenizer;
-
-/**
- * Used to store the entries of a pg_hba.conf file
- * @author
- * @version 1.0
- */
-
-public class Record
-{
-  int       type;
-  String    dbname;
-  IPAddress ip;
-  IPAddress mask;
-  int       authType;
-  String    authArg;
-
-  public static final int TYPE_LOCAL    = 0;
-  public static final int TYPE_HOST     = 1;
-  public static final int TYPE_HOSTSSL  = 2;
-
-  public static final String types[] = {
-    "local","host","hostssl"
-  };
-
-  public static final int AUTH_TRUST    = 0;
-  public static final int AUTH_PASSWORD = 1;
-  public static final int AUTH_CRYPT    = 2;
-  public static final int AUTH_IDENT    = 3;
-  public static final int AUTH_KRB4     = 4;
-  public static final int AUTH_KRB5     = 5;
-  public static final int AUTH_REJECT   = 6;
-
-  public static final String auths[] = {
-    "trust","password","crypt",
-    "ident",
-    "krb4","krb5",
-    "reject"
-  };
-
-  private static final String spc = " ";
-
-  public Record()
-  {
-  }
-
-  public int getType()
-  {
-    return type;
-  }
-
-  public void setType(int aType)
-  {
-    type=aType;
-  }
-
-  public String getDatabase()
-  {
-    return dbname;
-  }
-
-  public void setDatabase(String aDB)
-  {
-    dbname=aDB;
-  }
-
-  public int getAuthType()
-  {
-    return authType;
-  }
-
-  public void setAuthType(int aType)
-  {
-    authType=aType;
-  }
-
-  public String getAuthArgs()
-  {
-    return authArg;
-  }
-
-  public void setAuthArgs(String aArg)
-  {
-    authArg=aArg;
-  }
-
-  public IPAddress getIP()
-  {
-    return ip;
-  }
-
-  public void setIP(String aArg)
-  {
-    setIP(new IPAddress(aArg));
-  }
-
-  public void setIP(IPAddress aArg)
-  {
-    ip=aArg;
-  }
-
-    public IPAddress getMask()
-  {
-    return mask;
-  }
-
-  public void setMask(String aArg)
-  {
-    setMask(new IPAddress(aArg));
-  }
-
-  public void setMask(IPAddress aArg)
-  {
-    mask=aArg;
-  }
-
-  public String toString()
-  {
-    StringBuffer buf = new StringBuffer();
-    write(buf);
-    return buf.toString();
-  }
-
-  public void write(StringBuffer buf)
-  {
-    buf.append(types[type]).append(spc);
-
-    if(type==TYPE_HOST || type==TYPE_HOSTSSL) {
-      buf.append(getIP()).append(spc);
-      buf.append(getMask()).append(spc);
-    }
-
-    buf.append(auths[authType]);
-
-    // Now the authArg
-    switch(type)
-    {
-      // These have no authArgs
-      case AUTH_TRUST:
-      case AUTH_REJECT:
-      case AUTH_KRB4:
-      case AUTH_KRB5:
-        break;
-
-      // These must have an arg
-      case AUTH_IDENT:
-        buf.append(spc).append(getAuthArgs());
-        break;
-
-      // These may have an optional arg
-      case AUTH_PASSWORD:
-      case AUTH_CRYPT:
-        if(!(authArg==null || authArg.equals("")))
-          buf.append(spc).append(getAuthArgs());
-        break;
-    }
-  }
-
-  private static WStringTokenizer tok;
-
-  public static Record parseLine(String s)
-  {
-    Record res = new Record();
-    int type;
-
-    if(s==null || s.equals("") || s.startsWith("#"))
-      return null;
-
-    if(tok==null)
-      tok=new WStringTokenizer();
-
-    tok.setString(s);
-
-    type=WStringTokenizer.matchToken(types,tok.nextToken());
-    res.setType(type);
-
-    res.setDatabase(tok.nextToken());
-
-    if(type==TYPE_HOST || type==TYPE_HOSTSSL) {
-      res.setIP(new IPAddress(tok.nextToken()));
-      res.setMask(new IPAddress(tok.nextToken()));
-    }
-
-    res.setAuthType(WStringTokenizer.matchToken(auths,tok.nextToken()));
-    res.setAuthArgs(tok.nextToken());
-
-    return res;
-  }
-
-  public static final int VALID         = 0;
-  public static final int INVALID_TYPE  = 1;
-  public static final int INVALID_IPREQUIRED  = 2;
-
-  /**
-   * Validates the record
-   */
-  public int validate()
-  {
-    switch(type)
-    {
-      case TYPE_HOST:
-      case TYPE_HOSTSSL:
-        if(ip==null || ip.isInvalid()) {
-          Logger.log(Logger.INFO,"pg_hba.conf: IP missing or invalid - repairing");
-          setMask("127.0.0.1");
-        }
-
-        if(mask==null || mask.isInvalid() || !ip.validateMask(mask)) {
-          Logger.log(Logger.INFO,"pg_hba.conf: IP address without mask - repairing");
-          setMask(ip.getMask());
-        }
-
-        break;
-
-      case TYPE_LOCAL:
-        break;
-
-      default:
-        return INVALID_TYPE;
-    }
-
-    return VALID;
-  }
-
-  /*
-# host       all        192.168.54.1   255.255.255.255    reject
-# host       all        0.0.0.0        0.0.0.0            krb5
-# host       all        192.168.0.0    255.255.0.0        ident     omicron
-#
-
-local        all                                           trust
-host         all         127.0.0.1     255.255.255.255     trust
-*/
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/misc/IPAddress.java b/contrib/retep/uk/org/retep/util/misc/IPAddress.java
deleted file mode 100644 (file)
index a04babd..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-package uk.org.retep.util.misc;
-
-import java.util.StringTokenizer;
-
-/**
- * Represent an IP address
- * @author
- * @version 1.0
- */
-
-public class IPAddress
-{
-  protected long    address;
-  protected long    b[] = new long[4];
-  protected boolean invalid=true;
-
-  public IPAddress()
-  {
-  }
-
-  public IPAddress(String s)
-  {
-    setAddress(s);
-  }
-
-  public synchronized void setAddress(String s)
-  {
-    if(s==null || s.equals("")) {
-      invalid=true;
-      return;
-    }
-
-    address=0;
-    StringTokenizer tok = new StringTokenizer(s,".");
-    int i=0;
-    while(i<4 && tok.hasMoreElements()) {
-      b[i++] = Long.parseLong(tok.nextToken());
-    }
-    while(i<4) {
-      b[i++]=0;
-    }
-
-    invalid=false;
-    refresh();
-  }
-
-  public void refresh()
-  {
-    if(invalid)
-      return;
-    address = (b[0]<<24) | (b[1]<<16) | (b[2]<<8) | (b[3]);
-  }
-
-  public boolean isInvalid()
-  {
-    refresh();
-    return invalid;
-  }
-
-  public String toString()
-  {
-    refresh();
-    if(invalid)
-      return "*INVALID*";
-
-    return Long.toString(b[0])+"."+Long.toString(b[1])+"."+Long.toString(b[2])+"."+Long.toString(b[3]);
-  }
-
-  public boolean equals(Object o)
-  {
-    if(o instanceof IPAddress) {
-      IPAddress ip = (IPAddress) o;
-
-      refresh();
-      ip.refresh();
-
-      if(ip.invalid == invalid)
-        return false;
-
-      return address==ip.address;
-    }
-    return false;
-  }
-
-  private static int gethoststart(long b)
-  {
-    if((b & 0x80)==0x00) return 1; // class A
-    if((b & 0xc0)==0x80) return 2; // class B
-    if((b & 0xe0)==0xc0) return 3; // class C
-    return 4;                      // class D
-  }
-
-  public boolean validateMask(IPAddress mask)
-  {
-    // If were a network check the host mask
-    int i=gethoststart(b[0]);
-System.out.println("Host start "+i);
-    while(i<4 && b[i]==0) {
-      if(mask.b[i++]>0)
-        return false;
-    }
-
-    for(i=0;i<4;i++) {
-      if((b[i]&mask.b[i])!=b[i])
-        return false;
-    }
-
-    return true;
-  }
-
-  public IPAddress getMask()
-  {
-    IPAddress mask = new IPAddress();
-    int i=3;
-    while(i>-1 && b[i]==0) {
-      mask.b[i--]=0;
-    }
-    while(i>-1) {
-      mask.b[i--]=255;
-    }
-    mask.invalid=false;
-    mask.refresh();
-    return mask;
-  }
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/misc/PropertiesIO.java b/contrib/retep/uk/org/retep/util/misc/PropertiesIO.java
deleted file mode 100644 (file)
index 7bed62c..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-package uk.org.retep.util.misc;
-
-import java.io.*;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.TreeMap;
-
-/**
- * Misc Properties utilities..
- * @author
- * @version 1.0
- */
-
-public class PropertiesIO
-{
-
-  public PropertiesIO()
-  {
-  }
-
-  /**
-   * Builds a TreeMap based on the given Properties object. This is useful
-   * because the keys will be in sorted order.
-   */
-  public static TreeMap getTreeMap(Properties p)
-  {
-    TreeMap map = new TreeMap();
-    Iterator e = p.keySet().iterator();
-    while(e.hasNext()) {
-      Object k = e.next();
-      map.put(k,p.get(k));
-    }
-    return map;
-  }
-
-  /**
-   * Writes a Properties file to the writer. This is similar to Properties.save
-   * except you can pick the key/value separator
-   */
-  public static synchronized void save(Properties p,OutputStream out,char sep,String header)
-  throws IOException
-  {
-    save(p,p.keySet().iterator(),out,sep,header);
-  }
-
-  /**
-   * Writes a Properties file to the writer. This is similar to Properties.save
-   * except you can pick the key/value separator and the keys are written
-   * in a sorted manner
-   */
-  public static synchronized void saveSorted(Properties p,OutputStream out,char sep,String header)
-  throws IOException
-  {
-    save(p,getTreeMap(p).keySet().iterator(),out,sep,header);
-  }
-
-  /**
-   * This is the same as save, only the keys in the enumeration are written.
-   */
-  public static synchronized void save(Properties p,Iterator e, OutputStream out,char sep,String header)
-  throws IOException
-  {
-    BufferedWriter w = new BufferedWriter(new OutputStreamWriter(out, "8859_1"));
-
-    if (header != null) {
-      w.write('#');
-      w.write(header);
-      w.newLine();
-    }
-
-    w.write('#');
-    w.write(new Date().toString());
-    w.newLine();
-
-    while(e.hasNext()) {
-      String key = (String)e.next();
-      w.write(encode(key,true));
-      w.write(sep);
-      w.write(encode((String)p.get(key),false));
-      w.newLine();
-    }
-    w.flush();
-  }
-
-  private static final String specialSaveChars = "=: \t\r\n\f#!";
-
-  /**
-   * Encodes a string in a way similar to the JDK's Properties method
-   */
-  public static String encode(String s, boolean escapeSpace)
-  {
-    int l=s.length();
-    StringBuffer buf = new StringBuffer(l<<1);
-
-    for(int i=0;i
-      char c = s.charAt(i);
-      switch(c)
-        {
-          case ' ':
-            if(i==0 || escapeSpace) {
-              buf.append('\\');
-            }
-            buf.append(' ');
-            break;
-
-          case '\\':
-            buf.append('\\').append('\\');
-            break;
-
-          case '\t':
-            buf.append('\\').append('t');
-            break;
-
-          case '\n':
-            buf.append('\\').append('n');
-            break;
-
-          case '\r':
-            buf.append('\\').append('r');
-            break;
-
-          case '\f':
-            buf.append('\\').append('f');
-            break;
-
-          default:
-            if((c<0x20)||(c>0x7e)) {
-              buf.append('\\').append('u');
-              buf.append(toHex((c >> 12) & 0xF));
-              buf.append(toHex((c >>  8) & 0xF));
-              buf.append(toHex((c >>  4) & 0xF));
-              buf.append(toHex( c        & 0xF));
-            } else {
-              if (specialSaveChars.indexOf(c) != -1)
-                buf.append('\\');
-              buf.append(c);
-            }
-        }
-    }
-    return buf.toString();
-  }
-
-  /**
-   * Convert a nibble to a hex character
-   * @param    nibble  the nibble to convert.
-   */
-  public static char toHex(int n) {
-    return hd[(n & 0xF)];
-  }
-
-  /** A table of hex digits */
-  private static final char[] hd = {
-    '0','1','2','3','4','5','6','7',
-    '8','9','A','B','C','D','E','F'
-  };
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/misc/WStringTokenizer.java b/contrib/retep/uk/org/retep/util/misc/WStringTokenizer.java
deleted file mode 100644 (file)
index 763676c..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-package uk.org.retep.util.misc;
-
-/**
- * Similar to StringTokenizer but handles white spaces and multiple delimiters
- * between tokens. It also handles quotes
- *
- * @author
- * @version 1.0
- */
-
-public class WStringTokenizer
-{
-  String string;
-  int pos,len;
-
-  /**
-   * Constructor
-   */
-  public WStringTokenizer()
-  {
-  }
-
-  /**
-   * Constructor: set the initial string
-   * @param aString String to tokenise
-   */
-  public WStringTokenizer(String aString)
-  {
-    setString(aString);
-  }
-
-  /**
-   * @param aString String to tokenise
-   */
-  public void setString(String aString)
-  {
-    string=aString;
-    pos=0;
-    len=string.length();
-  }
-
-  /**
-   * @return true if more tokens may be possible
-   */
-  public boolean hasMoreTokens()
-  {
-    return !(string==null || pos==len);
-  }
-
-  /**
-   * @return next token, null if complete.
-   */
-  public String nextToken()
-  {
-    char c;
-    boolean q=false;
-
-    if(!hasMoreTokens())
-      return null;
-
-    // find start of token
-    while(pos
-      c = string.charAt(pos);
-      if(c=='\'' || c=='\"')
-        q=!q;
-      if(q || c==' '||c=='\t')
-        pos++;
-      else
-        break;
-    }
-
-    // find last char of token
-    int p=pos;
-    while(pos
-      c = string.charAt(pos);
-      if(c=='\'' || c=='\"')
-        q=!q;
-      if(!q && (c==' '||c=='\t') )
-        break;
-      else
-        pos++;
-    }
-
-    return string.substring(p,pos);
-  }
-
-  /**
-   * Compare a string against an array of strings and return the index
-   * @param t array to compare against (all lowercase)
-   * @param s string to test
-   * @return index in t of s, -1 if not present
-   */
-  public static int matchToken(String[] t,String s)
-  {
-    s=s.toLowerCase();
-    for(int i=0;i
-      if(t[i].equals(s))
-        return i;
-    return -1;
-  }
-
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/models/HBATableModel.java b/contrib/retep/uk/org/retep/util/models/HBATableModel.java
deleted file mode 100644 (file)
index fb7bb72..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-package uk.org.retep.util.models;
-
-import uk.org.retep.util.hba.Record;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import javax.swing.table.*;
-
-/**
- * A TableModel to display the contents of a pg_hba.conf file
- * @author
- * @version 1.0
- */
-
-public class HBATableModel extends AbstractTableModel
-{
-  ArrayList list = new ArrayList();
-
-  private static final String cols[] = {
-    "Type","Database","IP Address","IP Mask","Authentication","Arguments"
-  };
-
-
-  public HBATableModel()
-  {
-  }
-
-  public ArrayList getArray()
-  {
-    return list;
-  }
-
-  public int getColumnCount()
-  {
-    return cols.length;
-  }
-
-  public Object getValueAt(int aRow, int aCol)
-  {
-    Record rec = (Record) list.get(aRow);
-    int t;
-
-    switch(aCol)
-    {
-      case 0:
-        t = rec.getType();
-        return t<0 ? "ERR" : Record.types[t] ;
-
-      case 1:
-        return rec.getDatabase();
-
-      case 2:
-        return rec.getIP();
-
-      case 3:
-        return rec.getMask();
-
-      case 4:
-        t=rec.getAuthType();
-        return t<0 ? "ERR" : Record.auths[t] ;
-
-      case 5:
-        return rec.getAuthArgs();
-
-      default:
-        return "";
-    }
-  }
-
-  public int getRowCount()
-  {
-    return list.size();
-  }
-
-  public boolean isCellEditable(int rowIndex, int columnIndex)
-  {
-    /**@todo: Override this javax.swing.table.AbstractTableModel method*/
-    return super.isCellEditable( rowIndex,  columnIndex);
-  }
-
-  public String getColumnName(int aColumn)
-  {
-    return cols[aColumn];
-  }
-
-  public void setValueAt(Object aValue, int rowIndex, int columnIndex)
-  {
-    /**@todo: Override this javax.swing.table.AbstractTableModel method*/
-    super.setValueAt( aValue,  rowIndex,  columnIndex);
-  }
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/models/PropertiesTableModel.java b/contrib/retep/uk/org/retep/util/models/PropertiesTableModel.java
deleted file mode 100644 (file)
index d48b166..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-package uk.org.retep.util.models;
-
-import uk.org.retep.util.Logger;
-import uk.org.retep.util.misc.PropertiesIO;
-
-import java.io.*;
-import java.util.*;
-import javax.swing.table.*;
-
-import java.text.*;
-
-/**
- * A TableModel that shows a view of a PropertyFile object
- *
- * $Id: PropertiesTableModel.java,v 1.1 2001/03/05 09:15:37 peter Exp $
- *
- * @author
- * @version 1.0
- */
-public class PropertiesTableModel extends AbstractTableModel
-{
-  // The properties
-  protected TreeMap properties;
-  protected Properties origProperties;
-  protected Object keys[];
-
-  public PropertiesTableModel()
-  {
-    this(new Properties());
-  }
-
-  public PropertiesTableModel(Properties aProperties)
-  {
-    setProperties(aProperties);
-  }
-
-  public synchronized int getKeyRow(Object k)
-  {
-    for(int i=0;i
-      if(keys[i].equals(k)) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Best not use this one to update, use the put method in this class!
-   */
-  public Properties getProperties()
-  {
-    return origProperties;
-  }
-
-  public synchronized void put(Object k,Object v)
-  {
-    properties.put(k,v);
-    origProperties.put(k,v);
-    refresh();
-  }
-
-  public Object get(Object k)
-  {
-    return origProperties.get(k);
-  }
-
-  public synchronized void remove(Object k)
-  {
-    properties.remove(k);
-    origProperties.remove(k);
-    refresh();
-  }
-
-  public boolean contains(Object o)
-  {
-    return origProperties.contains(o);
-  }
-
-  public boolean containsKey(Object o)
-  {
-    return origProperties.containsKey(o);
-  }
-
-  public boolean containsValue(Object o)
-  {
-    return origProperties.containsValue(o);
-  }
-
-  public void setProperties(Properties aProperties)
-  {
-    origProperties=aProperties;
-    properties = PropertiesIO.getTreeMap(aProperties);
-    refresh();
-  }
-
-  public void refresh()
-  {
-    keys = properties.keySet().toArray();
-    fireTableDataChanged();
-  }
-
-  private static final String cols[] = {
-    "Property","Value"
-  };
-
-  public int getColumnCount()
-  {
-    return cols.length;
-  }
-
-  public Object getValueAt(int aRow, int aColumn)
-  {
-    if(aRow<0 || aRow>=keys.length || aColumn<0 || aColumn>=cols.length)
-      return null;
-
-    Object key = keys[aRow];
-
-    switch(aColumn)
-    {
-      case 0:
-        return key;
-
-      case 1:
-        return properties.get(key);
-
-      default:
-        return null;
-    }
-  }
-
-  public int getRowCount()
-  {
-    return keys.length;
-  }
-
-  public String getColumnName(int aColumn)
-  {
-    return cols[aColumn];
-  }
-
-  public void setValueAt(Object aValue, int aRow, int aColumn)
-  {
-    if(aRow<0 || aRow>=keys.length || aColumn<0 || aColumn>=cols.length)
-      return;
-
-    switch(aColumn)
-      {
-        // Rename the key (only if not already present). If already present
-        // the refresh() will replace with the old one anyhow...
-        case 0:
-          if(!properties.containsKey(aValue)) {
-            Object oldValue = get(keys[aRow]);
-            remove(keys[aRow]);
-            put(aValue,oldValue);
-          }
-          refresh();
-          break;
-
-        // Update the value...
-        case 1:
-          put(keys[aRow],aValue);
-          //refresh();
-          break;
-
-        default:
-          // Should never be called
-          Logger.log(Logger.ERROR,"PropertiesTableModel: Column range",aColumn);
-      }
-  }
-
-  public boolean isCellEditable(int aRow, int aColumn)
-  {
-    return true;
-  }
-
-}
diff --git a/contrib/retep/uk/org/retep/util/proped/Main.java b/contrib/retep/uk/org/retep/util/proped/Main.java
deleted file mode 100644 (file)
index 6f2c73b..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-package uk.org.retep.util.proped;
-
-import uk.org.retep.util.ExceptionDialog;
-import uk.org.retep.util.Globals;
-import uk.org.retep.util.Logger;
-import uk.org.retep.util.StandaloneApp;
-
-import java.io.IOException;
-import java.util.Iterator;
-import javax.swing.JComponent;
-
-/**
- * Standalone entry point for the Properties editor
- *
- * $Id: Main.java,v 1.1 2001/03/05 09:15:38 peter Exp $
- */
-
-public class Main extends StandaloneApp
-{
-  public Main(String[] args)
-  throws Exception
-  {
-    super(args);
-  }
-
-  public JComponent init()
-  throws Exception
-  {
-    Globals globals = Globals.getInstance();
-
-    PropertyEditor panel = new PropertyEditor();
-
-    // Only handle 1 open at a time in standalone mode
-    if(globals.getArgumentCount()>0) {
-      try {
-        panel.openFile(globals.getArgument(0));
-      } catch(IOException ioe) {
-        ExceptionDialog.displayException(ioe,"while loading "+globals.getArgument(0));
-        throw (Exception) ioe.fillInStackTrace();
-      }
-    }
-
-    return panel;
-  }
-
-  public static void main(String[] args)
-  throws Exception
-  {
-    Main main = new Main(args);
-    main.pack();
-    main.setVisible(true);
-  }
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/util/proped/PropertyEditor.java b/contrib/retep/uk/org/retep/util/proped/PropertyEditor.java
deleted file mode 100644 (file)
index b5c19e1..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-package uk.org.retep.util.proped;
-
-import uk.org.retep.util.ExceptionDialog;
-import uk.org.retep.util.misc.PropertiesIO;
-import uk.org.retep.util.models.PropertiesTableModel;
-
-import java.awt.*;
-import java.io.*;
-import java.util.*;
-import javax.swing.*;
-import java.awt.event.*;
-
-/**
- * A property file editor
- *
- * $Id: PropertyEditor.java,v 1.1 2001/03/05 09:15:38 peter Exp $
- *
- * @author
- * @version 1.0
- */
-
-public class PropertyEditor
-extends JPanel
-implements uk.org.retep.tools.Tool
-{
-  BorderLayout borderLayout1 = new BorderLayout();
-
-  // The filename, null if not set
-  String filename;
-  File file;
-
-  JScrollPane jScrollPane1 = new JScrollPane();
-  JTable contentTable = new JTable();
-
-  PropertiesTableModel model = new PropertiesTableModel();
-
-  boolean standaloneMode;
-
-  private static final String TITLE_PREFIX = "Retep PropertyEditor";
-  JPopupMenu popupMenu = new JPopupMenu();
-  JMenuItem newPopupItem = new JMenuItem();
-  JMenuItem dupPopupItem = new JMenuItem();
-  JMenuItem delPopupItem = new JMenuItem();
-  JMenuBar menuBar = new JMenuBar();
-  JMenu jMenu1 = new JMenu();
-  JMenuItem jMenuItem4 = new JMenuItem();
-  JMenuItem jMenuItem5 = new JMenuItem();
-  JMenuItem jMenuItem6 = new JMenuItem();
-  JMenuItem jMenuItem7 = new JMenuItem();
-  JMenuItem jMenuItem8 = new JMenuItem();
-  JMenuItem closeMenuItem = new JMenuItem();
-
-  public PropertyEditor()
-  {
-    try
-    {
-      jbInit();
-    }
-    catch(Exception ex)
-    {
-      ex.printStackTrace();
-    }
-  }
-
-  /**
-   * @return the default menubar
-   */
-  public JMenuBar getMenuBar()
-  {
-    return menuBar;
-  }
-
-  /**
-   * @return the File menu
-   */
-  public JMenu getMenu()
-  {
-    return jMenu1;
-  }
-
-  /**
-   * @return the recomended title string for the parent JFrame/JInternalFrame
-   */
-  public String getTitle()
-  {
-    if(filename==null) {
-      return TITLE_PREFIX;
-    }
-    return TITLE_PREFIX+": "+filename;
-  }
-
-  /**
-   * Sets menus up to Standalone mode
-   */
-  public void setStandaloneMode(boolean aMode)
-  {
-    standaloneMode=aMode;
-    if(aMode) {
-      closeMenuItem.setText("Exit");
-    } else {
-      closeMenuItem.setText("Close");
-    }
-  }
-
-  public boolean isStandalone()
-  {
-    return standaloneMode;
-  }
-
-  public void openFile(String aFile)
-  throws IOException
-  {
-    openFile(new File(aFile));
-  }
-
-  public void openFile(File aFile)
-  throws IOException
-  {
-    FileInputStream fis = new FileInputStream(aFile);
-    Properties p = new Properties();
-    p.load(fis);
-    fis.close();
-    model.setProperties(p);
-
-    file=aFile;
-    filename = aFile.getAbsolutePath();
-  }
-
-  public void saveFile(File aFile)
-  throws IOException
-  {
-    FileOutputStream fis = new FileOutputStream(aFile);
-    PropertiesIO.save(model.getProperties(),fis,'=',"Written by "+TITLE_PREFIX);
-    fis.close();
-
-    filename = aFile.getAbsolutePath();
-    file = aFile;
-  }
-
-  void jbInit() throws Exception
-  {
-    this.setLayout(borderLayout1);
-    contentTable.setToolTipText("");
-    contentTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
-    contentTable.setModel(model);
-    contentTable.addMouseListener(new java.awt.event.MouseAdapter()
-    {
-      public void mouseClicked(MouseEvent e)
-      {
-        contentTable_mouseClicked(e);
-      }
-      public void mouseReleased(MouseEvent e)
-      {
-        contentTable_mouseReleased(e);
-      }
-    });
-    newPopupItem.setText("New");
-    newPopupItem.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        newPopupItem_actionPerformed(e);
-      }
-    });
-    dupPopupItem.setText("Duplicate");
-    dupPopupItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(67, java.awt.event.KeyEvent.CTRL_MASK, false));
-    dupPopupItem.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        dupPopupItem_actionPerformed(e);
-      }
-    });
-    delPopupItem.setText("Delete");
-    delPopupItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(68, java.awt.event.KeyEvent.CTRL_MASK, false));
-    delPopupItem.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        delPopupItem_actionPerformed(e);
-      }
-    });
-    jMenu1.setText("File");
-    jMenuItem4.setText("Open");
-    jMenuItem4.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        jMenuItem4_actionPerformed(e);
-      }
-    });
-    jMenuItem5.setText("Save");
-    jMenuItem5.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        jMenuItem5_actionPerformed(e);
-      }
-    });
-    jMenuItem6.setText("Save As");
-    jMenuItem6.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        jMenuItem6_actionPerformed(e);
-      }
-    });
-    jMenuItem7.setText("Revert");
-    jMenuItem7.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        jMenuItem7_actionPerformed(e);
-      }
-    });
-    jMenuItem8.setText("Print");
-    closeMenuItem.setText("Close");
-    closeMenuItem.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        closeMenuItem_actionPerformed(e);
-      }
-    });
-    jMenu2.setText("Edit");
-    jMenuItem1.setText("New");
-    jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(78, java.awt.event.KeyEvent.CTRL_MASK, false));
-    jMenuItem1.addActionListener(new java.awt.event.ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        newPopupItem_actionPerformed(e);
-      }
-    });
-    jMenuItem2.setText("Duplicate");
-    jMenuItem3.setText("Delete");
-    this.add(jScrollPane1, BorderLayout.CENTER);
-    jScrollPane1.getViewport().add(contentTable, null);
-    popupMenu.add(newPopupItem);
-    popupMenu.add(dupPopupItem);
-    popupMenu.add(delPopupItem);
-    menuBar.add(jMenu1);
-    menuBar.add(jMenu2);
-    jMenu1.add(jMenuItem4);
-    jMenu1.add(jMenuItem5);
-    jMenu1.add(jMenuItem6);
-    jMenu1.add(jMenuItem7);
-    jMenu1.addSeparator();
-    jMenu1.add(jMenuItem8);
-    jMenu1.addSeparator();
-    jMenu1.add(closeMenuItem);
-    jMenu2.add(jMenuItem1);
-    jMenu2.add(jMenuItem2);
-    jMenu2.add(jMenuItem3);
-  }
-
-  Point popupPoint = new Point();
-  JMenu jMenu2 = new JMenu();
-  JMenuItem jMenuItem1 = new JMenuItem();
-  JMenuItem jMenuItem2 = new JMenuItem();
-  JMenuItem jMenuItem3 = new JMenuItem();
-  void contentTable_mouseClicked(MouseEvent e)
-  {
-    if(e.isPopupTrigger()) {
-      popupPoint.setLocation(e.getX(),e.getY());
-      popupMenu.show(contentTable,e.getX(),e.getY());
-    }
-  }
-
-  void contentTable_mouseReleased(MouseEvent e)
-  {
-    contentTable_mouseClicked(e);
-  }
-
-  void jMenuItem4_actionPerformed(ActionEvent e)
-  {
-    JFileChooser fc = new JFileChooser();
-    if(fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
-      try {
-        openFile(fc.getSelectedFile());
-      } catch(IOException ioe) {
-        ExceptionDialog.displayException(ioe);
-      }
-    }
-  }
-
-  void closeMenuItem_actionPerformed(ActionEvent e)
-  {
-    if(standaloneMode) {
-      System.exit(0);
-    } else {
-      filename="";
-      file=null;
-      model.setProperties(new Properties());
-    }
-  }
-
-  void newPopupItem_actionPerformed(ActionEvent e)
-  {
-    int y = contentTable.rowAtPoint(popupPoint);
-
-    // create a new unique key based on the current one
-    String key=(String) model.getValueAt(y,0);
-
-    if(key==null) {
-      key="new-key";
-    }
-
-    int uid=1;
-    while(model.containsKey(key+uid)) {
-      uid++;
-    }
-
-    key=key+uid;
-    model.put(key,"");
-    contentTable.clearSelection();
-  }
-
-  void dupPopupItem_actionPerformed(ActionEvent e)
-  {
-    int y = contentTable.rowAtPoint(popupPoint);
-
-    // create a new unique key based on the current one
-    String key=(String) model.getValueAt(y,0);
-    Object val=model.get(key);
-
-    int uid=1;
-    while(model.containsKey(key+uid)) {
-      uid++;
-    }
-
-    key=key+uid;
-    model.put(key,val);
-    contentTable.clearSelection();
-  }
-
-  void delPopupItem_actionPerformed(ActionEvent e)
-  {
-    int y = contentTable.rowAtPoint(popupPoint);
-    model.remove(model.getValueAt(y,0));
-  }
-
-  void jMenuItem6_actionPerformed(ActionEvent e)
-  {
-    JFileChooser fc = new JFileChooser();
-    if(fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
-      try {
-        saveFile(fc.getSelectedFile());
-      } catch(IOException ioe) {
-        ExceptionDialog.displayException(ioe);
-      }
-    }
-  }
-
-  void jMenuItem5_actionPerformed(ActionEvent e)
-  {
-    if(filename==null) {
-      jMenuItem6_actionPerformed(e);
-    } else {
-      try {
-        saveFile(file);
-      } catch(IOException ioe) {
-        ExceptionDialog.displayException(ioe);
-      }
-    }
-  }
-
-  void jMenuItem7_actionPerformed(ActionEvent e)
-  {
-    // add check here
-    if(file!=null) {
-      try {
-        openFile(file);
-      } catch(IOException ioe) {
-        ExceptionDialog.displayException(ioe);
-      }
-    } else {
-      jMenuItem4_actionPerformed(e);
-    }
-  }
-}
\ No newline at end of file
diff --git a/contrib/retep/uk/org/retep/xml/core/XMLFactory.java b/contrib/retep/uk/org/retep/xml/core/XMLFactory.java
deleted file mode 100644 (file)
index 09565b0..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-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
deleted file mode 100644 (file)
index 5f9d497..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-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
deleted file mode 100644 (file)
index 50aaaa1..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-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
deleted file mode 100644 (file)
index ee020df..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-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
    diff --git a/contrib/retep/uk/org/retep/xml/parser/TagHandler.java b/contrib/retep/uk/org/retep/xml/parser/TagHandler.java
    deleted file mode 100644 (file)
    index 78deb0e..0000000
    +++ /dev/null
    @@ -1,201 +0,0 @@
    -package uk.org.retep.xml.parser;
    -
    -import java.io.CharArrayWriter;
    -import java.io.IOException;
    -import java.util.List;
    -import java.util.Iterator;
    -import java.util.HashSet;
    -import java.util.ArrayList;
    -import java.util.HashMap;
    -import org.xml.sax.AttributeList;
    -import org.xml.sax.HandlerBase;
    -import org.xml.sax.InputSource;
    -import org.xml.sax.Parser;
    -import org.xml.sax.SAXException;
    -import javax.xml.parsers.ParserConfigurationException;
    -import javax.xml.parsers.SAXParser;
    -import javax.xml.parsers.SAXParserFactory;
    -
    -/**
    - * This class implements the base of the XML handler. You create an instance,
    - * register classes (who implement TagListener) that are interested in the tags
    - * and pass it to SAX.
    - *
    - * 

    Or you create an instance, register the TagListeners and use the getParser()

    - * method to create a Parser. Then start parsing by calling it's parse() method.
    - */
    -
    -public class TagHandler extends HandlerBase {
    -
    -  /**
    -   * The current active level
    -   */
    -  private int level;
    -
    -  /**
    -   * cache used to handle nesting of tags
    -   */
    -  private List contents;
    -
    -  /**
    -   * cache used to handle nesting of tags
    -   */
    -  private List tags;
    -
    -  /**
    -   * cache used to handle nesting of tags
    -   */
    -  private List args;
    -
    -  // Current active content writer
    -  private CharArrayWriter content;
    -
    -  // List of TagListener's who want to be fed data
    -  private HashSet tagListeners;
    -
    -  /**
    -   * default constructor
    -   */
    -  public TagHandler() {
    -    level=0;
    -    contents = new ArrayList();
    -    tags = new ArrayList();
    -    args = new ArrayList();
    -    tagListeners = new HashSet();
    -  }
    -
    -  /**
    -   * Called by SAX when a tag is begun. This simply creates a new level in the
    -   * cache and stores the parameters and tag name in there.
    -   */
    -  public void startElement(String p0, AttributeList p1) throws SAXException {
    -
    -    // Now move up and fetch a CharArrayWriter from the cache
    -    // creating if this is the first time at this level
    -    if(contents.size()<=level) {
    -      contents.add(new CharArrayWriter());
    -      tags.add(p0);
    -      args.add(new HashMap());
    -    }
    -
    -    content=(CharArrayWriter) contents.get(level);
    -    content.reset();
    -
    -    // Also cache the tag's text and argument list
    -    tags.set(level,p0);
    -
    -    HashMap h = (HashMap) args.get(level);
    -    h.clear();
    -    for(int i=p1.getLength()-1;i>-1;i--) {
    -      h.put(p1.getName(i),p1.getValue(i));
    -    }
    -
    -    // Now notify any TagListeners
    -    Iterator it = tagListeners.iterator();
    -    while(it.hasNext())
    -      ( (TagListener) it.next() ).tagStart(level,p0,h);
    -
    -    // Now move up a level
    -    level++;
    -  }
    -
    -  /**
    -   * This is called by SAX at the end of a tag. This calls handleTag() and then
    -   * raises the level, so that the previous parent tag may continue.
    -   */
    -  public void endElement(String p0) throws SAXException {
    -    // move up a level retrieving that level's current content
    -    // Now this exception should never occur as the underlying parser should
    -    // actually trap it.
    -    if(level<1)
    -      throw new SAXException("Already at top level?");
    -    level--;
    -
    -    // Now notify any TagListeners
    -    Iterator it = tagListeners.iterator();
    -    while(it.hasNext())
    -      ( (TagListener) it.next() ).tagContent(content);
    -
    -    // allows large content to be released early
    -    content.reset();
    -
    -    // Now reset content to the previous level
    -    content=(CharArrayWriter) contents.get(level);
    -  }
    -
    -  /**
    -   * Called by SAX so that content between the start and end tags are captured.
    -   */
    -  public void characters(char[] p0, int p1, int p2) throws SAXException {
    -    content.write(p0,p1,p2);
    -  }
    -
    -  /**
    -   * Adds a TagListener so that it is notified of tags as they are processed.
    -   * @param handler TagListener to add
    -   */
    -  public void addTagListener(TagListener h) {
    -    tagListeners.add(h);
    -  }
    -
    -  /**
    -   * Removes the TagListener so it no longer receives notifications of tags
    -   */
    -  public void removeTagListener(TagListener h) {
    -    tagListeners.remove(h);
    -  }
    -
    -  /**
    -   * This method returns a org.xml.sax.Parser object that will parse the
    -   * contents of a URI.
    -   *
    -   * 

    Normally you would call this method, then call the parse(uri) method of

    -   * the returned object.
    -   * @return org.xml.sax.Parser object
    -   */
    -  public Parser getParser()
    -  throws SAXException
    -  {
    -    try {
    -      SAXParserFactory spf = SAXParserFactory.newInstance();
    -
    -      String validation = System.getProperty ("javax.xml.parsers.validation", "false");
    -      if (validation.equalsIgnoreCase("true"))
    -        spf.setValidating (true);
    -
    -      SAXParser sp = spf.newSAXParser();
    -      Parser parser = sp.getParser ();
    -
    -      parser.setDocumentHandler(this);
    -
    -      return(parser);
    -    } catch(ParserConfigurationException pce) {
    -      throw new SAXException(pce.toString());
    -    }
    -  }
    -
    -  /**
    -   * This method will parse the specified URI.
    -   *
    -   * 

    Internally this is the same as getParser().parse(uri);

    -   * @param uri The URI to parse
    -   */
    -  public void parse(String uri)
    -  throws IOException, SAXException
    -  {
    -    getParser().parse(uri);
    -  }
    -
    -  /**
    -   * This method will parse the specified InputSource.
    -   *
    -   * 

    Internally this is the same as getParser().parse(is);

    -   * @param is The InputSource to parse
    -   */
    -  public void parse(InputSource is)
    -  throws IOException, SAXException
    -  {
    -    getParser().parse(is);
    -  }
    -
    -}
    \ No newline at end of file
    diff --git a/contrib/retep/uk/org/retep/xml/parser/TagListener.java b/contrib/retep/uk/org/retep/xml/parser/TagListener.java
    deleted file mode 100644 (file)
    index 24146b3..0000000
    +++ /dev/null
    @@ -1,30 +0,0 @@
    -package uk.org.retep.xml.parser;
    -
    -import java.util.HashMap;
    -import java.io.CharArrayWriter;
    -
    -/**
    - * This interface defines the methods a class needs to implement if it wants the
    - * xml parser to notify it of any xml tags.
    - */
    -
    -public interface TagListener {
    -  /**
    -   * This is called when a tag has just been started.
    -   * 

    NB: args is volatile, so if you use it beyond the lifetime of

    -   * this call, then you must make a copy of the HashMap (and not use simply
    -   * store this HashMap).
    -   * @param level The number of tags above this
    -   * @param tag The tag name
    -   * @param args A HashMap of any arguments
    -   */
    -  public void tagStart(int level,String tag,HashMap args);
    -  /**
    -   * This method is called by ContHandler to process a tag once it has been
    -   * fully processed.
    -   * 

    NB: content is volatile, so you must copy its contents if you use

    -   * it beyond the lifetime of this call.
    -   * @param content CharArrayWriter containing the content of the tag.
    -   */
    -  public void tagContent(CharArrayWriter content);
    -}
    \ No newline at end of file
    diff --git a/contrib/retep/uk/org/retep/xml/test/XMLExport.java b/contrib/retep/uk/org/retep/xml/test/XMLExport.java
    deleted file mode 100644 (file)
    index 116f250..0000000
    +++ /dev/null
    @@ -1,191 +0,0 @@
    -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