Migrate workspace from TeamWare to Mercurial.
diff --git a/build/Defs-solaris.gmk.old b/build/Defs-solaris.gmk.old
new file mode 100644
index 0000000..52ef89a
--- /dev/null
+++ b/build/Defs-solaris.gmk.old
@@ -0,0 +1,129 @@
+#
+# @(#)Defs-solaris.gmk	1.24 96/07/09
+#
+# Makefile to specify compiler flags for programs and libraries
+# targeted to Solaris.  Should not contain any rules.
+#
+
+ARCH = $(shell uname -p)
+
+# This default is redefined during a release build.
+RELEASE = $(shell echo `/usr/ucb/whoami`:`date '+%m/%d/%d-%H:%M'`)
+
+# If -Xa is in CFLAGS_COMMON it will end up ahead of $(POPT) for the
+# optimized build, and that ordering of the flags completely freaks
+# out cc.  Hence, -Xa is instead in each CFLAGS variant.
+ifneq ($(CC_VERSION), gcc)
+CFLAGS_COMMON   = -v
+CFLAGS_OPT      = -Xa $(POPT)
+CFLAGS_DBG      = -Xa -g
+else
+CFLAGS_COMMON   = 
+CFLAGS_OPT      = $(POPT)
+CFLAGS_DBG      = -g
+endif
+
+#
+# Optional global flags with defaults: turn on from command line like
+#
+#   % gnumake THREADS_FLAG=native
+#
+
+# By default use green threads
+THREADS_FLAG = green
+
+ifeq ($(THREADS_FLAG), native)
+    CFLAGS_COMMON += -D_REENTRANT -DNATIVE
+endif
+
+# By default, gprof support is off
+GPROF = false
+ 
+ifeq ($(GPROF), true)
+    CFLAGS_COMMON += -DGPROF -xpg
+endif
+
+# turn JCOV on
+JCOV = true
+
+ifeq ($(JCOV), true)
+ifeq ($(VARIANT), DBG)
+    CFLAGS_COMMON += -DJCOV
+endif
+endif
+
+# Java memory management is based on memory mapping by default, but a
+# system only assuming malloc/free can be built by adding -DUSE_MALLOC 
+
+ifneq ($(CC_VERSION), gcc)
+CPPFLAGS_COMMON = -D$(ARCH) -DSOLARIS2 -DRELEASE='"$(RELEASE)"'
+else
+CPPFLAGS_COMMON = -D$(ARCH) -DHAVE_ALIGNED_LONGLONGS -DHAVE_ALIGNED_DOUBLES -DSOLARIS2 -DRELEASE='"$(RELEASE)"'
+endif
+CPPFLAGS_OPT    = -DTRIMMED
+CPPFLAGS_DBG    = -DDEBUG -DTRACING -DBREAKPTS
+
+ASFLAGS_COMMON  = -P
+ASFLAGS_OPT     =
+ASFLAGS_DBG     =
+
+LDFLAGS_COMMON  = -L$(OPENWINHOME)/lib
+LDFLAGS_OPT     =
+LDFLAGS_DBG     =
+
+LDLIBS_COMMON   =
+LDLIBS_OPT      =
+LDLIBS_DBG      =
+
+ifeq ($(THREADS_FLAG),native)
+    LDLIBS_COMMON += -lthread
+endif
+
+ifeq ($(GPROF), true)
+    LDLIBS_COMMON += -xpg
+endif
+
+#
+# Java variations
+#
+ifeq ($(PRODUCT), java)
+    # Java default optimization -x04
+ifneq ($(CC_VERSION), gcc)
+    _OPT = -xO4
+else
+    _OPT = -O3
+endif
+    CPPFLAGS_DBG    += -DLOGGING -DDBINFO
+    ASFLAGS_COMMON  += -D_ASM
+    LDLIBS_COMMON   += -lm -ldl
+endif
+
+#
+# Hotjava variations
+#
+ifneq ($(PRODUCT), java)
+    # Hotjava default optimization -x02
+ifneq ($(CC_VERSION), gcc)
+    _OPT = -xO2
+else
+    _OPT = -O2
+endif
+endif
+
+#
+# Tools
+#
+ifneq ($(CC_VERSION), gcc)
+CC      = cc
+CPP     = cc -E
+else
+CC      = gcc
+CPP     = gcc -E
+endif
+AS	= as
+LD	= /usr/ccs/bin/ld
+
+OPENWINHOME = /usr/openwin
+
+LIBRARY_SUFFIX = so
+
diff --git a/build/classes.mk b/build/classes.mk
new file mode 100644
index 0000000..ff75b86
--- /dev/null
+++ b/build/classes.mk
@@ -0,0 +1,128 @@
+#
+# VERSION: @(#)classes.mk	1.12 97/12/02
+# this file defines the following Makefile variables:
+# SRCS == a space separated list of full pathes to the source files
+# CLASSES == a space separated list of the full pathes to the class files
+#
+
+JAVAX_SRCS = \
+$(SRC_DIR)/javax/activation/MailcapCommandMap.java \
+$(SRC_DIR)/javax/activation/CommandMap.java \
+$(SRC_DIR)/javax/activation/CommandObject.java \
+$(SRC_DIR)/javax/activation/CommandInfo.java \
+$(SRC_DIR)/javax/activation/MimeType.java \
+$(SRC_DIR)/javax/activation/MimeTypeParameterList.java \
+$(SRC_DIR)/javax/activation/MimeTypeParseException.java \
+$(SRC_DIR)/javax/activation/ActivationDataFlavor.java \
+$(SRC_DIR)/javax/activation/DataContentHandler.java \
+$(SRC_DIR)/javax/activation/DataContentHandlerFactory.java \
+$(SRC_DIR)/javax/activation/UnsupportedDataTypeException.java \
+$(SRC_DIR)/javax/activation/DataHandler.java \
+$(SRC_DIR)/javax/activation/DataSource.java \
+$(SRC_DIR)/javax/activation/URLDataSource.java \
+$(SRC_DIR)/javax/activation/FileTypeMap.java \
+$(SRC_DIR)/javax/activation/MimetypesFileTypeMap.java \
+$(SRC_DIR)/javax/activation/FileDataSource.java 
+
+COM_SUN_SRCS = \
+$(SRC_DIR)/com/sun/activation/registries/MailcapEntry.java \
+$(SRC_DIR)/com/sun/activation/registries/MailcapFile.java  \
+$(SRC_DIR)/com/sun/activation/registries/MimeTypeEntry.java \
+$(SRC_DIR)/com/sun/activation/registries/MimeTypeFile.java \
+$(SRC_DIR)/com/sun/activation/viewers/ImageViewer.java \
+$(SRC_DIR)/com/sun/activation/viewers/ImageViewerCanvas.java \
+$(SRC_DIR)/com/sun/activation/viewers/TextEditor.java \
+$(SRC_DIR)/com/sun/activation/viewers/TextViewer.java \
+$(SRC_DIR)/com/sun/activation/registries/MailcapTokenizer.java \
+$(SRC_DIR)/com/sun/activation/registries/MailcapParseException.java
+
+TEST_SRCS = \
+$(SRC_DIR)/test/AppletTest.java \
+$(SRC_DIR)/test/CLTest.java \
+$(SRC_DIR)/test/CommandMapTest.java \
+$(SRC_DIR)/test/DHTransferableTest.java \
+$(SRC_DIR)/test/DSWriteTest.java \
+$(SRC_DIR)/test/DataHandlerTest.java \
+$(SRC_DIR)/test/DataSourceTest.java \
+$(SRC_DIR)/test/SerMaker.java \
+$(SRC_DIR)/test/SerMaker11.java \
+$(SRC_DIR)/test/SerReader.java \
+$(SRC_DIR)/test/SerReader11.java 
+
+DEMO_SRCS = \
+$(SRC_DIR)/demo/PrefTest.java \
+$(SRC_DIR)/demo/MikeTest.java \
+$(SRC_DIR)/demo/FileView.java \
+$(SRC_DIR)/demo/MCTest.java \
+$(SRC_DIR)/demo/CompViewer.java \
+$(SRC_DIR)/demo/JAFApp.java \
+$(SRC_DIR)/demo/SimpleDCH.java \
+$(SRC_DIR)/demo/MTest.java \
+$(SRC_DIR)/demo/PlainDCH.java \
+$(SRC_DIR)/demo/DHURL.java \
+$(SRC_DIR)/demo/TextInternalizer.java \
+$(SRC_DIR)/demo/DCHTest2.java \
+$(SRC_DIR)/demo/ODCHTest.java \
+$(SRC_DIR)/demo/DCHTest.java
+
+JAVAX_CLASSES_LIST = \
+$(CLASS_DIR)/javax/activation/DataSource.class \
+$(CLASS_DIR)/javax/activation/URLDataSource.class \
+$(CLASS_DIR)/javax/activation/MailcapCommandMap.class \
+$(CLASS_DIR)/javax/activation/CommandMap.class \
+$(CLASS_DIR)/javax/activation/CommandObject.class \
+$(CLASS_DIR)/javax/activation/CommandInfo.class \
+$(CLASS_DIR)/javax/activation/MimeType.class \
+$(CLASS_DIR)/javax/activation/MimeTypeParameterList.class \
+$(CLASS_DIR)/javax/activation/MimeTypeParseException.class \
+$(CLASS_DIR)/javax/activation/ActivationDataFlavor.class \
+$(CLASS_DIR)/javax/activation/DataContentHandler.class \
+$(CLASS_DIR)/javax/activation/DataContentHandlerFactory.class \
+$(CLASS_DIR)/javax/activation/UnsupportedDataTypeException.class \
+$(CLASS_DIR)/javax/activation/DataHandler.class \
+$(CLASS_DIR)/javax/activation/FileTypeMap.class \
+$(CLASS_DIR)/javax/activation/MimetypesFileTypeMap.class \
+$(CLASS_DIR)/javax/activation/FileDataSource.class 
+
+COM_SUN_CLASSES_LIST = \
+$(CLASS_DIR)/com/sun/activation/registries/MailcapEntry.class \
+$(CLASS_DIR)/com/sun/activation/registries/MailcapFile.class  \
+$(CLASS_DIR)/com/sun/activation/registries/MimeTypeEntry.class \
+$(CLASS_DIR)/com/sun/activation/registries/MimeTypeFile.class \
+$(CLASS_DIR)/com/sun/activation/viewers/ImageViewer.class \
+$(CLASS_DIR)/com/sun/activation/viewers/ImageViewerCanvas.class \
+$(CLASS_DIR)/com/sun/activation/viewers/TextEditor.class \
+$(CLASS_DIR)/com/sun/activation/viewers/TextViewer.class \
+$(CLASS_DIR)/com/sun/activation/registries/MailcapTokenizer.class \
+$(CLASS_DIR)/com/sun/activation/registries/MailcapParseException.class
+
+# Tests that only work on JDK 1.2...
+# $(CLASS_DIR)/test/CLTest.class \
+
+TEST_CLASSES_LIST = \
+$(CLASS_DIR)/test/AppletTest.class \
+$(CLASS_DIR)/test/CommandMapTest.class \
+$(CLASS_DIR)/test/DHTransferableTest.class \
+$(CLASS_DIR)/test/DSWriteTest.class \
+$(CLASS_DIR)/test/DataHandlerTest.class \
+$(CLASS_DIR)/test/DataSourceTest.class \
+$(CLASS_DIR)/test/SerMaker.class \
+$(CLASS_DIR)/test/SerMaker11.class \
+$(CLASS_DIR)/test/SerReader.class \
+$(CLASS_DIR)/test/SerReader11.class 
+
+DEMO_CLASSES_LIST = \
+$(CLASS_DIR)/demo/MikeTest.class \
+$(CLASS_DIR)/demo/PrefTest.class \
+$(CLASS_DIR)/demo/FileView.class \
+$(CLASS_DIR)/demo/MCTest.class \
+$(CLASS_DIR)/demo/CompViewer.class \
+$(CLASS_DIR)/demo/JAFApp.class \
+$(CLASS_DIR)/demo/SimpleDCF.class \
+$(CLASS_DIR)/demo/TextInternalizer.class \
+$(CLASS_DIR)/demo/MTest.class \
+$(CLASS_DIR)/demo/DHURL.class \
+$(CLASS_DIR)/demo/PlainDCH.class \
+$(CLASS_DIR)/demo/DCHTest2.class \
+$(CLASS_DIR)/demo/ODCHTest.class \
+$(CLASS_DIR)/demo/DCHTest.class
diff --git a/build/precompile.jtx b/build/precompile.jtx
new file mode 100644
index 0000000..bbbe054
--- /dev/null
+++ b/build/precompile.jtx
@@ -0,0 +1,4 @@
+# SCCS 1.0 02/20/98
+javax/activation/MimeType/testlist.html#readExternalTest			xxxxxxx		solaris-sparc
+javax/activation/URLDataSource/testlist.html#getInputStreamTest1		xxxxxxx		solaris-sparc
+javax/activation/URLDataSource/testlist.html#getOutputStreamTest1		xxxxxxx		solaris-sparc
diff --git a/build/share/minclude/com_sun_activation_registries.jmk b/build/share/minclude/com_sun_activation_registries.jmk
new file mode 100644
index 0000000..278949c
--- /dev/null
+++ b/build/share/minclude/com_sun_activation_registries.jmk
@@ -0,0 +1,10 @@
+#
+# @(#)com_sun_activation_registries.jmk	1.3 03/08/20
+#
+FILES_java = \
+	$(TARGDIR)com/sun/activation/registries/LogSupport.java \
+	$(TARGDIR)com/sun/activation/registries/MailcapFile.java \
+	$(TARGDIR)com/sun/activation/registries/MailcapParseException.java \
+	$(TARGDIR)com/sun/activation/registries/MailcapTokenizer.java \
+	$(TARGDIR)com/sun/activation/registries/MimeTypeEntry.java \
+	$(TARGDIR)com/sun/activation/registries/MimeTypeFile.java
diff --git a/build/share/minclude/com_sun_activation_viewers.jmk b/build/share/minclude/com_sun_activation_viewers.jmk
new file mode 100644
index 0000000..6013b1a
--- /dev/null
+++ b/build/share/minclude/com_sun_activation_viewers.jmk
@@ -0,0 +1,8 @@
+#
+# @(#)com_sun_activation_viewers.jmk	1.1 99/03/06
+#
+FILES_java = \
+	$(TARGDIR)com/sun/activation/viewers/ImageViewer.java \
+	$(TARGDIR)com/sun/activation/viewers/ImageViewerCanvas.java \
+	$(TARGDIR)com/sun/activation/viewers/TextEditor.java \
+	$(TARGDIR)com/sun/activation/viewers/TextViewer.java
diff --git a/build/share/minclude/demo.jmk b/build/share/minclude/demo.jmk
new file mode 100644
index 0000000..a67ea46
--- /dev/null
+++ b/build/share/minclude/demo.jmk
@@ -0,0 +1,17 @@
+#
+# @(#)demo.jmk	1.3 05/04/07
+#
+FILES_java = \
+	$(TARGDIR)demo/CompViewer.java \
+	$(TARGDIR)demo/DCHTest.java \
+	$(TARGDIR)demo/DCHTest2.java \
+	$(TARGDIR)demo/DHURL.java \
+	$(TARGDIR)demo/FileView.java \
+	$(TARGDIR)demo/JAFApp.java \
+	$(TARGDIR)demo/MCDump.java \
+	$(TARGDIR)demo/MCTest.java \
+	$(TARGDIR)demo/ODCHTest.java \
+	$(TARGDIR)demo/PlainDCH.java \
+	$(TARGDIR)demo/PrefTest.java \
+	$(TARGDIR)demo/SimpleDCF.java \
+	$(TARGDIR)demo/TextInternalizer.java
diff --git a/build/share/minclude/javax_activation.jmk b/build/share/minclude/javax_activation.jmk
new file mode 100644
index 0000000..6c9f602
--- /dev/null
+++ b/build/share/minclude/javax_activation.jmk
@@ -0,0 +1,22 @@
+#
+# @(#)javax_activation.jmk	1.2 02/03/10
+#
+FILES_java = \
+	$(TARGDIR)javax/activation/ActivationDataFlavor.java \
+	$(TARGDIR)javax/activation/CommandInfo.java \
+	$(TARGDIR)javax/activation/CommandMap.java \
+	$(TARGDIR)javax/activation/CommandObject.java \
+	$(TARGDIR)javax/activation/DataContentHandler.java \
+	$(TARGDIR)javax/activation/DataContentHandlerFactory.java \
+	$(TARGDIR)javax/activation/DataHandler.java \
+	$(TARGDIR)javax/activation/DataSource.java \
+	$(TARGDIR)javax/activation/FileDataSource.java \
+	$(TARGDIR)javax/activation/FileTypeMap.java \
+	$(TARGDIR)javax/activation/MailcapCommandMap.java \
+	$(TARGDIR)javax/activation/MimeType.java \
+	$(TARGDIR)javax/activation/MimeTypeParameterList.java \
+	$(TARGDIR)javax/activation/MimeTypeParseException.java \
+	$(TARGDIR)javax/activation/MimetypesFileTypeMap.java \
+	$(TARGDIR)javax/activation/SecuritySupport.java \
+	$(TARGDIR)javax/activation/URLDataSource.java \
+	$(TARGDIR)javax/activation/UnsupportedDataTypeException.java
diff --git a/build/share/minclude/resources.res b/build/share/minclude/resources.res
new file mode 100644
index 0000000..da0f0bf
--- /dev/null
+++ b/build/share/minclude/resources.res
@@ -0,0 +1,9 @@
+#
+# @(#)resources.res	1.1 99/03/06
+#
+# Defines which files are copied to the META-INF directory
+
+RESOURCES = \
+	$(TOPDIR)/src/share/lib/mailcap.default \
+	$(TOPDIR)/src/share/lib/mimetypes.default
+
diff --git a/build/solaris/GNUmakefile b/build/solaris/GNUmakefile
new file mode 100644
index 0000000..58b4cac
--- /dev/null
+++ b/build/solaris/GNUmakefile
@@ -0,0 +1,157 @@
+#
+# @(#)GNUmakefile	1.24 12/05/02
+#
+# Makefile for building all of JAF
+#
+# Targets and their description:
+#
+#	all
+#		builds everything, javax, com, demo
+#
+#	jar
+#		creates the activation.jar file
+#
+#	jar_all
+#		first makes "all", then makes "jar" of *all* class files
+#
+#	install
+#		creates a jar file that contains only
+#		the packages we ship.
+#
+#	project
+#		creates all the JavaWorkShop project files
+#
+#	release
+#		removes everything (realclean) then
+#		creates the release zip file that includes everything
+#		that is shipped in the jaf.zip file
+#	
+#	docs
+#		builds javadocs
+#
+#	clean
+#		removes all the class files and binaries
+#	
+#	realclean
+#		clean + removes activation.jar & jaf.zip
+
+BUILDDIR = .
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+ZIP = zip
+
+LIBSRC = $(TOPDIR)/src/share/lib
+
+JAF_RELEASE = 1.1.1
+JAF_RELEASEB = $(shell echo $(JAF_RELEASE) | tr '.' '_')
+#JAF_RELEASEDIR  = $(BUILDDIR)/jaf-$(JAF_RELEASE)
+JAF_RELEASEDIR  = jaf-$(JAF_RELEASE)
+JAF_RELEASEFILE = $(RELEASEDIR)/jaf$(JAF_RELEASEB).zip
+
+# specs
+SPEC_DIR = $(TOPDIR)/src/share/doc/spec
+RELEASE_SPECS = $(SPEC_DIR)/JAF-1.1.ps $(SPEC_DIR)/JAF-1.1.pdf \
+	$(SPEC_DIR)/JAF-1.1-changes.txt
+
+SUBDIRS = javax com demo META-INF
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk
+
+jar ::
+	@echo Jarring ...
+	@sed -e 's"%RELEASE%"$(JAF_RELEASE)"' < $(LIBSRC)/jaf.mf \
+							> classes/jaf.mf
+	@cd classes; $(JAR) cfm ../activation.jar jaf.mf META-INF javax com
+
+jar_all :: all jar
+
+install :: jar sigtest
+
+# generate a new signature file
+siggen ::
+	sh siggen -in activation.jar -package javax -out activation.sig
+
+# test that API hasn't changed
+sigtest ::
+	sh sigtest -base activation.sig -test activation.jar -package javax \
+		-out report.out -check bincomp
+
+# Javadoc defines
+DOCDIR = $(TOPDIR)/src/share/doc/api/javadocs
+DOCPACKAGES =	javax.activation
+DOCFILES = \
+	src/share/classes/javax/activation
+DOCFILESEX = \
+	src/share/classes/javax/activation/SecuritySupport.java
+
+JAVADOC_OPTS=	-J-Xmx32m
+TITLE="JavaBeans Activation Framework API documentation"
+
+# XXX - Would like to use standard "docs" rule but we need to do
+#	some special things here.  In order to generate javadocs
+#	for only the limited set of classes listed in DOCFILES,
+#	we have to copy all those files to a temporary directory
+#	and run javadoc against that directory.
+
+JAVADOC_OPTS += -use -splitIndex -windowtitle $(TITLE) -doctitle $(TITLE)
+
+docs:
+	rm -rf $(DOCDIR)
+	mkdir -p $(DOCDIR)
+	mkdir $(DOCDIR)/tmp
+	(cd $(TOPDIR); tar cFFf - $(DOCFILES)) | (cd $(DOCDIR)/tmp; tar xf -)
+	(cd $(DOCDIR)/tmp; rm -f $(DOCFILESEX))
+	$(JAVADOC) $(JAVADOC_OPTS) -d $(DOCDIR) \
+		-sourcepath $(DOCDIR)/tmp/src/share/classes \
+		-classpath $(CLASSBINDIR):$(DEPENDS) $(DOCPACKAGES)
+	rm -rf $(DOCDIR)/tmp
+
+realclean :: clean
+	@rm -f activation.jar $(JAF_RELEASEFILE)
+
+# The "release" target is ugly-ish. Should clean up later.
+release :: realclean all install docs releasezip
+
+releasezip:
+	@echo Making release ...
+	@rm -rf $(JAF_RELEASEFILE) $(JAF_RELEASEDIR)
+	@[ -d $(RELEASEDIR) ] || mkdir $(RELEASEDIR)
+	@mkdir $(JAF_RELEASEDIR)
+	@mkdir $(JAF_RELEASEDIR)/docs
+	@mkdir $(JAF_RELEASEDIR)/docs/javadocs
+	@mkdir -p $(JAF_RELEASEDIR)/demo
+	@cp activation.jar $(JAF_RELEASEDIR)
+	@#cp $(TOPDIR)/src/share/doc/release/CHANGES.txt $(RELEASEDIR)
+	@rm -f $(RELEASEDIR)/README.txt
+	@cp $(TOPDIR)/src/share/doc/release/README.txt $(RELEASEDIR)
+	@rm -f $(RELEASEDIR)/LICENSE.txt
+	@cp $(TOPDIR)/src/share/doc/release/LICENSE.txt $(RELEASEDIR)
+	@rm -f $(RELEASEDIR)/distributionREADME.txt
+	@cp $(TOPDIR)/src/share/doc/release/distributionREADME.txt $(RELEASEDIR)
+	@rm -f $(RELEASEDIR)/RELNOTES.txt
+	@cp -r $(TOPDIR)/src/share/doc/api/javadocs $(RELEASEDIR)
+	@#cp $(TOPDIR)/src/share/doc/release/CHANGES.txt $(JAF_RELEASEDIR)
+	@cp $(TOPDIR)/src/share/doc/release/README.txt $(JAF_RELEASEDIR)
+	@cp $(TOPDIR)/src/share/doc/release/LICENSE.txt $(JAF_RELEASEDIR)
+	@cp $(TOPDIR)/src/share/doc/release/distributionREADME.txt $(JAF_RELEASEDIR)
+	@cp $(TOPDIR)/src/share/doc/release/RELNOTES.txt $(JAF_RELEASEDIR)
+	@cp $(TOPDIR)/src/share/classes/demo/*.java $(JAF_RELEASEDIR)/demo
+	@#cp $(TOPDIR)/src/share/classes/demo/README.txt $(JAF_RELEASEDIR)/demo
+	@cp -r $(TOPDIR)/src/share/doc/api/javadocs $(JAF_RELEASEDIR)/docs/
+	@for i in $(RELEASE_SPECS); do \
+		if [ -f $$i ]; then \
+			file=`basename $$i`; \
+			rm -f $(RELEASEDIR)/$$file; \
+			cp $$i $(RELEASEDIR); \
+			cp $$i $(JAF_RELEASEDIR)/docs; \
+		fi \
+	done
+	@$(ZIP) -r $(JAF_RELEASEFILE) $(JAF_RELEASEDIR)
+	@rm -rf $(JAF_RELEASEDIR)
+	@echo Done Making release
diff --git a/build/solaris/META-INF/GNUmakefile b/build/solaris/META-INF/GNUmakefile
new file mode 100644
index 0000000..6281b8c
--- /dev/null
+++ b/build/solaris/META-INF/GNUmakefile
@@ -0,0 +1,27 @@
+#
+# @(#)GNUmakefile	1.2 98/01/30
+#
+# Makefile for building (copying) the files in META-INF
+#
+
+BUILDDIR = ..
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+SUBDIRS = sun
+
+include $(MINCLUDES)/resources.res
+META_INF_DIR = $(TOPDIR)/build/$(PLATFORM)/classes/META-INF
+
+all ::
+	@if [ ! -d $(META_INF_DIR) ] ; then mkdir $(META_INF_DIR); fi
+	@echo Copying $(RESOURCES) to $(META_INF_DIR)
+	@cp -f $(RESOURCES) $(META_INF_DIR)
+
+clean ::
+	@rm -rf $(META_INF_DIR)
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk
diff --git a/build/solaris/Platform.gmk b/build/solaris/Platform.gmk
new file mode 100644
index 0000000..fe9ebf0
--- /dev/null
+++ b/build/solaris/Platform.gmk
@@ -0,0 +1,8 @@
+#
+# @(#)Platform.gmk	1.1 97/09/07
+#
+# Generic definition of PLATFORM, and related, factored-out variables
+#
+
+PLATFORM = solaris
+TOPDIR = ../../$(BUILDDIR)
diff --git a/build/solaris/activation.sig b/build/solaris/activation.sig
new file mode 100644
index 0000000..f498fac
--- /dev/null
+++ b/build/solaris/activation.sig
@@ -0,0 +1,182 @@
+//Java signature file
+//date: Thu Apr 07 22:16:00 PDT 2005
+//classpath: activation.jar
+//package: javax
+
+
+package javax.activation;
+
+public class ActivationDataFlavor extends java.awt.datatransfer.DataFlavor {
+	public ActivationDataFlavor(Class, String);
+	public ActivationDataFlavor(Class, String, String);
+	public ActivationDataFlavor(String, String);
+	public boolean equals(java.awt.datatransfer.DataFlavor);
+	public String getHumanPresentableName();
+	public String getMimeType();
+	public Class getRepresentationClass();
+	public boolean isMimeTypeEqual(String);
+	protected String normalizeMimeType(String);
+	protected String normalizeMimeTypeParameter(String, String);
+	public void setHumanPresentableName(String);
+}
+
+public class CommandInfo {
+	public CommandInfo(String, String);
+	public String getCommandClass();
+	public String getCommandName();
+	public Object getCommandObject(javax.activation.DataHandler, ClassLoader) throws java.io.IOException, ClassNotFoundException;
+}
+
+public abstract class CommandMap {
+	public CommandMap();
+	public abstract javax.activation.DataContentHandler createDataContentHandler(String);
+	public javax.activation.DataContentHandler createDataContentHandler(String, javax.activation.DataSource);
+	public abstract javax.activation.CommandInfo[] getAllCommands(String);
+	public javax.activation.CommandInfo[] getAllCommands(String, javax.activation.DataSource);
+	public abstract javax.activation.CommandInfo getCommand(String, String);
+	public javax.activation.CommandInfo getCommand(String, String, javax.activation.DataSource);
+	public static javax.activation.CommandMap getDefaultCommandMap();
+	public String[] getMimeTypes();
+	public abstract javax.activation.CommandInfo[] getPreferredCommands(String);
+	public javax.activation.CommandInfo[] getPreferredCommands(String, javax.activation.DataSource);
+	public static void setDefaultCommandMap(javax.activation.CommandMap);
+}
+
+public abstract interface CommandObject {
+	public abstract void setCommandContext(String, javax.activation.DataHandler) throws java.io.IOException;
+}
+
+public abstract interface DataContentHandler {
+	public abstract Object getContent(javax.activation.DataSource) throws java.io.IOException;
+	public abstract Object getTransferData(java.awt.datatransfer.DataFlavor, javax.activation.DataSource) throws java.awt.datatransfer.UnsupportedFlavorException, java.io.IOException;
+	public abstract java.awt.datatransfer.DataFlavor[] getTransferDataFlavors();
+	public abstract void writeTo(Object, String, java.io.OutputStream) throws java.io.IOException;
+}
+
+public abstract interface DataContentHandlerFactory {
+	public abstract javax.activation.DataContentHandler createDataContentHandler(String);
+}
+
+public class DataHandler implements java.awt.datatransfer.Transferable {
+	public DataHandler(Object, String);
+	public DataHandler(java.net.URL);
+	public DataHandler(javax.activation.DataSource);
+	public javax.activation.CommandInfo[] getAllCommands();
+	public Object getBean(javax.activation.CommandInfo);
+	public javax.activation.CommandInfo getCommand(String);
+	public Object getContent() throws java.io.IOException;
+	public String getContentType();
+	public javax.activation.DataSource getDataSource();
+	public java.io.InputStream getInputStream() throws java.io.IOException;
+	public String getName();
+	public java.io.OutputStream getOutputStream() throws java.io.IOException;
+	public javax.activation.CommandInfo[] getPreferredCommands();
+	public Object getTransferData(java.awt.datatransfer.DataFlavor) throws java.awt.datatransfer.UnsupportedFlavorException, java.io.IOException;
+	public synchronized java.awt.datatransfer.DataFlavor[] getTransferDataFlavors();
+	public boolean isDataFlavorSupported(java.awt.datatransfer.DataFlavor);
+	public synchronized void setCommandMap(javax.activation.CommandMap);
+	public static synchronized void setDataContentHandlerFactory(javax.activation.DataContentHandlerFactory);
+	public void writeTo(java.io.OutputStream) throws java.io.IOException;
+}
+
+public abstract interface DataSource {
+	public abstract String getContentType();
+	public abstract java.io.InputStream getInputStream() throws java.io.IOException;
+	public abstract String getName();
+	public abstract java.io.OutputStream getOutputStream() throws java.io.IOException;
+}
+
+public class FileDataSource implements javax.activation.DataSource {
+	public FileDataSource(java.io.File);
+	public FileDataSource(String);
+	public String getContentType();
+	public java.io.File getFile();
+	public java.io.InputStream getInputStream() throws java.io.IOException;
+	public String getName();
+	public java.io.OutputStream getOutputStream() throws java.io.IOException;
+	public void setFileTypeMap(javax.activation.FileTypeMap);
+}
+
+public abstract class FileTypeMap {
+	public FileTypeMap();
+	public abstract String getContentType(java.io.File);
+	public abstract String getContentType(String);
+	public static javax.activation.FileTypeMap getDefaultFileTypeMap();
+	public static void setDefaultFileTypeMap(javax.activation.FileTypeMap);
+}
+
+public class MailcapCommandMap extends javax.activation.CommandMap {
+	public MailcapCommandMap();
+	public MailcapCommandMap(java.io.InputStream);
+	public MailcapCommandMap(String) throws java.io.IOException;
+	public synchronized void addMailcap(String);
+	public synchronized javax.activation.DataContentHandler createDataContentHandler(String);
+	public synchronized javax.activation.CommandInfo[] getAllCommands(String);
+	public synchronized javax.activation.CommandInfo getCommand(String, String);
+	public synchronized String[] getMimeTypes();
+	public synchronized String[] getNativeCommands(String);
+	public synchronized javax.activation.CommandInfo[] getPreferredCommands(String);
+}
+
+public class MimeType implements java.io.Externalizable {
+	public MimeType();
+	public MimeType(String) throws javax.activation.MimeTypeParseException;
+	public MimeType(String, String) throws javax.activation.MimeTypeParseException;
+	public String getBaseType();
+	public String getParameter(String);
+	public javax.activation.MimeTypeParameterList getParameters();
+	public String getPrimaryType();
+	public String getSubType();
+	public boolean match(String) throws javax.activation.MimeTypeParseException;
+	public boolean match(javax.activation.MimeType);
+	public void readExternal(java.io.ObjectInput) throws java.io.IOException, ClassNotFoundException;
+	public void removeParameter(String);
+	public void setParameter(String, String);
+	public void setPrimaryType(String) throws javax.activation.MimeTypeParseException;
+	public void setSubType(String) throws javax.activation.MimeTypeParseException;
+	public String toString();
+	public void writeExternal(java.io.ObjectOutput) throws java.io.IOException;
+}
+
+public class MimeTypeParameterList {
+	public MimeTypeParameterList();
+	public MimeTypeParameterList(String) throws javax.activation.MimeTypeParseException;
+	public String get(String);
+	public java.util.Enumeration getNames();
+	public boolean isEmpty();
+	protected void parse(String) throws javax.activation.MimeTypeParseException;
+	public void remove(String);
+	public void set(String, String);
+	public int size();
+	public String toString();
+}
+
+public class MimeTypeParseException extends Exception {
+	public MimeTypeParseException();
+	public MimeTypeParseException(String);
+}
+
+public class MimetypesFileTypeMap extends javax.activation.FileTypeMap {
+	public MimetypesFileTypeMap();
+	public MimetypesFileTypeMap(java.io.InputStream);
+	public MimetypesFileTypeMap(String) throws java.io.IOException;
+	public synchronized void addMimeTypes(String);
+	public String getContentType(java.io.File);
+	public synchronized String getContentType(String);
+}
+
+public class URLDataSource implements javax.activation.DataSource {
+	public URLDataSource(java.net.URL);
+	public String getContentType();
+	public java.io.InputStream getInputStream() throws java.io.IOException;
+	public String getName();
+	public java.io.OutputStream getOutputStream() throws java.io.IOException;
+	public java.net.URL getURL();
+}
+
+public class UnsupportedDataTypeException extends java.io.IOException {
+	public UnsupportedDataTypeException();
+	public UnsupportedDataTypeException(String);
+}
+
+//end of Java signature file
diff --git a/build/solaris/com/GNUmakefile b/build/solaris/com/GNUmakefile
new file mode 100644
index 0000000..f72e2ae
--- /dev/null
+++ b/build/solaris/com/GNUmakefile
@@ -0,0 +1,21 @@
+#
+# @(#)GNUmakefile	1.3 97/10/22
+#
+# Makefile for building all of com
+#
+
+BUILDDIR = ..
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+SUBDIRS = sun
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk
+
+clean ::
+	rm -fr $(LIBDIR) $(BINDIR) $(CLASSBINDIR)
diff --git a/build/solaris/com/sun/GNUmakefile b/build/solaris/com/sun/GNUmakefile
new file mode 100644
index 0000000..2b8690d
--- /dev/null
+++ b/build/solaris/com/sun/GNUmakefile
@@ -0,0 +1,21 @@
+#
+# @(#)GNUmakefile	1.1 99/03/06
+#
+# Makefile for building all of com.sun
+#
+
+BUILDDIR = ../..
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+SUBDIRS = activation
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk
+
+clean ::
+	rm -fr $(LIBDIR) $(BINDIR) $(CLASSBINDIR)
diff --git a/build/solaris/com/sun/activation/GNUmakefile b/build/solaris/com/sun/activation/GNUmakefile
new file mode 100644
index 0000000..fbd207a
--- /dev/null
+++ b/build/solaris/com/sun/activation/GNUmakefile
@@ -0,0 +1,21 @@
+#
+# @(#)GNUmakefile	1.1 99/03/06
+#
+# Makefile for building all of com.sun.activation
+#
+
+BUILDDIR = ../../..
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+SUBDIRS = registries viewers
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk
+
+clean ::
+	rm -fr $(LIBDIR) $(BINDIR) $(CLASSBINDIR)
diff --git a/build/solaris/com/sun/activation/registries/GNUmakefile b/build/solaris/com/sun/activation/registries/GNUmakefile
new file mode 100644
index 0000000..233c5e4
--- /dev/null
+++ b/build/solaris/com/sun/activation/registries/GNUmakefile
@@ -0,0 +1,24 @@
+#
+# @(#)GNUmakefile	1.4 05/04/07
+#
+# Makefile for building all of com.sun.mail.registries
+#
+
+BUILDDIR = ../../../..
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+PACKAGE = com.sun.activation.registries
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+default: all
+
+include $(MINCLUDES)com_sun_activation_registries.jmk
+include $(BUILDDIR)/makefiles/Classes.gmk
+
+all: classes
+
+clean clobber :: classes.clean
+
+
diff --git a/build/solaris/com/sun/activation/viewers/GNUmakefile b/build/solaris/com/sun/activation/viewers/GNUmakefile
new file mode 100644
index 0000000..62a2347
--- /dev/null
+++ b/build/solaris/com/sun/activation/viewers/GNUmakefile
@@ -0,0 +1,24 @@
+#
+# @(#)GNUmakefile	1.1 99/03/06
+#
+# Makefile for building all of com.sun.activation.viewers
+#
+
+BUILDDIR = ../../../..
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+PACKAGE = com.sun.activation.viewers
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+default: all
+
+include $(MINCLUDES)com_sun_activation_viewers.jmk
+include $(BUILDDIR)/makefiles/Classes.gmk
+
+all: classes
+
+clean clobber :: classes.clean
+
+
diff --git a/build/solaris/demo/GNUmakefile b/build/solaris/demo/GNUmakefile
new file mode 100644
index 0000000..0e52e30
--- /dev/null
+++ b/build/solaris/demo/GNUmakefile
@@ -0,0 +1,24 @@
+#
+# @(#)GNUmakefile	1.2 07/05/15
+#
+# Makefile for building all of demo
+#
+
+BUILDDIR = ..
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+
+ALT_SRCDIR = demo
+ALT_CLASSBINDIR = $(BUILDDIR)/demo_classes
+DEPENDS = $(CLASSDIR)
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+include $(MINCLUDES)demo.jmk
+
+all :: classes
+
+clean clobber :: classes.clean
+
+include $(BUILDDIR)/makefiles/Classes.gmk
diff --git a/build/solaris/javax/GNUmakefile b/build/solaris/javax/GNUmakefile
new file mode 100644
index 0000000..6f050b8
--- /dev/null
+++ b/build/solaris/javax/GNUmakefile
@@ -0,0 +1,31 @@
+#
+# @(#)GNUmakefile	1.1 99/03/06
+#
+# Makefile for building all of javax
+#
+
+BUILDDIR = ..
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+
+# Javadoc defines
+DOCDIR = $(TOPDIR)/src/share/doc/api/javadocs
+DOCPACKAGES =	javax.activation
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+SUBDIRS = activation
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk
+
+clean ::
+	rm -fr $(LIBDIR) $(BINDIR) $(CLASSBINDIR)
+
+# for "docs" target (hack: set JDK to 1.2 so that newer javadoc is used)
+JDK = /usr/local/java/jdk1.2/solaris/
+JAVADOC_OPTS=	-J-Xmx32m
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Docs.gmk
+
diff --git a/build/solaris/javax/activation/GNUmakefile b/build/solaris/javax/activation/GNUmakefile
new file mode 100644
index 0000000..0b886f3
--- /dev/null
+++ b/build/solaris/javax/activation/GNUmakefile
@@ -0,0 +1,21 @@
+#
+# @(#)GNUmakefile	1.6 05/04/07
+#
+# Makefile for building all of javax.activation.*
+#
+
+BUILDDIR = ../..
+include $(BUILDDIR)/Platform.gmk
+
+PRODUCT = sun
+PACKAGE = javax.activation
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+include $(MINCLUDES)javax_activation.jmk
+
+all :: classes
+
+clean clobber :: classes.clean
+
+include $(BUILDDIR)/makefiles/Classes.gmk
diff --git a/build/solaris/lib/activation.jar b/build/solaris/lib/activation.jar
new file mode 100644
index 0000000..6837774
--- /dev/null
+++ b/build/solaris/lib/activation.jar
Binary files differ
diff --git a/build/solaris/makefiles/Classes.gmk b/build/solaris/makefiles/Classes.gmk
new file mode 100644
index 0000000..df1e6ab
--- /dev/null
+++ b/build/solaris/makefiles/Classes.gmk
@@ -0,0 +1,17 @@
+#
+# @(#)Classes.gmk	1.1 97/09/07
+#
+# Generic makefile for building collections of classes that doesn't
+# also have to build programs or libraries.
+#
+
+FILES_class = $(FILES_java:%.java=$(CLASSBINDIR)/%.class)
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Rules.gmk
+
+classes.clean :
+	rm -rf $(CLASSBINDIR)/$(PKGDIR) .classes.*
+
+DEBUG     = classes
+
+OPTIMIZED = classes
diff --git a/build/solaris/makefiles/Defs-solaris.gmk b/build/solaris/makefiles/Defs-solaris.gmk
new file mode 100644
index 0000000..3b73880
--- /dev/null
+++ b/build/solaris/makefiles/Defs-solaris.gmk
@@ -0,0 +1,185 @@
+#
+# @(#)Defs-solaris.gmk	1.3 05/04/07
+#
+# Makefile to specify compiler flags for programs and libraries
+# targeted to Solaris.  Should not contain any rules.
+#
+
+ARCH = $(shell uname -p)
+OS_VERSION = $(shell uname -r)
+
+WHOAMI=/usr/ucb/whoami
+ZIP=/usr/dist/local/exe/zip
+
+# This default is redefined during a release build.
+RELEASE = $(shell echo `$(WHOAMI)`:`date '+%m/%d/%y-%H:%M'`)
+FULL_VERSION = $(shell echo `$(WHOAMI)`:`date '+%m/%d/%y-%H:%M'`)
+
+## Section 1:	Define CC, CPP, AS and LD flags.
+
+# If -Xa is in CFLAGS_COMMON it will end up ahead of $(POPT) for the
+# optimized build, and that ordering of the flags completely freaks
+# out cc.  Hence, -Xa is instead in each CFLAGS variant.
+
+ifneq ($(CC_VERSION), gcc)
+CFLAGS_COMMON   = -v
+CFLAGS_OPT      = -Xa $(POPT)
+CFLAGS_DBG      = -Xa -g
+else
+CFLAGS_COMMON   = 
+CFLAGS_OPT      = $(POPT)
+CFLAGS_DBG      = -g
+endif
+
+# Java memory management is based on memory mapping by default, but a
+# system only assuming malloc/free can be built by adding -DUSE_MALLOC 
+
+ifneq ($(CC_VERSION), gcc)
+CPPFLAGS_COMMON = -D$(ARCH) -DSOLARIS2 -DRELEASE='"$(RELEASE)"' -DFULL_VERSION='"$(FULL_VERSION)"'
+else
+CPPFLAGS_COMMON = -D$(ARCH) -DHAVE_ALIGNED_LONGLONGS -DHAVE_ALIGNED_DOUBLES -DSOLARIS2 -DRELEASE='"$(RELEASE)"' -DFULL_VERSION='"$(FULL_VERSION)"'
+endif
+# [sbb] int32 scaffolding -- to be removed
+CPPFLAGS_COMMON += $(USE_INT32) 
+CPPFLAGS_OPT    = 
+CPPFLAGS_DBG    = -DDEBUG
+
+ASFLAGS_COMMON  = -P
+ASFLAGS_OPT     =
+ASFLAGS_DBG     =
+
+ifneq ($(LIBRARY),JdbcOdbc)
+LDFLAGS_COMMON  = -z defs
+else
+LDFLAGS_COMMON  =
+endif
+LDFLAGS_OPT     =
+LDFLAGS_DBG     =
+
+#
+# All libraries except libjava and libjvm itself link against libjvm
+# and libjava, the latter for its exported common utilities.  libjava
+# only links against libjvm.  Programs' makefiles take their own 
+# responsibility for adding other libs.
+#
+ifdef LIBRARY
+LDLIBS_COMMON   =
+ifneq ($(LIBRARY),jvm)
+ifneq ($(LIBRARY),java)
+# no libjvm in JDK 1.1
+#LDLIBS_OPT     = -L$(LIB_LOCATION) -ljvm -ljava
+#LDLIBS_DBG     = -L$(LIB_LOCATION) -ljvm_g -ljava_g
+LDLIBS_OPT     = -L$(LIB_LOCATION) -ljava
+LDLIBS_DBG     = -L$(LIB_LOCATION) -ljava_g
+else
+LDLIBS_OPT     = -L$(LIB_LOCATION) -ljvm
+LDLIBS_DBG     = -L$(LIB_LOCATION) -ljvm_g
+endif
+endif
+endif
+
+## Section 2:	Variables globally settable from the make
+##       	command line (default values in brackets):
+##		THREADS_FLAG (native), GPROF (false), JCOV (true).
+##		Eg: 	% gnumake THREADS_FLAG=green
+
+THREADS_FLAG=green
+
+ifdef LIBRARY
+ifeq ($(LIBRARY), jvm)
+# do nothing
+else
+ifeq ($(LIBRARY), agent)
+# do nothing
+else
+BUILD_REENTRANT_LIBS = true
+endif
+endif
+endif
+
+LDFLAGS_COMMON = -L$(JDK_LIBDIR)/$(ARCH)
+ifdef BUILD_REENTRANT_LIBS
+CFLAGS_COMMON   += -D_REENTRANT
+LDFLAGS_COMMON += -L$(LIBDIR)/$(ARCH)
+else
+ifeq ($(THREADS_FLAG), native)
+    CFLAGS_COMMON   += -D_REENTRANT -DNATIVE
+    # Even though libjava.so is linked with -lthread, this makes sure that
+    # the executable sees libthread definitions of thr_* functions before
+    # libc definitions.  Starting in 2.5.1 the libc functions "do the
+    # right thing" when linked before libthread, but there is at least
+    # one bug in thr_stksegment that prevents it from working.  The
+    # following line could go away if we decide not to support Solaris
+    # releases prior to 2.5.1 *and* the libc thread stubs get fixed.
+    # Dean Long 3/24/97:
+    LDLIBS_COMMON   += -lthread
+endif
+endif
+
+GPROF = false
+ifeq ($(GPROF), true)
+    CFLAGS_COMMON += -DGPROF -xpg
+    LDLIBS_COMMON += -xpg
+endif
+
+JCOV = true
+ifeq ($(JCOV), true)
+ifeq ($(VARIANT), DBG)
+    CFLAGS_COMMON += -DJCOV
+endif
+endif
+
+ifdef LIBRARY
+    LDLIBS_COMMON += -lc
+endif
+
+
+## Section 3:	Are we building some piece of the runtime?
+
+# Java default optimization -x04
+ifeq ($(PRODUCT), java)
+ifneq ($(CC_VERSION), gcc)
+    _OPT = -xO4
+else
+    _OPT = -O3
+endif
+    CPPFLAGS_DBG    += -DLOGGING 
+    ASFLAGS_COMMON  += -D_ASM
+endif
+
+
+## Section 4:   Was your answer to Section 3 no?
+
+# Non-runtime default optimization -x02
+ifneq ($(PRODUCT), java)
+ifneq ($(CC_VERSION), gcc)
+    _OPT = -xO2
+else
+    _OPT = -O2
+endif
+endif
+
+
+## Section 5:	Tools
+
+ifneq ($(CC_VERSION), gcc)
+CC      = cc
+CPP     = cc -E
+CXX	= CC
+else
+CC      = gcc
+CPP     = gcc -E
+CXX	= g++
+endif
+
+AS	= as
+LD	= /usr/ccs/bin/ld
+OPENWINHOME = /usr/openwin
+LIBRARY_SUFFIX = so
+
+# SunSoft JIT
+ifneq ($(PRODUCT), java)
+ifeq ($(BUILD_USES_JIT), true)
+    JIT_OPTION=-Djava.compiler=sunwjit
+endif
+endif
diff --git a/build/solaris/makefiles/Defs.gmk b/build/solaris/makefiles/Defs.gmk
new file mode 100644
index 0000000..3028ac7
--- /dev/null
+++ b/build/solaris/makefiles/Defs.gmk
@@ -0,0 +1,205 @@
+#
+# @(#)Defs.gmk	1.21 07/05/15
+#
+# Common variables used by all the Java makefiles.  This file should not
+# contain rules.
+#
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs-$(PLATFORM).gmk
+
+
+SHARE_SRC    = $(TOPDIR)/src/share
+PLATFORM_SRC = $(TOPDIR)/src/$(PLATFORM)
+
+TARGDIR = 
+MINCLUDES = $(TOPDIR)/build/share/minclude/
+
+#
+# Default BOOTDIR
+#
+_BOOTDIR = /usr/local/java/latest
+
+#
+# Set BOOTDIR to _BOOTDIR if ALT_BOOTDIR isn't set. Otherwise, set
+# it to ALT_BOOTDIR
+#
+BOOTDIR = $(_BOOTDIR$(ALT_BOOTDIR))$(ALT_BOOTDIR)
+
+#
+# Default JAVAHOME
+#
+ifeq ($(ARCH), sparc)
+    _JAVAHOME = /java/re/jdk/1.4.2/archive/fcs/binaries/solaris-sparc
+else
+    _JAVAHOME = /java/re/jdk/1.4.2/archive/fcs/binaries/solaris-i586
+endif
+
+#
+# Set JAVAHOME to _JAVAHOME if ALT_JAVAHOME isn't set. Otherwise, set
+# it to ALT_JAVAHOME
+#
+JAVAHOME = $(_JAVAHOME$(ALT_JAVAHOME))$(ALT_JAVAHOME)
+
+JDK         = $(JAVAHOME$(JDK_HOME))$(JDK_HOME)
+JDK_BINDIR  = $(JDK)/bin
+JDK_INCLUDE = $(JDK)/include
+JDK_LIBDIR  = $(JDK)/jre/lib
+BINDIR      = $(TOPDIR)/build/$(PLATFORM)/bin
+LIBDIR      = $(TOPDIR)/build/$(PLATFORM)/lib
+INCLUDEDIR  = $(TOPDIR)/build/$(PLATFORM)/include
+CLASSDIR    = $(TOPDIR)/build/$(PLATFORM)/classes
+RELEASEDIR  = $(TOPDIR)/build/$(PLATFORM)/release
+# Set CLASSBINDIR to CLASSDIR if ALT_CLASSBINDIR isn't set.  Otheriwse set
+# it to ALT_CLASSBINDIR
+CLASSBINDIR = $(CLASSDIR$(ALT_CLASSBINDIR))$(ALT_CLASSBINDIR)
+_SRCDIR     = .
+SRCDIR      = $(_SRCDIR$(ALT_SRCDIR))$(ALT_SRCDIR)
+
+INCLUDES = -I. -ICClassHeaders \
+	-I$(JDK_INCLUDE) -I$(JDK_INCLUDE)/$(PLATFORM) \
+	$(patsubst %,-I%,$(subst :, ,$(VPATH.h))) $(OTHER_INCLUDES)
+OTHER_CPPFLAGS = $(INCLUDES)
+
+#
+# vpaths.  These are the default locations searched for source files.
+# GNUmakefiles of individual areas often override the default settings.
+# There are no longer default vpath entries for C and assembler files
+# so we can ensure that libraries don't get their hands on JVM files.
+#
+# We define an intermediate variable for Java files because
+# we use its value later to help define $CLASSPATH
+#
+VPATH.java = $(PLATFORM_SRC)/classes/$(SRCDIR):$(SHARE_SRC)/classes/$(SRCDIR)
+
+vpath %.java $(VPATH.java)
+
+vpath %.class $(CLASSBINDIR)
+
+vpath %.o   $(OBJDIR)
+
+#
+# VPATH.h is used elsewhere to generate include flags.  By default, 
+# anyone has access to the include files that the JVM area exports,
+# namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific
+# relatives.
+#
+VPATH.h =   $(PLATFORM_SRC)/javavm/export:$(SHARE_SRC)/javavm/export
+
+vpath %.h   $(VPATH.h)
+
+#
+# Object Directories
+# Create different object directories for green and native threads
+# so that both options can be built without clobbering each other
+
+# Directory name specific to type of threads: green or native
+# If THREADS_FLAG is not set or not equal to green or native, then no threads
+# specific object directories are made. This would enable to quickly move to
+# a build environment with a single threads type, in the future.
+# TSOBJDIR = Thread Specific object directory
+
+ifdef BUILD_REENTRANT_LIBS
+	TSOBJDIR = .
+else
+ifeq ($(THREADS_FLAG), native)
+	TSOBJDIR = native_threads
+else
+ifeq ($(THREADS_FLAG), green)
+	TSOBJDIR = green_threads
+else
+	TSOBJDIR = .
+endif
+endif
+endif
+
+#
+OBJDIR_NAME     = obj
+OBJDIR          = $(OBJDIR_NAME)$(SUFFIX)/$(ARCH)/$(TSOBJDIR)
+OBJDIRS         = $(OBJDIR_NAME)$(OPT_SUFFIX)/$(ARCH)/$(TSOBJDIR) \
+		  $(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)
+
+#
+# LIB_LOCATION must be defined in all cases so that we can link against
+# libjava in various places.
+#
+LIB_LOCATION =  $(LIBDIR)/$(ARCH)
+JDK_LIB_LOCATION =  $(JDK_LIBDIR)/$(ARCH)
+
+# Compute the root of each of the object directories
+# used to delete whole object directories when making clean and/or clobber
+
+OBJROOTS = $(patsubst %/$(ARCH)/$(TSOBJDIR), %, $(OBJDIRS))
+
+#
+# Java header and stub variables
+#
+ifeq ($(PRODUCT), java)
+    CLASSPATH =	$(CLASSBINDIR):$(DEPENDS):$(VPATH.java)
+else
+    PKG    = $(shell expr $(PACKAGE) : '\([a-z]*\)')
+    PKGDIR = $(shell echo $(PACKAGE) | sed 's:\.:/:g')
+    CLASSSRCDIR1 = $(PLATFORM_SRC)/classes/$(SRCDIR)
+    CLASSSRCDIR2 = $(SHARE_SRC)/classes/$(SRCDIR)
+    SRCPATH = $(CLASSSRCDIR1):$(CLASSSRCDIR2)
+    CLASSPATH = $(SRCPATH):$(CLASSBINDIR):$(DEPENDS)
+endif
+
+CLASSHDRDIR =	CClassHeaders
+CLASSHDRS =     $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export)))
+CLASSSTUBOBJS = classstubs.o
+STUBPREAMBLE=   $(TOPDIR)/build/$(PLATFORM)/classes/StubPreamble.h
+
+#
+# Suffixes for various VARIANTs
+#
+OPT_SUFFIX      =
+DBG_SUFFIX      = _g
+SUFFIX          = $($(VARIANT)_SUFFIX)
+
+#
+# Java executables/scripts [I'm not sure whether we really want to be
+# getting the raw executables in the other cases rather than going
+# through the wrappers.  Adding JCMD to fix a problem in JAVAC_CMD is
+# conservative for now but may not be best.  It's also not clear that
+# JCMD should be java$(SUFFIX), but that may be needed for "gnumake
+# debug" to do the right thing.  Again, do no harm for now.]
+#
+ifeq ($(PRODUCT), java)
+    JAVA    = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/java$(SUFFIX)
+    JAVAH   = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/javah$(SUFFIX)
+    JAVAC   = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/javac$(SUFFIX)
+    JAR     = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/jar$(SUFFIX)
+    JCMD    = $(BINDIR)/java$(SUFFIX) -$(THREADS_FLAG)
+else
+    JAVA    = $(JDK_BINDIR)/java$(SUFFIX)
+    JAVAC   = $(JDK_BINDIR)/javac$(SUFFIX)
+    JAVAH   = $(JDK_BINDIR)/javah$(SUFFIX)
+    JAVADOC = $(JDK_BINDIR)/javadoc$(SUFFIX)
+    JAR     = $(JDK_BINDIR)/jar$(SUFFIX)
+    JDB	    = $(JDK_BINDIR)/jdb$(SUFFIX)
+    JCMD    = $(JAVA)
+endif
+
+#
+# Invoking the Java compiler
+#
+JAVAC_CMD = $(JAVAC) -source 1.4
+
+#
+# Set opt level to ALT_OPT if set otherwise _OPT
+#
+POPT = $(_OPT$(ALT_OPT))$(ALT_OPT)
+
+#
+# Tool flags
+#
+CFLAGS          = $(CFLAGS_$(VARIANT)) $(CFLAGS_COMMON) $(OTHER_CFLAGS)
+LCFLAGS         = $(CFLAGS_$(VARIANT)) $(LCFLAGS_COMMON) $(OTHER_CFLAGS)
+CPPFLAGS        = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \
+		  $(DEFINES) $(OPTIONS:%=-D%)
+LCPPFLAGS       = $(CPPFLAGS_$(VARIANT)) $(LCPPFLAGS_COMMON) \
+		  $(OTHER_CPPFLAGS) $(DEFINES) $(OPTIONS:%=-D%)
+ASFLAGS         = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS)
+LDFLAGS         = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS)
+LDLIBS          = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON)
+
diff --git a/build/solaris/makefiles/Docs.gmk b/build/solaris/makefiles/Docs.gmk
new file mode 100644
index 0000000..305d93b
--- /dev/null
+++ b/build/solaris/makefiles/Docs.gmk
@@ -0,0 +1,25 @@
+#
+# @(#)Docs.gmk	1.5 99/03/06
+#
+# Makefile Rule for generating javadocs
+#
+# Depends on JDK 1.2beta4 or later javadoc.
+#
+
+TITLE = 'JavaBeans Activation Framework 1.0 API documentation'
+JAVADOC_OPTS = -use -splitIndex -windowtitle $(TITLE) -doctitle $(TITLE)
+
+docs:
+	if [ ! -s $(DOCDIR) ]; then \
+		mkdir -p $(DOCDIR); \
+	fi
+	if [ ! -s $(DOCDIR)/images ]; then \
+		echo Warning: No Images directory in $(DOCDIR); \
+		if [ -s $(DOCDIR)/../misc/images ]; then \
+			mkdir $(DOCDIR)/images; \
+			cp $(DOCDIR)/../misc/images/*.gif $(DOCDIR)/images; \
+		fi; \
+	fi
+	rm -f $(DOCDIR)/*.html
+	$(JAVADOC) $(JAVADOC_OPTS) -d $(DOCDIR) -sourcepath $(SRCPATH) \
+		$(DOCPACKAGES)
diff --git a/build/solaris/makefiles/Library.gmk b/build/solaris/makefiles/Library.gmk
new file mode 100644
index 0000000..11dd9ea
--- /dev/null
+++ b/build/solaris/makefiles/Library.gmk
@@ -0,0 +1,100 @@
+#
+# @(#)Library.gmk	1.1 97/09/07
+#
+# Generic makefile for building libraries.
+#
+# This should be included in your library GNUmakefile.
+#
+
+.PHONY: all optimized debug clean .exported.classes
+
+all: optimized debug
+
+library: optimized debug
+
+optimized debug: 
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Classes.gmk
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+# It is important to define these *after* including Classes.gmk
+# in order to override the values defined inthat makefile.
+#
+DEBUG     = $(LIB_LOCATION)/lib$(LIBRARY)_g.$(LIBRARY_SUFFIX)
+
+OPTIMIZED =  $(LIB_LOCATION)/lib$(LIBRARY).$(LIBRARY_SUFFIX)
+
+FILES_o  = $(patsubst %.c,$(OBJDIR)/%.o,$(FILES_c))
+FILES_o += $(patsubst %.s,$(OBJDIR)/%.o,$(FILES_s))
+FILES_o += $(patsubst %.cpp,$(OBJDIR)/%.o,$(FILES_cpp))
+
+ifeq ($(LIBRARY), jvm)
+$(OPTIMIZED) $(DEBUG) :: \
+    $(INIT) $(OBJDIR)/.library.dirs.$(ARCH) .library.headers
+	@true
+else
+$(OPTIMIZED) $(DEBUG) :: \
+    $(INIT) $(OBJDIR)/.library.dirs.$(ARCH) classes .library.headers
+	@true
+endif
+
+$(OPTIMIZED) $(DEBUG):: $(FILES_o)
+	@set -- $?; \
+	    echo Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...};
+	@echo $@
+	@echo "OBJDIR=$(OBJDIR)"
+	$(CC) -G -o $@ $(FILES_o) $(LDFLAGS) $(LDLIBS)
+	/usr/ccs/bin/mcs -d -a "$(FULL_VERSION)" $@
+
+ifneq ($(PRODUCT), java)
+vpath %.c $(SHARE_SRC)/native/$(PKGDIR)
+vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)
+
+CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR) \
+            -I$(PLATFORM_SRC)/native/$(PKGDIR)
+endif
+
+OTHER_INCLUDES += -I$(SHARE_SRC)/native/common \
+		  -I$(PLATFORM_SRC)/native/common
+
+CLASSES.export = $(shell echo '$(FILES_export)' '$(FILES_export2)' \
+                         | sed -e 's:\.java::g' -e 's:/:\.:g' -e 's/\$$/\\\$$/g')
+
+.exported.classes: .delete.classlist \
+	$(FILES_export:%.java=$(CLASSBINDIR)/%.class) .compile.classlist
+
+#
+# Delete these libstubs.c rules once conversion to JNI is completed
+#
+libstubs.c .library.headers :: .exported.classes
+	@true
+
+libstubs.c :: $(FILES_export:%.java=$(CLASSBINDIR)/%.class)
+	$(JAVAH) $(JAVAHFLAGS) -classpath $(CLASSPATH) -o $@ \
+		-stubs $(CLASSES.export)
+	@-touch $@	# javah only writes file if changed
+
+.library.headers :: $(FILES_export:%.java=$(CLASSBINDIR)/%.class)
+	$(JAVAH) $(JAVAHFLAGS) -classpath $(CLASSPATH) -d $(CLASSHDRDIR)/ \
+		$(CLASSES.export)
+	@-touch $@
+
+$(OBJDIR)/.library.dirs.$(ARCH): FORCE
+	mkdir -p $(LIBDIR)/$(ARCH)/$(TSOBJDIR) $(OBJDIRS)
+	@-touch $(OBJDIR)/.library.dirs.$(ARCH)
+
+library.clean: 
+	rm -rf libstubs.c $(OBJROOTS) CClassHeaders
+	rm -rf $(DEBUG) $(OPTIMIZED) .library.*
+
+clobber :: clean
+
+#
+# Include make dependancies
+#
+files := $(foreach file, $(wildcard */$(ARCH)/$(TSOBJDIR)/*.d), $(file))
+ifneq ($(strip $(files)),)
+    include $(files)
+endif
+
+.PHONY : .exported.classes 
diff --git a/build/solaris/makefiles/Program.gmk b/build/solaris/makefiles/Program.gmk
new file mode 100644
index 0000000..8332ef6
--- /dev/null
+++ b/build/solaris/makefiles/Program.gmk
@@ -0,0 +1,91 @@
+#
+# @(#)Program.gmk	1.1 97/09/07
+#
+# Generic makefile for building executables.
+
+.PHONY: all optimized debug classes clean clobber
+
+all: optimized debug
+
+TSPROGRAM = $(PROGRAM:%=$(TSOBJDIR)/%)
+DEBUG     = $(BINDIR)/$(ARCH)/$(TSPROGRAM)_g $(BINDIR)/$(PROGRAM)_g 
+OPTIMIZED = $(BINDIR)/$(ARCH)/$(TSPROGRAM) $(BINDIR)/$(PROGRAM) 
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Rules.gmk
+
+FILES_o  = $(patsubst %.c,$(OBJDIR)/%.o,$(FILES_c))
+FILES_o += $(patsubst %.s,$(OBJDIR)/%.o,$(FILES_s))
+
+CLASSES.export = $(shell echo $(FILES_export) | \
+			 sed "s:\.java::g" | sed "s:/:\.:g")
+
+.PHONY : $(PROGRAM)_g $(PROGRAM)
+
+$(PROGRAM)_g: debug
+
+$(PROGRAM): optimized
+
+# Make a generic link to the executable, for casual users
+
+$(BINDIR)/$(ARCH)/$(TSPROGRAM)_g $(BINDIR)/$(ARCH)/$(TSPROGRAM) \
+	:: $(INIT) $(OBJDIR)/.program.dirs.$(ARCH) classes $(PROGRAM_HEADERS)
+	@true
+
+$(BINDIR)/$(ARCH)/$(TSPROGRAM)_g $(BINDIR)/$(ARCH)/$(TSPROGRAM) \
+	:: $(FILES_o)
+	@set -- $?; \
+	    echo Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...};
+	$(CC) $(LDFLAGS) $(FILES_o) $(LDLIBS) -o $(OBJDIR)/$(@F)
+	-(cp $(OBJDIR)/$(@F) $(BINDIR)/$(ARCH)/$(TSOBJDIR)/$(@F) \
+	  	&& echo "Copying" $(@F) "to" \
+		$(BINDIR)/$(ARCH)/$(TSOBJDIR)) 2>/dev/null
+
+$(BINDIR)/$(PROGRAM)_g: $(BINDIR)/.java_wrapper .java_wrapper_local
+	rm -f $(BINDIR)/$(@F) ; ln -s .java_wrapper $(BINDIR)/$(@F)
+	rm -f $(@F) ; ln -s .java_wrapper_local $(@F)
+
+$(BINDIR)/$(PROGRAM): $(BINDIR)/.java_wrapper .java_wrapper_local
+	rm -f $(BINDIR)/$(@F) ; ln -s .java_wrapper $(BINDIR)/$(@F)
+	rm -f $(@F) ; ln -s .java_wrapper_local $(@F)
+
+$(BINDIR)/.java_wrapper: $(PLATFORM_SRC)/bin/java_wrapper.sh
+	rm -f $(BINDIR)/.java_wrapper
+	cp $(PLATFORM_SRC)/bin/java_wrapper.sh $(BINDIR)/.java_wrapper
+	chmod +x $(BINDIR)/.java_wrapper
+
+.java_wrapper_local: $(PLATFORM_SRC)/bin/java_wrapper_local.sh
+	rm -f .java_wrapper_local
+	cp $(PLATFORM_SRC)/bin/java_wrapper_local.sh .java_wrapper_local
+	chmod +x .java_wrapper_local
+
+$(OBJDIR)/.program.dirs.$(ARCH):
+	mkdir -p $(OBJDIRS) $(BINDIR)/$(ARCH)/$(TSOBJDIR) \
+		$(CLASSBINDIR)
+	-touch $(OBJDIR)/.program.dirs.$(ARCH)
+
+$(PROGRAM_HEADERS): $(FILES_export:%.java=$(CLASSBINDIR)/%.class)
+	$(JAVAH) $(JAVAHFLAGS) -classpath $(CLASSPATH) -d $(CLASSHDRDIR)/ \
+		$(CLASSES.export)
+	@-touch $@
+
+classstubs.c: $(FILES_export:%.java=$(CLASSBINDIR)/%.class)
+	$(JAVAH) $(JAVAHFLAGS) -classpath $(CLASSPATH) -o $@ \
+		-stubs $(CLASSES.export)
+	@-touch $@	# javah only writes file if changed
+
+clean :: FORCE
+	rm -rf $(OBJROOTS)
+	rm -f classstubs.c .program*
+
+clobber :: FORCE
+	rm -f $(OPTIMIZED) $(DEBUG) $(PROGRAM) $(PROGRAM)_g
+	rm -f .java_wrapper_local
+
+#
+# Now include make dependencies
+#
+files := $(foreach file, $(wildcard */$(ARCH)/$(TSOBJDIR)/*.d), $(file))
+ifneq ($(strip $(files)),)
+    include $(files)
+endif
+
diff --git a/build/solaris/makefiles/Project.gmk b/build/solaris/makefiles/Project.gmk
new file mode 100644
index 0000000..1cba7ac
--- /dev/null
+++ b/build/solaris/makefiles/Project.gmk
@@ -0,0 +1,21 @@
+#
+# @(#)Project.gmk	1.2 97/10/25
+#
+# Rule to make the Java Workshop project file at each level.
+#
+# SUBDIRS may be set if there are subdirectories.
+# .classes.prj will have been created if there
+# are .java files here.
+
+MAIN_prj = $(MAIN:%=%.prj)
+
+project ::	$(MAIN_prj) GNUmakefile
+	sh $(TOPDIR)/build/$(PLATFORM)/makefiles/mkproject -d $(CLASSBINDIR) \
+	    -p $(CLASSPATH) -s "$(SUBDIRS)" -c "-g -J-mx16m -J-mx32m" \
+	    $(shell if [ -s .classes.prj ] ; then cat .classes.prj; fi) \
+	    >$(shell basename `pwd`).prj
+
+%.prj:	GNUmakefile
+	sh $(TOPDIR)/build/$(PLATFORM)/makefiles/mkproject -d $(CLASSBINDIR) \
+	    -p $(CLASSPATH) -s $(TOPDIR)/build/$(PLATFORM)/$(PLATFORM) \
+	    -j -mx32m -m $(PACKAGE).$(subst .prj,,$@) > $@
diff --git a/build/solaris/makefiles/Rules.gmk b/build/solaris/makefiles/Rules.gmk
new file mode 100644
index 0000000..57cfe2a
--- /dev/null
+++ b/build/solaris/makefiles/Rules.gmk
@@ -0,0 +1,175 @@
+#
+# @(#)Rules.gmk	1.3 97/10/23
+#
+# Rules shared by all Java makefiles.
+#
+
+.PHONY: classes
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+#
+# This could now be done with vpaths.
+#
+$(CLASSBINDIR)/%.class: $(PLATFORM_SRC)/classes/%.java
+	@echo $? >>.classes.list
+$(CLASSBINDIR)/%.class: $(SHARE_SRC)/classes/%.java
+	@echo $? >>.classes.list
+
+FILES_class = $(FILES_java:%.java=$(CLASSBINDIR)/%.class)
+
+.delete.classlist:
+	@/bin/rm -f .classes.list
+
+.compile.classlist: 
+	if [ -s .classes.list ] ; \
+	then $(JAVAC_CMD) -classpath $(CLASSPATH) -d $(CLASSBINDIR) \
+	    $(JAVACFLAGS) \
+	    $(shell if [ -s .classes.list ] ; then cat .classes.list; fi ) ; \
+	fi
+
+classes : $(CLASSBINDIR) .delete.classlist $(FILES_class) .compile.classlist
+
+#
+# Special rules to collect the list of source files in this project.
+# The leading "X/" is a necessary hack because otherwise "%.class"
+# doesn't match anything with a "/" in it.
+#
+X/%.class: $(PLATFORM_SRC)/classes/%.java
+	@echo $? >>.classes.prj
+X/%.class: $(SHARE_SRC)/classes/%.java
+	@echo $? >>.classes.prj
+
+FILES_list = $(FILES_java:%.java=X/%.class)
+
+#
+# Rules for making Java Workshop project files
+#
+project :: .delete.prjlist $(FILES_list)
+
+.delete.prjlist:
+	@/bin/rm -f .classes.prj
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk
+
+# End of Java Workshop rules
+
+$(CLASSBINDIR):
+	@mkdir -p $@
+
+$(OBJDIR)/%.o: %.c
+    ifdef VARIANT
+	$(COMPILE.c) -o $@ $<
+	@$(CC) -xM1 $(CPPFLAGS) $< 2> /dev/null | \
+	    sed -e '/:[ 	]*[/]/d' -e 's!$*\.o!$(dir $@)&!g' | \
+	    sort | uniq > $(@:.o=.d)
+    else
+	$(MAKE) $@ VARIANT=OPT
+    endif
+
+$(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)/%.o: %.c
+    ifdef VARIANT
+	$(COMPILE.c) -o $@ $<
+	@$(CC) -xM1 $(CPPFLAGS) $< 2> /dev/null | \
+	    sed -e '/:[ 	]*[/]/d' -e 's!$*\.o!$(dir $@)&!g' | \
+	    sort | uniq > $(@:.o=.d)
+    else
+	$(MAKE) $@ VARIANT=DBG
+    endif
+
+$(OBJDIR_NAME)/$(ARCH)/$(TSOBJDIR)/%.o: %.cpp
+	$(COMPILE.cc) -o $@ $<
+
+$(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)/%.o: %.cpp
+	$(COMPILE.cc) -o $@ $<
+
+$(OBJDIR_NAME)/$(ARCH)/$(TSOBJDIR)/%.o: %.s
+	$(COMPILE.s) -o $@ $<
+
+$(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)/%.o: %.s
+	$(COMPILE.s) -o $@ $<
+
+#
+# Special targets and dependencies
+#
+opcodes.h: $(SHARE_SRC)/javavm/include/opcodes.list
+	@echo "Creating $@ ... "
+	@rm -f $@
+	@awk 'BEGIN    {print "typedef enum {" } \
+              /^[a-z]/ {printf("  opc_%s = %d,\n", $$1, i++); } \
+              END      {printf("  opc_first_unused_index = %d,\n", i++); \
+			print "  opc_software = 254,"; \
+			print "  opc_hardware = 255"; \
+			print "} opcode_type;"; \
+	               }' \
+           $(SHARE_SRC)/javavm/include/opcodes.list  > $@
+	@chmod 444 $@
+
+opcodes.init: $(SHARE_SRC)/javavm/include/opcodes.list
+	@echo "Creating $@ ... "
+	@rm -f $@
+	@awk 'BEGIN     { print "char *opnames[256] = {" } \
+              /^[a-z]/ { printf("   \"%s\",\n", $$1); i++; } \
+              END       { while(i++ < 254) print "   \"??\","; \
+			  print "   \"software\","; \
+			  print "   \"hardware\","; \
+			  print "};" \
+	                }' \
+           $(SHARE_SRC)/javavm/include/opcodes.list  > $@
+	@chmod 444 $@
+
+opcodes.c: $(SHARE_SRC)/javavm/include/opcodes.list
+	@echo "Creating $@ ... "
+	@rm -f $@
+	@awk 'BEGIN  { \
+		print "#if defined(TRACING) || defined(STATISTICS)"; \
+		print "char *opnames[256] = {"; \
+	      } \
+              /^[a-z]/ { printf("   \"%s\",\n", $$1); i++; } \
+               END { \
+		while(i++ < 254) \
+		    print "   \"??\","; \
+		print "   \"software\","; \
+		print "   \"hardware\","; \
+		print "};"; \
+		print "#else "; \
+		print "char *opnames[1];"; \
+		print "#endif"; \
+	      } \
+	' \
+           $(SHARE_SRC)/javavm/include/opcodes.list  > $@
+	@chmod 444 $@
+
+opcodes.length: $(SHARE_SRC)/javavm/include/opcodes.list
+	@echo "Creating $@ ... "
+	@rm -f $@
+	@awk 'BEGIN     { print "short opcode_length[256] = {" } \
+              /^[a-z]/  { printf("   %s,\t\t/* %s */\n", $$2, $$1); i++; } \
+              END       { while(i++ < 256) print "   -1,"; print "};" }' \
+          $(SHARE_SRC)/javavm/include/opcodes.list  > $@
+	@chmod 444 $@
+
+opcodes.in_out: $(SHARE_SRC)/javavm/include/opcodes.list
+	@echo "Creating $@ ... "
+	@rm -f $@
+	@awk 'BEGIN     { print "char *opcode_in_out[][2] = {" } \
+              /^[a-z]/  { if ($$3 == "-") $$3 = ""; \
+                          if ($$4 == "-") $$4 = ""; \
+                          printf("   {\"%s\", \"%s\"}, \t\t/* %s */\n", \
+                                    $$3, $$4, $$1); }  \
+              END       { print "};" }' \
+          $(SHARE_SRC)/javavm/include/opcodes.list  > $@
+	@chmod 444 $@
+
+clobber :: clean
+
+FORCE: ;
+
+.PHONY : .delete.classlist classes .compile.classlist clean clobber
+
+debug:
+	$(MAKE) $(DEBUG) VARIANT=DBG
+
+optimized:
+	$(MAKE) $(OPTIMIZED) VARIANT=OPT
+
diff --git a/build/solaris/makefiles/Subdirs.gmk b/build/solaris/makefiles/Subdirs.gmk
new file mode 100644
index 0000000..cb8f954
--- /dev/null
+++ b/build/solaris/makefiles/Subdirs.gmk
@@ -0,0 +1,11 @@
+#
+# @(#)Subdirs.gmk	1.1 97/10/22
+#
+# Generic rule to recurse.
+#
+all clean clobber project ::
+	@for i in $(SUBDIRS) ; do \
+	    echo ">>>Recursively making "$$i" "$@"..."; \
+	    cd $$i; $(MAKE) $@ RELEASE=$(RELEASE) || exit 1; cd ..; \
+	    echo "<<<Finished Recursively making "$$i" "$@"." ; \
+	done
diff --git a/build/solaris/makefiles/Wrapper.gmk b/build/solaris/makefiles/Wrapper.gmk
new file mode 100644
index 0000000..56d21ae
--- /dev/null
+++ b/build/solaris/makefiles/Wrapper.gmk
@@ -0,0 +1,61 @@
+# @(#)Wrapper.gmk	1.1 97/09/07
+#
+# Wrapper installation rules for tools that invoke java with a
+# classname (eg: javac, javakey).
+
+
+# Usage:
+#   Include this file in your makefile and set PROG_SH to be the
+#   tool(s) name(s). The tool should live in
+#   src/$(PLATFORM)/bin/tool.sh. For instance:
+#     
+#        include $(TOPDIR)/build/$(PLATFORM)/makefiles/Wrapper.gmk
+#	 PROG_SH = javakey javakey_g
+#
+#   Note that multiple scripts can be installed.
+
+
+include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
+
+#
+# PROG_SH_* variables point to locations of the:
+#   (a) script in the distribution/build (DEST),
+#   (b) dirname for DEST (namely DESTDIR),
+#   (c) script in its source form (SRC), and
+#   (d) symlink so the tool could use .java_wrapper (LINK).
+#
+PROG_SH_DESTDIR  = $(BINDIR)/$(ARCH)/$(TSOBJDIR)
+PROG_SH_DEST     = $(PROG_SH:%=$(PROG_SH_DESTDIR)/%)
+PROG_SH_SRC      = $(PROG_SH:%=$(PLATFORM_SRC)/bin/%.sh)
+PROG_SH_LINK     = $(PROG_SH:%=$(BINDIR)/%)
+
+$(PROG_SH_DESTDIR)/%: $(PLATFORM_SRC)/bin/%.sh
+	@mkdir -p $(BINDIR)
+	rm -f $@
+	cp $< $@
+	chmod +x $@
+
+$(PROG_SH_LINK): $(BINDIR)/.java_wrapper
+	rm -f $(PROG_SH_LINK)
+	cd $(BINDIR) ; \
+	for i in $(PROG_SH) ; do \
+	    ln -s .java_wrapper $$i ; \
+	done
+
+$(BINDIR)/.java_wrapper: $(PLATFORM_SRC)/bin/java_wrapper.sh \
+			 $(PROG_SH_DESTDIR)/.extract_args
+	@mkdir -p $(BINDIR)
+	rm -f $(BINDIR)/.java_wrapper
+	cp $(PLATFORM_SRC)/bin/java_wrapper.sh $(BINDIR)/.java_wrapper
+	chmod +x $(BINDIR)/.java_wrapper
+
+$(PROG_SH_DESTDIR)/.extract_args: $(PLATFORM_SRC)/bin/extract_args.sh
+	@mkdir -p $(PROG_SH_DESTDIR)
+	rm -f $(PROG_SH_DESTDIR)/.extract_args
+	cp $(PLATFORM_SRC)/bin/extract_args.sh $(PROG_SH_DESTDIR)/.extract_args
+
+all install: $(PROG_SH_DEST) $(PROG_SH_LINK)
+
+clean clobber:: 
+	rm -f $(PROG_SH_DEST) $(PROG_SH_LINK)
+
diff --git a/build/solaris/makefiles/mkproject b/build/solaris/makefiles/mkproject
new file mode 100644
index 0000000..f09471a
--- /dev/null
+++ b/build/solaris/makefiles/mkproject
@@ -0,0 +1,140 @@
+#!/bin/sh
+#
+# @(#)mkproject	1.4	97/11/26
+#
+# Copyright (c) 1997 by Sun Microsystems, Inc.
+# All rights reserved.
+#
+# mkproject - make a Java Workshop project file
+#
+USAGE='mkproject [-d classdir] [-p classpath] [-s subdirs] [-c compiler-opts]
+	[-j java-opts] [-m main-class] files ...'
+#
+CLASSDIR=classes
+CLASSPATH=
+SUBDIRS=
+JAVACFLAGS=-g
+JAVAFLAGS=
+MAIN=
+while getopts d:p:s:c:j:m: i
+do
+	case $i in
+	d)	CLASSDIR="$OPTARG";;
+	p)	CLASSPATH="$OPTARG";;
+	s)	SUBDIRS="$OPTARG";;
+	c)	JAVACFLAGS="$OPTARG";;
+	j)	JAVAFLAGS="$OPTARG";;
+	m)	MAIN="$OPTARG";;
+	'?')	echo "$USAGE"; exit 2;;
+	esac
+done
+shift `expr $OPTIND - 1`
+echo sun.jws.version.2
+if [ -n "$MAIN" ]
+then
+	PACKAGE=`expr $MAIN : '\(.*\)\..*'`
+	CLASS=`expr $MAIN : '.*\.\(.*\)'`
+	cat <<-EOF
+	sun.jws.package=$PACKAGE
+	sun.jws.classname=$CLASS
+	sun.jws.type=standalone
+	EOF
+else
+	echo sun.jws.type=package
+fi
+cat <<EOF
+sun.jws.useVisual=false
+sun.jws.classdir=$CLASSDIR
+sun.jws.options=$JAVACFLAGS
+EOF
+if [ -n "$MAIN" ]
+then
+	echo "sun.jws.javaArguments=$JAVAFLAGS"
+	#
+	# Put out the sourcepath, eliminating duplicates and anything
+	# that doesn't look like a source directory.
+	#
+	echo sun.jws.sourcepath=List
+	oldIFS=$IFS
+	IFS=:
+	for i in $CLASSPATH
+	do
+		echo $i
+	done | \
+	awk '
+	    /\/src\//				{ if (!seen[$1]) {
+						    print;
+						    seen[$1] = 1;
+						  }
+						}
+	'
+	IFS=$oldIFS
+	echo EndOfList
+fi
+#
+# Put out the CLASSPATH, eliminating duplicates and anything that looks
+# like the JDK or JRE.
+#
+echo sun.jws.classpath=List
+oldIFS=$IFS
+IFS=:
+for i in $CLASSPATH
+do
+	echo $i
+done | \
+awk '
+    /^\/.*\/java\/lib\/classes\.zip$/	{ next; }
+    /^\/.*\/solaris\/lib\/classes\.zip$/	{ next; }
+    /^\/.*\/jre\/lib\/rt\.jar$/		{ next; }
+					{ if (!seen[$1]) {
+					    print;
+					    seen[$1] = 1;
+					  }
+					}
+'
+IFS=$oldIFS
+echo EndOfList
+#
+# If any subdirectories, put out references to sub-projects.
+#
+if [ -n "$SUBDIRS" ]
+then
+	echo sun.jws.includes=List
+	for i in $SUBDIRS
+	do
+		case $i in
+		tests)	;;	# skip
+		*/*)	echo $i.prj;;
+		*)	echo $i/$i.prj;;
+		esac
+	done
+	echo EndOfList
+fi
+#
+# If any files, list them.
+#
+if [ $# -gt 0 ]
+then
+	echo sun.jws.files=List
+	for i
+	do
+		echo $i
+	done
+	echo EndOfList
+elif [ -n "$MAIN" ]
+then
+	echo sun.jws.files=List
+	MAIN_src=`echo "$MAIN" | sed -e 's:\.:/:g'`.java
+	oldIFS=$IFS
+	IFS=:
+	for i in $CLASSPATH
+	do
+		if [ -f $i/$MAIN_src ]
+		then
+			echo $i/$MAIN_src
+			break
+		fi
+	done
+	IFS=$oldIFS
+	echo EndOfList
+fi
diff --git a/build/solaris/scslize b/build/solaris/scslize
new file mode 100644
index 0000000..316ecdb
--- /dev/null
+++ b/build/solaris/scslize
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# @(#)scslize	1.1 02/04/02
+#
+# A shell script to modify a workspace to make it suitable
+# for the SCSL release of the source.  We get rid of lots
+# of internal-only tests and stuff.
+#
+# First, remove permission for anyone to putback this workspace.
+#
+cd $CODEMGR_WS
+ed - Codemgr_wsdata/access_control <<'EOF'
+/^putback-from/c
+putback-from	-
+.
+w
+q
+EOF
+#
+# Next, remove the files that don't belong here.
+#
+workspace filerm \
+	tests \
+	src/share/classes/javasoft \
+	src/share/classes/test \
+	src/share/doc/spec \
+	build/precompile.jtx \
+	build/solaris/scslize
diff --git a/build/solaris/siggen b/build/solaris/siggen
new file mode 100644
index 0000000..9429339
--- /dev/null
+++ b/build/solaris/siggen
@@ -0,0 +1,16 @@
+#!/bin/sh
+#
+# @(#)siggen	1.5 04/07/13
+#
+# Generate a new signature file.
+#
+# Usage: siggen -in mail.jar -package javax -out mail.sig
+#
+#CLASSPATH=/java/re/jct-tools/2.1.6/archive/fcs/binaries/apiCheck.jar
+# newer version...
+CLASSPATH=/java/re/jct-tools/3.1.4/archive/fcs/binaries/lib/apiCheck.jar
+JAVA_HOME=/java/re/jdk/1.3.1/archive/fcs/binaries/solsparc
+export CLASSPATH JAVA_HOME
+#${JAVA_HOME}/bin/java javasoft.sqe.apiCheck.Setup "$@"
+# options used by CTS...
+${JAVA_HOME}/bin/java javasoft.sqe.apiCheck.Setup -xpriv -constvalues "$@"
diff --git a/build/solaris/sigtest b/build/solaris/sigtest
new file mode 100644
index 0000000..984ab9d
--- /dev/null
+++ b/build/solaris/sigtest
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# @(#)sigtest	1.5 04/07/13
+#
+# Compare API against a signature file.
+#
+# Usage: sigtest -base mail.sig -test mail.jar -package javax
+#		-out report.out -updateout update.out
+#
+#CLASSPATH=/java/re/jct-tools/2.1.6/archive/fcs/binaries/apiCheck.jar
+# newer version...
+CLASSPATH=/java/re/jct-tools/3.1.4/archive/fcs/binaries/lib/apiCheck.jar
+JAVA_HOME=/java/re/jdk/1.3.1/archive/fcs/binaries/solsparc
+export CLASSPATH JAVA_HOME
+${JAVA_HOME}/bin/java javasoft.sqe.apiCheck.Diff "$@"
diff --git a/build/win32/Makefile b/build/win32/Makefile
new file mode 100644
index 0000000..976703f
--- /dev/null
+++ b/build/win32/Makefile
@@ -0,0 +1,115 @@
+#
+# VERSION @(#)Makefile	1.6 97/10/28
+#
+
+PLATFORM = win32
+PACKAGE = javax.activation
+PRODUCT = sun
+
+#
+# important locations
+#
+TOPDIR = ..\..
+BUILD_DIR = $(TOPDIR)\build
+PLATFORM_DIR = $(BUILD_DIR)\$(PLATFORM)
+CLASS_DIR = $(PLATFORM_DIR)\classes
+SRC_DIR = $(TOPDIR)\src\classes
+LIB_DIR = $(PLATFORM_DIR)\lib
+META_INF_DIR = $(PLATFORM_DIR)\classes\META-INF
+SRC_LIB_DIR = $(TOPDIR)\src\lib
+
+#
+# Set JAVA_HOME to _JAVA_HOME if JDK_HOME isn't set. Otherwise, set
+# it to JDK_HOME
+#
+_JAVA_HOME = C:\jdk
+!IF "$(JDK_HOME)" == ""
+JAVA_HOME = $(_JAVA_HOME)
+!ELSE
+JAVA_HOME = $(JDK_HOME)
+!ENDIF
+
+!if "$(OS)" == "Windows_NT"
+DEL = del/f/q
+DELTREE = rmdir/s/q
+!else
+DEL = deltree/y
+DELTREE = deltree/y
+!endif
+
+#
+# the commands to build with
+#
+JAVA = $(JAVA_HOME)\bin\java
+JAVAC = $(JAVA_HOME)\bin\javac -J-mx32m
+JAVADOC = $(JAVA_HOME)\bin\javadoc
+STDCLASSPATH = $(JAVA_HOME)\classes;$(JAVA_HOME)\lib\classes.zip
+
+#
+# define the variables that specify the source files and class files
+#
+!include $(BUILD_DIR)\classes.mk
+
+#
+# the targets
+#
+jaf: classesdir $(JAVAX_CLASSES_LIST) $(COM_SUN_CLASSES_LIST)
+	@echo Jarring...
+	@md $(LIB_DIR)
+	@md $(META_INF_DIR)
+	@xcopy /f $(SRC_LIB_DIR)\mailcap $(META_INF_DIR)
+	@xcopy /f $(SRC_LIB_DIR)\mimetypes $(META_INF_DIR)
+	@cd $(CLASS_DIR)
+
+	@jar cf ..\lib\jaf.jar javax com META-INF
+	@cd ..
+
+test: classesdir $(TEST_CLASSES_LIST)
+
+classesdir:
+	@md $(CLASS_DIR)
+
+all: jaf test
+
+demo: jaf $(DEMO_CLASSES_LIST)
+
+javahome: 
+	@echo JAVA_HOME is $(JAVA_HOME)
+	@$(JAVA) -fullversion
+
+clean:
+	@echo Cleaning...
+	@$(DELTREE) $(CLASS_DIR)
+	@$(DELTREE) $(LIB_DIR)
+
+#
+# Build rules for converting .java files into .class files
+# we have to define implicit rules for each directory since boneheaded
+# nmake doesn't support static pattern rules =(
+#
+.SUFFIXES: .java .class
+
+{$(SRC_DIR)\javax\activation}.java{$(CLASS_DIR)\javax\activation}.class :
+	@echo Compiling $<...
+	@$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $<
+	@echo -----------------------
+
+{$(SRC_DIR)\com\sun\activation\registries}.java{$(CLASS_DIR)\com\sun\activation\registries}.class :
+	@echo Compiling $<...
+	@$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $<
+	@echo -----------------------
+
+{$(SRC_DIR)\com\sun\activation\viewers}.java{$(CLASS_DIR)\com\sun\activation\viewers}.class :
+	@echo Compiling $<...
+	@$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $<
+	@echo -----------------------
+
+{$(SRC_DIR)\com\sun\activation\mime}.java{$(CLASS_DIR)\com\sun\activation\mime}.class :
+	@echo Compiling $<...
+	@$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $<
+	@echo -----------------------
+
+{$(SRC_DIR)\test}.java{$(CLASS_DIR)\test}.class :
+	@echo Compiling $<...
+	@$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $<
+	@echo -----------------------
diff --git a/src/share/classes/com/sun/activation/registries/LogSupport.java b/src/share/classes/com/sun/activation/registries/LogSupport.java
new file mode 100644
index 0000000..fe7aa71
--- /dev/null
+++ b/src/share/classes/com/sun/activation/registries/LogSupport.java
@@ -0,0 +1,85 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)LogSupport.java	1.5 07/05/14
+ */
+
+package com.sun.activation.registries;
+
+import java.io.*;
+import java.util.logging.*;
+
+/**
+ * Logging related methods.
+ */
+public class LogSupport {
+    private static boolean debug = false;
+    private static Logger logger;
+    private static final Level level = Level.FINE;
+
+    static {
+	try {
+	    debug = Boolean.getBoolean("javax.activation.debug");
+	} catch (Throwable t) {
+	    // ignore any errors
+	}
+	logger = Logger.getLogger("javax.activation");
+    }
+
+    /**
+     * Constructor.
+     */
+    private LogSupport() {
+	// private constructor, can't create instances
+    }
+
+    public static void log(String msg) {
+	if (debug)
+	    System.out.println(msg);
+	logger.log(level, msg);
+    }
+
+    public static void log(String msg, Throwable t) {
+	if (debug)
+	    System.out.println(msg + "; Exception: " + t);
+	logger.log(level, msg, t);
+    }
+
+    public static boolean isLoggable() {
+	return debug || logger.isLoggable(level);
+    }
+}
diff --git a/src/share/classes/com/sun/activation/registries/MailcapFile.java b/src/share/classes/com/sun/activation/registries/MailcapFile.java
new file mode 100644
index 0000000..5c31005
--- /dev/null
+++ b/src/share/classes/com/sun/activation/registries/MailcapFile.java
@@ -0,0 +1,578 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MailcapFile.java	1.25 07/05/14
+ */
+
+package com.sun.activation.registries;
+
+import java.io.*;
+import java.util.*;
+
+public class MailcapFile {
+
+    /**
+     * A Map indexed by MIME type (string) that references
+     * a Map of commands for each type.  The comand Map
+     * is indexed by the command name and references a List of
+     * class names (strings) for each command.
+     */
+    private Map type_hash = new HashMap();
+
+    /**
+     * Another Map like above, but for fallback entries.
+     */
+    private Map fallback_hash = new HashMap();
+
+    /**
+     * A Map indexed by MIME type (string) that references
+     * a List of native commands (string) corresponding to the type.
+     */
+    private Map native_commands = new HashMap();
+
+    private static boolean addReverse = false;
+
+    static {
+	try {
+	    addReverse = Boolean.getBoolean("javax.activation.addreverse");
+	} catch (Throwable t) {
+	    // ignore any errors
+	}
+    }
+
+    /**
+     * The constructor that takes a filename as an argument.
+     *
+     * @param new_fname The file name of the mailcap file.
+     */
+    public MailcapFile(String new_fname) throws IOException {
+	if (LogSupport.isLoggable())
+	    LogSupport.log("new MailcapFile: file " + new_fname);
+	FileReader reader = null;
+	try {
+	    reader = new FileReader(new_fname);
+	    parse(new BufferedReader(reader));
+	} finally {
+	    if (reader != null) {
+		try {
+		    reader.close();
+		} catch (IOException ex) { }
+	    }
+	}
+    }
+
+    /**
+     * The constructor that takes an input stream as an argument.
+     *
+     * @param is	the input stream
+     */
+    public MailcapFile(InputStream is) throws IOException {
+	if (LogSupport.isLoggable())
+	    LogSupport.log("new MailcapFile: InputStream");
+	parse(new BufferedReader(new InputStreamReader(is, "iso-8859-1")));
+    }
+
+    /**
+     * Mailcap file default constructor.
+     */
+    public MailcapFile() {
+	if (LogSupport.isLoggable())
+	    LogSupport.log("new MailcapFile: default");
+    }
+
+    /**
+     * Get the Map of MailcapEntries based on the MIME type.
+     *
+     * <p>
+     * <strong>Semantics:</strong> First check for the literal mime type,
+     * if that fails looks for wildcard <type>/\* and return that. Return the
+     * list of all that hit.
+     */
+    public Map getMailcapList(String mime_type) {
+	Map search_result = null;
+	Map wildcard_result = null;
+
+	// first try the literal
+	search_result = (Map)type_hash.get(mime_type);
+
+	// ok, now try the wildcard
+	int separator = mime_type.indexOf('/');
+	String subtype = mime_type.substring(separator + 1);
+	if (!subtype.equals("*")) {
+	    String type = mime_type.substring(0, separator + 1) + "*";
+	    wildcard_result = (Map)type_hash.get(type);
+
+	    if (wildcard_result != null) { // damn, we have to merge!!!
+		if (search_result != null)
+		    search_result =
+			mergeResults(search_result, wildcard_result);
+		else
+		    search_result = wildcard_result;
+	    }
+	}
+	return search_result;
+    }
+
+    /**
+     * Get the Map of fallback MailcapEntries based on the MIME type.
+     *
+     * <p>
+     * <strong>Semantics:</strong> First check for the literal mime type,
+     * if that fails looks for wildcard <type>/\* and return that. Return the
+     * list of all that hit.
+     */
+    public Map getMailcapFallbackList(String mime_type) {
+	Map search_result = null;
+	Map wildcard_result = null;
+
+	// first try the literal
+	search_result = (Map)fallback_hash.get(mime_type);
+
+	// ok, now try the wildcard
+	int separator = mime_type.indexOf('/');
+	String subtype = mime_type.substring(separator + 1);
+	if (!subtype.equals("*")) {
+	    String type = mime_type.substring(0, separator + 1) + "*";
+	    wildcard_result = (Map)fallback_hash.get(type);
+
+	    if (wildcard_result != null) { // damn, we have to merge!!!
+		if (search_result != null)
+		    search_result =
+			mergeResults(search_result, wildcard_result);
+		else
+		    search_result = wildcard_result;
+	    }
+	}
+	return search_result;
+    }
+
+    /**
+     * Return all the MIME types known to this mailcap file.
+     */
+    public String[] getMimeTypes() {
+	Set types = new HashSet(type_hash.keySet());
+	types.addAll(fallback_hash.keySet());
+	types.addAll(native_commands.keySet());
+	String[] mts = new String[types.size()];
+	mts = (String[])types.toArray(mts);
+	return mts;
+    }
+
+    /**
+     * Return all the native comands for the given MIME type.
+     */
+    public String[] getNativeCommands(String mime_type) {
+	String[] cmds = null;
+	List v =
+	    (List)native_commands.get(mime_type.toLowerCase(Locale.ENGLISH));
+	if (v != null) {
+	    cmds = new String[v.size()];
+	    cmds = (String[])v.toArray(cmds);
+	}
+	return cmds;
+    }
+
+    /**
+     * Merge the first hash into the second.
+     * This merge will only effect the hashtable that is
+     * returned, we don't want to touch the one passed in since
+     * its integrity must be maintained.
+     */
+    private Map mergeResults(Map first, Map second) {
+	Iterator verb_enum = second.keySet().iterator();
+	Map clonedHash = new HashMap(first);
+
+	// iterate through the verbs in the second map
+	while (verb_enum.hasNext()) {
+	    String verb = (String)verb_enum.next();
+	    List cmdVector = (List)clonedHash.get(verb);
+	    if (cmdVector == null) {
+		clonedHash.put(verb, second.get(verb));
+	    } else {
+		// merge the two
+		List oldV = (List)second.get(verb);
+		cmdVector = new ArrayList(cmdVector);
+		cmdVector.addAll(oldV);
+		clonedHash.put(verb, cmdVector);
+	    }
+	}
+	return clonedHash;
+    }
+
+    /**
+     * appendToMailcap: Append to this Mailcap DB, use the mailcap
+     * format:
+     * Comment == "# <i>comment string</i>
+     * Entry == "mimetype;        javabeanclass<nl>
+     *
+     * Example:
+     * # this is a comment
+     * image/gif       jaf.viewers.ImageViewer
+     */
+    public void appendToMailcap(String mail_cap) {
+	if (LogSupport.isLoggable())
+	    LogSupport.log("appendToMailcap: " + mail_cap);
+	try {
+	    parse(new StringReader(mail_cap));
+	} catch (IOException ex) {
+	    // can't happen
+	}
+    }
+
+    /**
+     * parse file into a hash table of MC Type Entry Obj
+     */
+    private void parse(Reader reader) throws IOException {
+	BufferedReader buf_reader = new BufferedReader(reader);
+	String line = null;
+	String continued = null;
+
+	while ((line = buf_reader.readLine()) != null) {
+	    //    LogSupport.log("parsing line: " + line);
+
+	    line = line.trim();
+
+	    try {
+		if (line.charAt(0) == '#')
+		    continue;
+		if (line.charAt(line.length() - 1) == '\\') {
+		    if (continued != null)
+			continued += line.substring(0, line.length() - 1);
+		    else
+			continued = line.substring(0, line.length() - 1);
+		} else if (continued != null) {
+		    // handle the two strings
+		    continued = continued + line;
+		    //	LogSupport.log("parse: " + continued);
+		    try {
+			parseLine(continued);
+		    } catch (MailcapParseException e) {
+			//e.printStackTrace();
+		    }
+		    continued = null;
+		}
+		else {
+		    //	LogSupport.log("parse: " + line);
+		    try {
+			parseLine(line);
+			// LogSupport.log("hash.size = " + type_hash.size());
+		    } catch (MailcapParseException e) {
+			//e.printStackTrace();
+		    }
+		}
+	    } catch (StringIndexOutOfBoundsException e) {}
+	}
+    }
+
+    /**
+     *	A routine to parse individual entries in a Mailcap file.
+     *
+     *	Note that this routine does not handle line continuations.
+     *	They should have been handled prior to calling this routine.
+     */
+    protected void parseLine(String mailcapEntry)
+				throws MailcapParseException, IOException {
+	MailcapTokenizer tokenizer = new MailcapTokenizer(mailcapEntry);
+	tokenizer.setIsAutoquoting(false);
+
+	if (LogSupport.isLoggable())
+	    LogSupport.log("parse: " + mailcapEntry);
+	//	parse the primary type
+	int currentToken = tokenizer.nextToken();
+	if (currentToken != MailcapTokenizer.STRING_TOKEN) {
+	    reportParseError(MailcapTokenizer.STRING_TOKEN, currentToken,
+					tokenizer.getCurrentTokenValue());
+	}
+	String primaryType =
+	    tokenizer.getCurrentTokenValue().toLowerCase(Locale.ENGLISH);
+	String subType = "*";
+
+	//	parse the '/' between primary and sub
+	//	if it's not present that's ok, we just don't have a subtype
+	currentToken = tokenizer.nextToken();
+	if ((currentToken != MailcapTokenizer.SLASH_TOKEN) &&
+			(currentToken != MailcapTokenizer.SEMICOLON_TOKEN)) {
+	    reportParseError(MailcapTokenizer.SLASH_TOKEN,
+				MailcapTokenizer.SEMICOLON_TOKEN, currentToken,
+				tokenizer.getCurrentTokenValue());
+	}
+
+	//	only need to look for a sub type if we got a '/'
+	if (currentToken == MailcapTokenizer.SLASH_TOKEN) {
+	    //	parse the sub type
+	    currentToken = tokenizer.nextToken();
+	    if (currentToken != MailcapTokenizer.STRING_TOKEN) {
+		reportParseError(MailcapTokenizer.STRING_TOKEN,
+			    currentToken, tokenizer.getCurrentTokenValue());
+	    }
+	    subType =
+		tokenizer.getCurrentTokenValue().toLowerCase(Locale.ENGLISH);
+
+	    //	get the next token to simplify the next step
+	    currentToken = tokenizer.nextToken();
+	}
+
+	String mimeType = primaryType + "/" + subType;
+
+	if (LogSupport.isLoggable())
+	    LogSupport.log("  Type: " + mimeType);
+
+	//	now setup the commands hashtable
+	Map commands = new LinkedHashMap();	// keep commands in order found
+
+	//	parse the ';' that separates the type from the parameters
+	if (currentToken != MailcapTokenizer.SEMICOLON_TOKEN) {
+	    reportParseError(MailcapTokenizer.SEMICOLON_TOKEN,
+			    currentToken, tokenizer.getCurrentTokenValue());
+	}
+	//	eat it
+
+	//	parse the required view command
+	tokenizer.setIsAutoquoting(true);
+	currentToken = tokenizer.nextToken();
+	tokenizer.setIsAutoquoting(false);
+	if ((currentToken != MailcapTokenizer.STRING_TOKEN) &&
+		    (currentToken != MailcapTokenizer.SEMICOLON_TOKEN)) {
+	    reportParseError(MailcapTokenizer.STRING_TOKEN,
+			    MailcapTokenizer.SEMICOLON_TOKEN, currentToken,
+			    tokenizer.getCurrentTokenValue());
+	}
+
+	if (currentToken == MailcapTokenizer.STRING_TOKEN) {
+	    // have a native comand, save the entire mailcap entry
+	    //String nativeCommand = tokenizer.getCurrentTokenValue();
+	    List v = (List)native_commands.get(mimeType);
+	    if (v == null) {
+		v = new ArrayList();
+		v.add(mailcapEntry);
+		native_commands.put(mimeType, v);
+	    } else {
+		// XXX - check for duplicates?
+		v.add(mailcapEntry);
+	    }
+	}
+
+	//	only have to get the next token if the current one isn't a ';'
+	if (currentToken != MailcapTokenizer.SEMICOLON_TOKEN) {
+	    currentToken = tokenizer.nextToken();
+	}
+
+	// look for a ';' which will indicate whether
+	// a parameter list is present or not
+	if (currentToken == MailcapTokenizer.SEMICOLON_TOKEN) {
+	    boolean isFallback = false;
+	    do {
+		//	eat the ';'
+
+		//	parse the parameter name
+		currentToken = tokenizer.nextToken();
+		if (currentToken != MailcapTokenizer.STRING_TOKEN) {
+		    reportParseError(MailcapTokenizer.STRING_TOKEN,
+			    currentToken, tokenizer.getCurrentTokenValue());
+		}
+		String paramName = tokenizer.getCurrentTokenValue().
+						toLowerCase(Locale.ENGLISH);
+
+		//	parse the '=' which separates the name from the value
+		currentToken = tokenizer.nextToken();
+		if ((currentToken != MailcapTokenizer.EQUALS_TOKEN) &&
+		    (currentToken != MailcapTokenizer.SEMICOLON_TOKEN) &&
+		    (currentToken != MailcapTokenizer.EOI_TOKEN)) {
+		    reportParseError(MailcapTokenizer.EQUALS_TOKEN,
+			    MailcapTokenizer.SEMICOLON_TOKEN,
+			    MailcapTokenizer.EOI_TOKEN,
+			    currentToken, tokenizer.getCurrentTokenValue());
+		}
+
+		//	we only have a useful command if it is named
+		if (currentToken == MailcapTokenizer.EQUALS_TOKEN) {
+		    //	eat it
+
+		    //	parse the parameter value (which is autoquoted)
+		    tokenizer.setIsAutoquoting(true);
+		    currentToken = tokenizer.nextToken();
+		    tokenizer.setIsAutoquoting(false);
+		    if (currentToken != MailcapTokenizer.STRING_TOKEN) {
+			reportParseError(MailcapTokenizer.STRING_TOKEN,
+			currentToken, tokenizer.getCurrentTokenValue());
+		    }
+		    String paramValue =
+				tokenizer.getCurrentTokenValue();
+
+		    // add the class to the list iff it is one we care about
+		    if (paramName.startsWith("x-java-")) {
+			String commandName = paramName.substring(7);
+			//	7 == "x-java-".length
+
+			if (commandName.equals("fallback-entry") &&
+			    paramValue.equalsIgnoreCase("true")) {
+			    isFallback = true;
+			} else {
+
+			    //	setup the class entry list
+			    if (LogSupport.isLoggable())
+				LogSupport.log("    Command: " + commandName +
+						    ", Class: " + paramValue);
+			    List classes = (List)commands.get(commandName);
+			    if (classes == null) {
+				classes = new ArrayList();
+				commands.put(commandName, classes);
+			    }
+			    if (addReverse)
+				classes.add(0, paramValue);
+			    else
+				classes.add(paramValue);
+			}
+		    }
+
+		    //	set up the next iteration
+		    currentToken = tokenizer.nextToken();
+		}
+	    } while (currentToken == MailcapTokenizer.SEMICOLON_TOKEN);
+
+	    Map masterHash = isFallback ? fallback_hash : type_hash;
+	    Map curcommands =
+		(Map)masterHash.get(mimeType);
+	    if (curcommands == null) {
+		masterHash.put(mimeType, commands);
+	    } else {
+		if (LogSupport.isLoggable())
+		    LogSupport.log("Merging commands for type " + mimeType);
+		// have to merge current and new commands
+		// first, merge list of classes for commands already known
+		Iterator cn = curcommands.keySet().iterator();
+		while (cn.hasNext()) {
+		    String cmdName = (String)cn.next();
+		    List ccv = (List)curcommands.get(cmdName);
+		    List cv = (List)commands.get(cmdName);
+		    if (cv == null)
+			continue;
+		    // add everything in cv to ccv, if it's not already there
+		    Iterator cvn = cv.iterator();
+		    while (cvn.hasNext()) {
+			String clazz = (String)cvn.next();
+			if (!ccv.contains(clazz))
+			    if (addReverse)
+				ccv.add(0, clazz);
+			    else
+				ccv.add(clazz);
+		    }
+		}
+		// now, add commands not previously known
+		cn = commands.keySet().iterator();
+		while (cn.hasNext()) {
+		    String cmdName = (String)cn.next();
+		    if (curcommands.containsKey(cmdName))
+			continue;
+		    List cv = (List)commands.get(cmdName);
+		    curcommands.put(cmdName, cv);
+		}
+	    }
+	} else if (currentToken != MailcapTokenizer.EOI_TOKEN) {
+	    reportParseError(MailcapTokenizer.EOI_TOKEN,
+		MailcapTokenizer.SEMICOLON_TOKEN,
+		currentToken, tokenizer.getCurrentTokenValue());
+	}
+     }
+
+     protected static void reportParseError(int expectedToken, int actualToken,
+		String actualTokenValue) throws MailcapParseException {
+     	throw new MailcapParseException("Encountered a " +
+		MailcapTokenizer.nameForToken(actualToken) + " token (" +
+		actualTokenValue + ") while expecting a " +
+		MailcapTokenizer.nameForToken(expectedToken) + " token.");
+     }
+
+     protected static void reportParseError(int expectedToken,
+	int otherExpectedToken, int actualToken, String actualTokenValue)
+					throws MailcapParseException {
+     	throw new MailcapParseException("Encountered a " +
+		MailcapTokenizer.nameForToken(actualToken) + " token (" +
+		actualTokenValue + ") while expecting a " +
+		MailcapTokenizer.nameForToken(expectedToken) + " or a " +
+		MailcapTokenizer.nameForToken(otherExpectedToken) + " token.");
+     }
+
+     protected static void reportParseError(int expectedToken,
+	    int otherExpectedToken, int anotherExpectedToken, int actualToken,
+	    String actualTokenValue) throws MailcapParseException {
+	if (LogSupport.isLoggable())
+	    LogSupport.log("PARSE ERROR: " + "Encountered a " +
+		MailcapTokenizer.nameForToken(actualToken) + " token (" +
+		actualTokenValue + ") while expecting a " +
+		MailcapTokenizer.nameForToken(expectedToken) + ", a " +
+		MailcapTokenizer.nameForToken(otherExpectedToken) + ", or a " +
+		MailcapTokenizer.nameForToken(anotherExpectedToken) + " token.");
+     	throw new MailcapParseException("Encountered a " +
+		MailcapTokenizer.nameForToken(actualToken) + " token (" +
+		actualTokenValue + ") while expecting a " +
+		MailcapTokenizer.nameForToken(expectedToken) + ", a " +
+		MailcapTokenizer.nameForToken(otherExpectedToken) + ", or a " +
+		MailcapTokenizer.nameForToken(anotherExpectedToken) + " token.");
+     }
+
+     /** for debugging
+     public static void	main(String[] args) throws Exception {
+     	Map masterHash = new HashMap();
+     	for (int i = 0; i < args.length; ++i) {
+	    System.out.println("Entry " + i + ": " + args[i]);
+	    parseLine(args[i], masterHash);
+     	}
+
+     	Enumeration types = masterHash.keys();
+     	while (types.hasMoreElements()) {
+	    String key = (String)types.nextElement();
+	    System.out.println("MIME Type: " + key);
+
+	    Map commandHash = (Map)masterHash.get(key);
+	    Enumeration commands = commandHash.keys();
+	    while (commands.hasMoreElements()) {
+		String command = (String)commands.nextElement();
+		System.out.println("    Command: " + command);
+
+		Vector classes = (Vector)commandHash.get(command);
+		for (int i = 0; i < classes.size(); ++i) {
+			System.out.println("        Class: " +
+					    (String)classes.elementAt(i));
+		}
+	    }
+
+	    System.out.println("");
+	}
+    }
+    */
+}
diff --git a/src/share/classes/com/sun/activation/registries/MailcapParseException.java b/src/share/classes/com/sun/activation/registries/MailcapParseException.java
new file mode 100644
index 0000000..9092c11
--- /dev/null
+++ b/src/share/classes/com/sun/activation/registries/MailcapParseException.java
@@ -0,0 +1,55 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MailcapParseException.java	1.5 07/05/14
+ */
+
+package	com.sun.activation.registries;
+
+/**
+ *	A class to encapsulate Mailcap parsing related exceptions
+ */
+public class MailcapParseException extends Exception {
+
+    public MailcapParseException() {
+	super();
+    }
+
+    public MailcapParseException(String inInfo) {
+	super(inInfo);
+    }
+}
diff --git a/src/share/classes/com/sun/activation/registries/MailcapTokenizer.java b/src/share/classes/com/sun/activation/registries/MailcapTokenizer.java
new file mode 100644
index 0000000..01631f8
--- /dev/null
+++ b/src/share/classes/com/sun/activation/registries/MailcapTokenizer.java
@@ -0,0 +1,337 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MailcapTokenizer.java	1.8 07/05/14
+ */
+
+package	com.sun.activation.registries;
+
+/**
+ *	A tokenizer for strings in the form of "foo/bar; prop1=val1; ... ".
+ *	Useful for parsing MIME content types.
+ */
+public class MailcapTokenizer {
+
+    public static final int UNKNOWN_TOKEN = 0;
+    public static final int START_TOKEN = 1;
+    public static final int STRING_TOKEN = 2;
+    public static final int EOI_TOKEN = 5;
+    public static final int SLASH_TOKEN = '/';
+    public static final int SEMICOLON_TOKEN = ';';
+    public static final int EQUALS_TOKEN = '=';
+
+    /**
+     *  Constructor
+     *
+     *  @parameter  inputString the string to tokenize
+     */
+    public MailcapTokenizer(String inputString) {
+	data = inputString;
+	dataIndex = 0;
+	dataLength = inputString.length();
+
+	currentToken = START_TOKEN;
+	currentTokenValue = "";
+
+	isAutoquoting = false;
+	autoquoteChar = ';';
+    }
+
+    /**
+     *  Set whether auto-quoting is on or off.
+     *
+     *  Auto-quoting means that all characters after the first
+     *  non-whitespace, non-control character up to the auto-quote
+     *  terminator character or EOI (minus any whitespace immediatley
+     *  preceeding it) is considered a token.
+     *
+     *  This is required for handling command strings in a mailcap entry.
+     */
+    public void setIsAutoquoting(boolean value) {
+	isAutoquoting = value;
+    }
+
+    /**
+     *  Retrieve current token.
+     *
+     *  @returns    The current token value
+     */
+    public int getCurrentToken() {
+	return currentToken;
+    }
+
+    /*
+     *  Get a String that describes the given token.
+     */
+    public static String nameForToken(int token) {
+	String name = "really unknown";
+
+	switch(token) {
+	    case UNKNOWN_TOKEN:
+		name = "unknown";
+		break;
+	    case START_TOKEN:
+		name = "start";
+		break;
+	    case STRING_TOKEN:
+		name = "string";
+		break;
+	    case EOI_TOKEN:
+		name = "EOI";
+		break;
+	    case SLASH_TOKEN:
+		name = "'/'";
+		break;
+	    case SEMICOLON_TOKEN:
+		name = "';'";
+		break;
+	    case EQUALS_TOKEN:
+		name = "'='";
+		break;
+	}
+
+	return name;
+    }
+
+    /*
+     *  Retrieve current token value.
+     *
+     *  @returns    A String containing the current token value
+     */
+    public String getCurrentTokenValue() {
+	return currentTokenValue;
+    }
+
+    /*
+     *  Process the next token.
+     *
+     *  @returns    the next token
+     */
+    public int nextToken() {
+	if (dataIndex < dataLength) {
+	    //  skip white space
+	    while ((dataIndex < dataLength) &&
+		    (isWhiteSpaceChar(data.charAt(dataIndex)))) {
+		++dataIndex;
+	    }
+
+	    if (dataIndex < dataLength) {
+		//  examine the current character and see what kind of token we have
+		char c = data.charAt(dataIndex);
+		if (isAutoquoting) {
+		    if (c == ';' || c == '=') {
+			currentToken = c;
+			currentTokenValue = new Character(c).toString();
+			++dataIndex;
+		    } else {
+			processAutoquoteToken();
+		    }
+		} else {
+		    if (isStringTokenChar(c)) {
+			processStringToken();
+		    } else if ((c == '/') || (c == ';') || (c == '=')) {
+			currentToken = c;
+			currentTokenValue = new Character(c).toString();
+			++dataIndex;
+		    } else {
+			currentToken = UNKNOWN_TOKEN;
+			currentTokenValue = new Character(c).toString();
+			++dataIndex;
+		    }
+		}
+	    } else {
+		currentToken = EOI_TOKEN;
+		currentTokenValue = null;
+	    }
+	} else {
+	    currentToken = EOI_TOKEN;
+	    currentTokenValue = null;
+	}
+
+	return currentToken;
+    }
+
+    private void processStringToken() {
+	//  capture the initial index
+	int initialIndex = dataIndex;
+
+	//  skip to 1st non string token character
+	while ((dataIndex < dataLength) &&
+		isStringTokenChar(data.charAt(dataIndex))) {
+	    ++dataIndex;
+	}
+
+	currentToken = STRING_TOKEN;
+	currentTokenValue = data.substring(initialIndex, dataIndex);
+    }
+
+    private void processAutoquoteToken() {
+	//  capture the initial index
+	int initialIndex = dataIndex;
+
+	//  now skip to the 1st non-escaped autoquote termination character
+	//  XXX - doesn't actually consider escaping
+	boolean foundTerminator = false;
+	while ((dataIndex < dataLength) && !foundTerminator) {
+	    char c = data.charAt(dataIndex);
+	    if (c != autoquoteChar) {
+		++dataIndex;
+	    } else {
+		foundTerminator = true;
+	    }
+	}
+
+	currentToken = STRING_TOKEN;
+	currentTokenValue =
+	    fixEscapeSequences(data.substring(initialIndex, dataIndex));
+    }
+
+    private static boolean isSpecialChar(char c) {
+	boolean lAnswer = false;
+
+	switch(c) {
+	    case '(':
+	    case ')':
+	    case '<':
+	    case '>':
+	    case '@':
+	    case ',':
+	    case ';':
+	    case ':':
+	    case '\\':
+	    case '"':
+	    case '/':
+	    case '[':
+	    case ']':
+	    case '?':
+	    case '=':
+		lAnswer = true;
+		break;
+	}
+
+	return lAnswer;
+    }
+
+    private static boolean isControlChar(char c) {
+	return Character.isISOControl(c);
+    }
+
+    private static boolean isWhiteSpaceChar(char c) {
+	return Character.isWhitespace(c);
+    }
+
+    private static boolean isStringTokenChar(char c) {
+	return !isSpecialChar(c) && !isControlChar(c) && !isWhiteSpaceChar(c);
+    }
+
+    private static String fixEscapeSequences(String inputString) {
+	int inputLength = inputString.length();
+	StringBuffer buffer = new StringBuffer();
+	buffer.ensureCapacity(inputLength);
+
+	for (int i = 0; i < inputLength; ++i) {
+	    char currentChar = inputString.charAt(i);
+	    if (currentChar != '\\') {
+		buffer.append(currentChar);
+	    } else {
+		if (i < inputLength - 1) {
+		    char nextChar = inputString.charAt(i + 1);
+		    buffer.append(nextChar);
+
+		    //  force a skip over the next character too
+		    ++i;
+		} else {
+		    buffer.append(currentChar);
+		}
+	    }
+	}
+
+	return buffer.toString();
+    }
+
+    private String  data;
+    private int     dataIndex;
+    private int     dataLength;
+    private int     currentToken;
+    private String  currentTokenValue;
+    private boolean isAutoquoting;
+    private char    autoquoteChar;
+
+    /*
+    public static void main(String[] args) {
+	for (int i = 0; i < args.length; ++i) {
+	    MailcapTokenizer tokenizer = new MailcapTokenizer(args[i]);
+
+	    System.out.println("Original: |" + args[i] + "|");
+
+	    int currentToken = tokenizer.nextToken();
+	    while (currentToken != EOI_TOKEN) {
+		switch(currentToken) {
+		    case UNKNOWN_TOKEN:
+			System.out.println("  Unknown Token:           |" + tokenizer.getCurrentTokenValue() + "|");
+			break;
+		    case START_TOKEN:
+			System.out.println("  Start Token:             |" + tokenizer.getCurrentTokenValue() + "|");
+			break;
+		    case STRING_TOKEN:
+			System.out.println("  String Token:            |" + tokenizer.getCurrentTokenValue() + "|");
+			break;
+		    case EOI_TOKEN:
+			System.out.println("  EOI Token:               |" + tokenizer.getCurrentTokenValue() + "|");
+			break;
+		    case SLASH_TOKEN:
+			System.out.println("  Slash Token:             |" + tokenizer.getCurrentTokenValue() + "|");
+			break;
+		    case SEMICOLON_TOKEN:
+			System.out.println("  Semicolon Token:         |" + tokenizer.getCurrentTokenValue() + "|");
+			break;
+		    case EQUALS_TOKEN:
+			System.out.println("  Equals Token:            |" + tokenizer.getCurrentTokenValue() + "|");
+			break;
+		    default:
+			System.out.println("  Really Unknown Token:    |" + tokenizer.getCurrentTokenValue() + "|");
+			break;
+		}
+
+		currentToken = tokenizer.nextToken();
+	    }
+
+	    System.out.println("");
+	}
+    }
+    */
+}
diff --git a/src/share/classes/com/sun/activation/registries/MimeTypeEntry.java b/src/share/classes/com/sun/activation/registries/MimeTypeEntry.java
new file mode 100644
index 0000000..51fec2a
--- /dev/null
+++ b/src/share/classes/com/sun/activation/registries/MimeTypeEntry.java
@@ -0,0 +1,65 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MimeTypeEntry.java	1.5 07/05/14
+ */
+
+package com.sun.activation.registries;
+
+import java.lang.*;
+
+public class MimeTypeEntry {
+    private String type;
+    private String extension;
+
+    public MimeTypeEntry(String mime_type, String file_ext) {
+	type = mime_type;
+	extension = file_ext;
+    }
+
+    public String getMIMEType() {
+	return type;
+    }
+
+    public String getFileExtension() {
+	return extension;
+    }
+
+    public String toString() {
+	return "MIMETypeEntry: " + type + ", " + extension;
+    }
+}
diff --git a/src/share/classes/com/sun/activation/registries/MimeTypeFile.java b/src/share/classes/com/sun/activation/registries/MimeTypeFile.java
new file mode 100644
index 0000000..0574266
--- /dev/null
+++ b/src/share/classes/com/sun/activation/registries/MimeTypeFile.java
@@ -0,0 +1,332 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MimeTypeFile.java	1.9 07/05/14
+ */
+
+package com.sun.activation.registries;
+
+import java.io.*;
+import java.util.*;
+
+public class MimeTypeFile {
+    private String fname = null;
+    private Hashtable type_hash = new Hashtable();
+
+    /**
+     * The construtor that takes a filename as an argument.
+     *
+     * @param new_fname The file name of the mime types file.
+     */
+    public MimeTypeFile(String new_fname) throws IOException {
+	File mime_file = null;
+	FileReader fr = null;
+
+	fname = new_fname; // remember the file name
+
+	mime_file = new File(fname); // get a file object
+
+	fr = new FileReader(mime_file);
+
+	try {
+	    parse(new BufferedReader(fr));
+	} finally {
+	    try {
+		fr.close(); // close it
+	    } catch (IOException e) {
+		// ignore it
+	    }
+	}
+    }
+
+    public MimeTypeFile(InputStream is) throws IOException {
+	parse(new BufferedReader(new InputStreamReader(is, "iso-8859-1")));
+    }
+
+    /**
+     * Creates an empty DB.
+     */
+    public MimeTypeFile() {
+    }
+
+    /**
+     * get the MimeTypeEntry based on the file extension
+     */
+    public MimeTypeEntry getMimeTypeEntry(String file_ext) {
+	return (MimeTypeEntry)type_hash.get((Object)file_ext);
+    }
+
+    /**
+     * Get the MIME type string corresponding to the file extension.
+     */
+    public String getMIMETypeString(String file_ext) {
+	MimeTypeEntry entry = this.getMimeTypeEntry(file_ext);
+
+	if (entry != null)
+	    return entry.getMIMEType();
+	else
+	    return null;
+    }
+
+    /**
+     * Appends string of entries to the types registry, must be valid
+     * .mime.types format.
+     * A mime.types entry is one of two forms:
+     *
+     *	type/subtype	ext1 ext2 ...
+     * or
+     *	type=type/subtype desc="description of type" exts=ext1,ext2,...
+     *
+     * Example:
+     * # this is a test
+     * audio/basic            au
+     * text/plain             txt text
+     * type=application/postscript exts=ps,eps
+     */
+    public void appendToRegistry(String mime_types) {
+	try {
+	    parse(new BufferedReader(new StringReader(mime_types)));
+	} catch (IOException ex) {
+	    // can't happen
+	}
+    }
+
+    /**
+     * Parse a stream of mime.types entries.
+     */
+    private void parse(BufferedReader buf_reader) throws IOException {
+	String line = null, prev = null;
+
+	while ((line = buf_reader.readLine()) != null) {
+	    if (prev == null)
+		prev = line;
+	    else
+		prev += line;
+	    int end = prev.length();
+	    if (prev.length() > 0 && prev.charAt(end - 1) == '\\') {
+		prev = prev.substring(0, end - 1);
+		continue;
+	    }
+	    this.parseEntry(prev);
+	    prev = null;
+	}
+	if (prev != null)
+	    this.parseEntry(prev);
+    }
+
+    /**
+     * Parse single mime.types entry.
+     */
+    private void parseEntry(String line) {
+	String mime_type = null;
+	String file_ext = null;
+	line = line.trim();
+
+	if (line.length() == 0) // empty line...
+	    return; // BAIL!
+
+	// check to see if this is a comment line?
+	if (line.charAt(0) == '#')
+	    return; // then we are done!
+
+	// is it a new format line or old format?
+	if (line.indexOf('=') > 0) {
+	    // new format
+	    LineTokenizer lt = new LineTokenizer(line);
+	    while (lt.hasMoreTokens()) {
+		String name = lt.nextToken();
+		String value = null;
+		if (lt.hasMoreTokens() && lt.nextToken().equals("=") &&
+							lt.hasMoreTokens())
+		    value = lt.nextToken();
+		if (value == null) {
+		    if (LogSupport.isLoggable())
+			LogSupport.log("Bad .mime.types entry: " + line);
+		    return;
+		}
+		if (name.equals("type"))
+		    mime_type = value;
+		else if (name.equals("exts")) {
+		    StringTokenizer st = new StringTokenizer(value, ",");
+		    while (st.hasMoreTokens()) {
+			file_ext = st.nextToken();
+			MimeTypeEntry entry =
+				new MimeTypeEntry(mime_type, file_ext);
+			type_hash.put(file_ext, entry);
+			if (LogSupport.isLoggable())
+			    LogSupport.log("Added: " + entry.toString());
+		    }
+		}
+	    }
+	} else {
+	    // old format
+	    // count the tokens
+	    StringTokenizer strtok = new StringTokenizer(line);
+	    int num_tok = strtok.countTokens();
+
+	    if (num_tok == 0) // empty line
+		return;
+
+	    mime_type = strtok.nextToken(); // get the MIME type
+
+	    while (strtok.hasMoreTokens()) {
+		MimeTypeEntry entry = null;
+
+		file_ext = strtok.nextToken();
+		entry = new MimeTypeEntry(mime_type, file_ext);
+		type_hash.put(file_ext, entry);
+		if (LogSupport.isLoggable())
+		    LogSupport.log("Added: " + entry.toString());
+	    }
+	}
+    }
+
+    // for debugging
+    /*
+    public static void main(String[] argv) throws Exception {
+	MimeTypeFile mf = new MimeTypeFile(argv[0]);
+	System.out.println("ext " + argv[1] + " type " +
+						mf.getMIMETypeString(argv[1]));
+	System.exit(0);
+    }
+    */
+}
+
+class LineTokenizer {
+    private int currentPosition;
+    private int maxPosition;
+    private String str;
+    private Vector stack = new Vector();
+    private static final String singles = "=";	// single character tokens
+
+    /**
+     * Constructs a tokenizer for the specified string.
+     * <p>
+     *
+     * @param   str            a string to be parsed.
+     */
+    public LineTokenizer(String str) {
+	currentPosition = 0;
+	this.str = str;
+	maxPosition = str.length();
+    }
+
+    /**
+     * Skips white space.
+     */
+    private void skipWhiteSpace() {
+	while ((currentPosition < maxPosition) &&
+	       Character.isWhitespace(str.charAt(currentPosition))) {
+	    currentPosition++;
+	}
+    }
+
+    /**
+     * Tests if there are more tokens available from this tokenizer's string.
+     *
+     * @return  <code>true</code> if there are more tokens available from this
+     *          tokenizer's string; <code>false</code> otherwise.
+     */
+    public boolean hasMoreTokens() {
+	if (stack.size() > 0)
+	    return true;
+	skipWhiteSpace();
+	return (currentPosition < maxPosition);
+    }
+
+    /**
+     * Returns the next token from this tokenizer.
+     *
+     * @return     the next token from this tokenizer.
+     * @exception  NoSuchElementException  if there are no more tokens in this
+     *               tokenizer's string.
+     */
+    public String nextToken() {
+	int size = stack.size();
+	if (size > 0) {
+	    String t = (String)stack.elementAt(size - 1);
+	    stack.removeElementAt(size - 1);
+	    return t;
+	}
+	skipWhiteSpace();
+
+	if (currentPosition >= maxPosition) {
+	    throw new NoSuchElementException();
+	}
+
+	int start = currentPosition;
+	char c = str.charAt(start);
+	if (c == '"') {
+	    currentPosition++;
+	    boolean filter = false;
+	    while (currentPosition < maxPosition) {
+		c = str.charAt(currentPosition++);
+		if (c == '\\') {
+		    currentPosition++;
+		    filter = true;
+		} else if (c == '"') {
+		    String s;
+
+		    if (filter) {
+			StringBuffer sb = new StringBuffer();
+			for (int i = start + 1; i < currentPosition - 1; i++) {
+			    c = str.charAt(i);
+			    if (c != '\\')
+				sb.append(c);
+			}
+			s = sb.toString();
+		    } else
+			s = str.substring(start + 1, currentPosition - 1);
+		    return s;
+		}
+	    }
+	} else if (singles.indexOf(c) >= 0) {
+	    currentPosition++;
+	} else {
+	    while ((currentPosition < maxPosition) && 
+		   singles.indexOf(str.charAt(currentPosition)) < 0 &&
+		   !Character.isWhitespace(str.charAt(currentPosition))) {
+		currentPosition++;
+	    }
+	}
+	return str.substring(start, currentPosition);
+    }
+
+    public void pushToken(String token) {
+	stack.addElement(token);
+    }
+}
diff --git a/src/share/classes/com/sun/activation/viewers/ImageViewer.java b/src/share/classes/com/sun/activation/viewers/ImageViewer.java
new file mode 100644
index 0000000..491ef21
--- /dev/null
+++ b/src/share/classes/com/sun/activation/viewers/ImageViewer.java
@@ -0,0 +1,138 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)ImageViewer.java	1.9 07/05/14
+ */
+
+package com.sun.activation.viewers;
+
+import java.awt.*;
+import java.io.*;
+import java.beans.*;
+import javax.activation.*;
+
+public class ImageViewer extends Panel implements CommandObject {
+    // UI Vars...
+    private ImageViewerCanvas canvas = null;
+    
+    // File Vars
+    //    private InputStream data_ins = null;
+    private Image image = null;
+    private DataHandler _dh = null;
+    
+    private boolean DEBUG = false;
+    /**
+     * Constructor
+     */
+    public ImageViewer(){
+	
+	// create the ImageViewerCanvas
+	canvas = new ImageViewerCanvas();
+	add(canvas);
+    }
+    /**
+     * Set the DataHandler for this CommandObject
+     * @param DataHandler the DataHandler
+     */
+    public void setCommandContext(String verb, DataHandler dh)	throws IOException{
+	_dh = dh;
+	this.setInputStream( _dh.getInputStream() );
+    }
+    //--------------------------------------------------------------------
+    
+    /**
+     * Set the data stream, component to assume it is ready to
+     * be read.
+     */
+    private void setInputStream(InputStream ins) throws IOException {
+	MediaTracker mt = new MediaTracker(this);
+	int bytes_read = 0;
+	byte data[] = new byte[1024];
+	ByteArrayOutputStream baos = new ByteArrayOutputStream();
+	
+	while((bytes_read = ins.read(data)) >0)
+	    baos.write(data, 0, bytes_read);
+	ins.close();
+	
+	// convert the buffer into an image
+	image = getToolkit().createImage(baos.toByteArray());
+	
+	mt.addImage(image, 0);
+	
+	try {
+	    mt.waitForID(0);
+	    mt.waitForAll();
+	    if(mt.statusID(0, true ) != MediaTracker.COMPLETE){
+		System.out.println("Error occured in image loading = " +
+				   mt.getErrorsID(0));
+		
+	    }
+	    
+	}
+	catch(InterruptedException e) {
+	    throw new IOException("Error reading image data");
+	}
+	
+	canvas.setImage(image);
+	if(DEBUG)
+	    System.out.println("calling invalidate");
+	
+    }
+    //--------------------------------------------------------------------
+    public void addNotify(){
+	super.addNotify(); // call the real one first...
+	this.invalidate();
+	this.validate();
+	this.doLayout();
+    }
+    //--------------------------------------------------------------------
+    public Dimension getPreferredSize(){
+	return canvas.getPreferredSize();
+    }
+
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/share/classes/com/sun/activation/viewers/ImageViewerCanvas.java b/src/share/classes/com/sun/activation/viewers/ImageViewerCanvas.java
new file mode 100644
index 0000000..9d939b4
--- /dev/null
+++ b/src/share/classes/com/sun/activation/viewers/ImageViewerCanvas.java
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)ImageViewerCanvas.java	1.4 07/05/14
+ */
+
+package com.sun.activation.viewers;
+
+import java.awt.*;
+
+public class ImageViewerCanvas extends Canvas
+{
+  private Image canvas_image = null;
+  
+  /**
+   * The constructor
+   */
+  public ImageViewerCanvas()
+    {
+	
+    }
+
+  /**
+   * set the image
+   */
+  public void setImage(Image new_image)
+    {
+      canvas_image = new_image;
+      this.invalidate();
+      this.repaint();
+    }
+  
+  /**
+   * getPreferredSize
+   */
+  public Dimension getPreferredSize()
+    {
+      Dimension d = null;
+      
+      if(canvas_image == null)
+	{
+	  d = new Dimension(200, 200);
+	}
+      else
+	d = new Dimension(canvas_image.getWidth(this), 
+			  canvas_image.getHeight(this));
+
+      return d;
+    }
+  /**
+   * paint method
+   */
+  public void paint(Graphics g)
+    {
+
+      if(canvas_image != null)
+	g.drawImage(canvas_image, 0, 0, this);
+
+    }
+  
+}
diff --git a/src/share/classes/com/sun/activation/viewers/TextEditor.java b/src/share/classes/com/sun/activation/viewers/TextEditor.java
new file mode 100644
index 0000000..94518ff
--- /dev/null
+++ b/src/share/classes/com/sun/activation/viewers/TextEditor.java
@@ -0,0 +1,203 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)TextEditor.java	1.10 07/07/13
+ */
+
+package com.sun.activation.viewers;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.*;
+import java.beans.*;
+import javax.activation.*;
+
+public class TextEditor extends Panel implements CommandObject,
+    ActionListener {
+	// UI Vars...
+    private TextArea text_area = null;
+    private GridBagLayout panel_gb = null;
+    private Panel button_panel = null;
+    private Button save_button = null;
+	// File Vars
+    private File text_file = null;
+    private String text_buffer = null;
+    private InputStream data_ins = null;
+    private FileInputStream fis = null;
+	
+    private DataHandler _dh = null;
+    private boolean DEBUG = false;
+	/**
+	 * Constructor
+	 */
+    public TextEditor() {
+	panel_gb = new GridBagLayout();
+	setLayout(panel_gb);
+	
+	button_panel = new Panel();
+	//	button_panel.setBackground(Color.white);
+	button_panel.setLayout( new FlowLayout() );
+	save_button = new Button("SAVE");
+	button_panel.add(save_button);
+	addGridComponent(this,
+			 button_panel,
+			 panel_gb,
+			 0,0,
+			 1,1,
+			 1,0);
+	
+	// create the text area
+	text_area = new TextArea("This is text",24, 80, 
+				 TextArea.SCROLLBARS_VERTICAL_ONLY );
+	//	text_area.setBackground(Color.lightGray);
+	text_area.setEditable( true );
+	
+	addGridComponent(this,
+			 text_area,
+			 panel_gb,
+			 0,1,
+			 1,2,
+			 1,1);
+	
+	// add listeners
+	save_button.addActionListener( this );
+	
+    }
+
+    ////////////////////////////////////////////////////////////////////////
+	/**
+	 * adds a component to our gridbag layout
+	 */
+    private void addGridComponent(Container cont, 
+				  Component comp,
+				  GridBagLayout mygb,
+				  int gridx,
+				  int gridy, 
+				  int gridw,
+				  int gridh,
+				  int weightx,
+				  int weighty) { 
+	GridBagConstraints c = new GridBagConstraints(); 
+	c.gridx = gridx; 
+	c.gridy = gridy; 
+	c.gridwidth = gridw; 
+	c.gridheight = gridh; 
+	c.fill = GridBagConstraints.BOTH;
+	c.weighty = weighty;
+	c.weightx = weightx;
+	c.anchor =  GridBagConstraints.CENTER;
+	mygb.setConstraints(comp, c); 
+	cont.add(comp); 
+    }
+	
+  //--------------------------------------------------------------------
+    public void setCommandContext(String verb, DataHandler dh) throws IOException {
+	_dh = dh;
+	this.setInputStream( _dh.getInputStream() );
+
+    }
+  //--------------------------------------------------------------------
+
+  /**
+   * set the data stream, component to assume it is ready to
+   * be read.
+   */
+    public void setInputStream(InputStream ins) throws IOException {
+	
+	byte data[] = new byte[1024];
+	ByteArrayOutputStream baos = new ByteArrayOutputStream();
+	int bytes_read = 0;
+	// check that we can actually read
+	
+	while((bytes_read = ins.read(data)) >0)
+	    baos.write(data, 0, bytes_read);
+	ins.close();
+
+      
+	// convert the buffer into a string
+	// popuplate the buffer
+	text_buffer = baos.toString();
+
+	// place in the text area
+	text_area.setText(text_buffer);
+    }
+    ///////////////////////////////////////////////////////////////////////
+    private void performSaveOperation(){
+	OutputStream fos = null;
+	try {
+	    fos = _dh.getOutputStream();
+	} catch (Exception e) {}
+	
+	String buffer = text_area.getText();
+	
+	// make sure we got one
+	if(fos == null) {
+	    System.out.println("Invalid outputstream in TextEditor!");
+	    System.out.println("not saving!");
+	    return;
+	}
+	
+	try {
+	    fos.write( buffer.getBytes() );
+	    fos.flush(); // flush it!
+	    fos.close(); // close it!
+	} catch(IOException e)
+	    {
+		System.out.println("TextEditor Save Operation failed with: " + e);
+	    }
+	
+    }
+  //--------------------------------------------------------------------
+    public void addNotify() {
+	super.addNotify();
+	invalidate();
+    }
+  //--------------------------------------------------------------------
+    public Dimension getPreferredSize()	{
+	return text_area.getMinimumSize(24, 80);
+    }
+	/////////////////////////////////////////////////////////////////////
+	// for ActionListener
+    public void actionPerformed(ActionEvent evt){
+	if(evt.getSource() == save_button) { // save button pressed!
+	    
+	    // Save ourselves
+	    this.performSaveOperation();
+	}
+    }
+	
+}
diff --git a/src/share/classes/com/sun/activation/viewers/TextViewer.java b/src/share/classes/com/sun/activation/viewers/TextViewer.java
new file mode 100644
index 0000000..0fb22c7
--- /dev/null
+++ b/src/share/classes/com/sun/activation/viewers/TextViewer.java
@@ -0,0 +1,118 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)TextViewer.java	1.10 07/05/14
+ */
+
+package com.sun.activation.viewers;
+
+import java.awt.*;
+import java.io.*;
+import java.beans.*;
+import javax.activation.*;
+
+public class TextViewer extends Panel implements CommandObject {
+    // UI Vars...
+    private TextArea text_area = null;
+    
+    // File Vars
+    private File text_file = null;
+    private String text_buffer = null;
+    
+    private DataHandler _dh = null;
+    private boolean DEBUG = false;
+    /**
+     * Constructor
+     */
+    public TextViewer() {
+	setLayout( new GridLayout(1,1));
+	// create the text area
+	text_area = new TextArea("", 24, 80, 
+				 TextArea.SCROLLBARS_VERTICAL_ONLY );
+	text_area.setEditable( false );
+	
+	add(text_area);
+    }
+    
+    //--------------------------------------------------------------------
+    public void setCommandContext(String verb, DataHandler dh) throws IOException {
+	_dh = dh;
+	this.setInputStream( _dh.getInputStream() );
+    }
+  //--------------------------------------------------------------------
+
+  /**
+   * set the data stream, component to assume it is ready to
+   * be read.
+   */
+  public void setInputStream(InputStream ins) throws IOException {
+      
+      int bytes_read = 0;
+      // check that we can actually read
+      ByteArrayOutputStream baos = new ByteArrayOutputStream();
+      byte data[] = new byte[1024];
+      
+      while((bytes_read = ins.read(data)) >0)
+	  baos.write(data, 0, bytes_read);
+      
+      ins.close();
+
+      // convert the buffer into a string
+      // popuplate the buffer
+      text_buffer = baos.toString();
+
+      // place in the text area
+      text_area.setText(text_buffer);
+
+    }
+  //--------------------------------------------------------------------
+    public void addNotify() {
+	super.addNotify();
+	invalidate();
+    }
+  //--------------------------------------------------------------------
+    public Dimension getPreferredSize()	{
+	return text_area.getMinimumSize(24, 80);
+    }
+
+}
+
+
+
+
+
+
diff --git a/src/share/classes/demo/CompViewer.java b/src/share/classes/demo/CompViewer.java
new file mode 100644
index 0000000..3a214b8
--- /dev/null
+++ b/src/share/classes/demo/CompViewer.java
@@ -0,0 +1,144 @@
+/*
+ * @(#)CompViewer.java	1.5 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.awt.*;
+import java.beans.*;
+import java.lang.reflect.Method;
+import java.io.*;
+import java.awt.event.*;
+
+/**
+ * Class <code>CompViewer</code> creates a 'viewer' component
+ * that implements the CommandObject interface.
+ *
+ */
+public class CompViewer extends Frame implements WindowListener {
+
+    /**
+     * Our constructor...
+     */
+    public CompViewer(){
+	super("Component");
+	this.initCompViewer(null);
+    }
+
+    public CompViewer(String name){
+	super(name);
+	this.initCompViewer(name);
+    }
+
+    public void initCompViewer(String name){
+	if (name != null)
+	    setTitle(name);
+	setSize(400,400);
+	setLayout(new BorderLayout());
+	this.addWindowListener(this);
+    }
+    
+    ////////////////////////////////////////////////////////////////////////
+    // we got our bean as a component display it!
+    void setBean(Component new_bean)
+	{
+	    Dimension start_dim = null;
+	    add((Component)new_bean, "Center");
+	    start_dim =  ((Component)new_bean).getPreferredSize();
+	    
+	    if(start_dim.width != 0 && start_dim.height != 0) {
+		// this is what we do under normal conditions
+		start_dim.height += 40;
+		start_dim.width += 15;
+		this.setSize( start_dim );
+		((Component)new_bean).invalidate(); 
+		((Component)new_bean).validate();
+		((Component)new_bean).doLayout();
+		show();           
+	    }
+	    else {
+		// we get here if for some reason our child's
+		// getPref size needs to have it's peer created
+		// first...
+		show();           
+		start_dim =  ((Component)new_bean).getPreferredSize();
+		start_dim.height += 40;
+		start_dim.width += 15;
+		this.setSize( start_dim );
+		((Component)new_bean).validate();
+	    }
+	    this.setSize(this.getSize());
+	    validate();
+	}
+
+
+    /**
+     * Make the bean based on it's class loader and name
+     */
+    private Object makeBean(ClassLoader cls, String beanName) {
+	Object new_bean = null;
+
+	try {
+	    try {
+		new_bean = java.beans.Beans.instantiate(cls, beanName);
+	    }
+	    catch(IOException e) {
+		System.out.println("CompViewer:Beans.instantiate:IOException " + beanName + ".");
+		System.out.println(e);
+		System.exit(1);
+	    }
+	}
+	catch (ClassNotFoundException e) {
+	    System.out.println("CompViewer:Beans.instantiate:ClassNotFoundException " + beanName + "."); 
+	    System.out.println(e);
+	    System.exit(1);
+	}
+      
+	if( !(new_bean instanceof Component) ) {
+	    System.out.println("CompViewer: " + beanName + " not instance of awt.Component exiting");
+	    System.exit(1);
+	}
+	return new_bean;
+    }
+
+    public void windowOpened(WindowEvent e) {}
+    public void windowClosing(WindowEvent e) {
+	this.setVisible(false);
+    }
+    public void windowClosed(WindowEvent e) {}
+    public void windowIconified(WindowEvent e) {}
+    public void windowDeiconified(WindowEvent e) {}
+    public void windowActivated(WindowEvent e) {}
+    public void windowDeactivated(WindowEvent e) {}
+
+}
+
+
+
diff --git a/src/share/classes/demo/DCHTest.java b/src/share/classes/demo/DCHTest.java
new file mode 100644
index 0000000..5e2550c
--- /dev/null
+++ b/src/share/classes/demo/DCHTest.java
@@ -0,0 +1,108 @@
+/*
+ * @(#)DCHTest.java	1.5 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.io.*;
+import javax.activation.*;
+import java.awt.datatransfer.*;
+
+public class DCHTest {
+    private FileDataSource fds = null;
+    private DataHandler dh = null;
+    private DataContentHandlerFactory dchf = null;
+    /**
+     * main function
+     */
+    public static void main(String args[]) {
+	DCHTest test = new DCHTest();
+	
+	if(args.length == 0) {
+	    System.out.println("usage: DCHTest file.txt");
+	    System.exit(1);
+	}
+	
+	// first let's get a DataSource
+
+	test.setFile(args[0]);
+	
+	test.doit();
+    }
+
+    private void doit() {
+	DataFlavor xfer_flavors[];
+	Object content = null;
+
+	// now let's create a DataHandler
+	dh = new DataHandler(fds);
+	System.out.println("DCHTest: DataHandler created");
+
+	// now lets set a DataContentHandlerFactory
+	dchf = new SimpleDCF("text/plain:PlainDCH\n");
+	System.out.println("DCHTest: Simple dchf created");
+	
+	// now let's set the dchf in the dh
+	dh.setDataContentHandlerFactory(dchf);
+	System.out.println("DCHTest: DataContentHandlerFactory set in DataHandler");
+	
+	// get the dataflavors
+	xfer_flavors = dh.getTransferDataFlavors();
+	System.out.println("DCHTest: dh.getTransferDF returned " +
+			   xfer_flavors.length + " data flavors.");
+
+	// get the content:
+        try {
+	   content = dh.getContent();
+        } catch (Exception e) { e.printStackTrace(); }
+
+	if(content == null)
+	    System.out.println("DCHTest: no content to be had!!!");
+	else
+	    System.out.println("DCHTest: got content of the following type: " +
+			       content.getClass().getName());
+	
+    }
+
+    /**
+     * set the file
+     */
+    public void setFile(String filename) {
+	fds = new FileDataSource(filename);
+	System.out.println("DCHTest: FileDataSource created");
+	if(!fds.getContentType().equals("text/plain")) {
+	    System.out.println("Type must be text/plain");
+	    System.exit(1);
+	}
+    }
+	    
+}
+
+
diff --git a/src/share/classes/demo/DCHTest2.java b/src/share/classes/demo/DCHTest2.java
new file mode 100644
index 0000000..b07742c
--- /dev/null
+++ b/src/share/classes/demo/DCHTest2.java
@@ -0,0 +1,116 @@
+/*
+ * @(#)DCHTest2.java	1.7 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.io.*;
+import javax.activation.*;
+import java.awt.datatransfer.*;
+
+public class DCHTest2 {
+    private FileDataSource fds = null;
+    private MailcapCommandMap cmdMap = null;
+    private DataHandler dh = null;
+    private DataContentHandlerFactory dchf = null;
+    /**
+     * main function
+     */
+    public static void main(String args[]) {
+	DCHTest2 test = new DCHTest2();
+	
+	if(args.length < 2) {
+	    System.out.println("usage: DCHTest2 file.txt mailcap");
+	    System.exit(1);
+	}
+	
+	// first let's get a DataSource
+
+	test.setFile(args[0]);
+	
+	test.setMailcap(args[1]);
+	test.doit();
+    }
+
+    private void doit() {
+	DataFlavor xfer_flavors[];
+	Object content = null;
+
+	// now let's create a DataHandler
+	dh = new DataHandler(fds);
+        dh.setCommandMap(cmdMap);
+	System.out.println("DCHTest2: DataHandler created");
+
+	// get the dataflavors
+	xfer_flavors = dh.getTransferDataFlavors();
+	System.out.println("DCHTest2: dh.getTransferDF returned " +
+			   xfer_flavors.length + " data flavors.");
+
+	// get the content:
+	try {
+	    content = dh.getContent();
+        } catch (Exception e) { e.printStackTrace(); }
+	if(content == null)
+	    System.out.println("DCHTest2: no content to be had!!!");
+	else
+	    System.out.println("DCHTest2: got content of the following type: " +
+			       content.getClass().getName());
+	
+    }
+
+    /**
+     * set the file
+     */
+    public void setFile(String filename) {
+	fds = new FileDataSource(filename);
+	System.out.println("DCHTest2: FileDataSource created");
+	if(!fds.getContentType().equals("text/plain")) {
+	    System.out.println("Type must be text/plain");
+	    System.exit(1);
+	}
+    }
+
+   /**
+    * set the mailcap file in the CMD Map
+    */
+   public void setMailcap(String mailcap) {
+
+       try {
+	   cmdMap = new MailcapCommandMap(mailcap);
+       } catch(Exception e){
+	   e.printStackTrace();
+	   System.exit(1);
+       }
+   }
+
+	    
+}
+
+
diff --git a/src/share/classes/demo/DHURL.java b/src/share/classes/demo/DHURL.java
new file mode 100644
index 0000000..095794e
--- /dev/null
+++ b/src/share/classes/demo/DHURL.java
@@ -0,0 +1,87 @@
+/*
+ * @(#)DHURL.java	1.5 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.net.*;
+import java.io.*;
+import javax.activation.*;
+
+public class DHURL {
+    URL url = null;
+    DataHandler dh = null;
+    
+    public static void main(String args[]){
+        DHURL test = new DHURL();
+
+        if(args.length == 0) {
+            System.out.println("usage: DHURL url");
+            System.exit(1);
+        }
+
+        test.setURL(args[0]);
+
+        test.doit();
+
+    }
+
+    public void setURL(String url) {
+	
+	try {
+	    this.url = new URL(url);
+	} catch(MalformedURLException e) {
+	    e.printStackTrace();
+	    System.out.println("malformed URL!!!");
+	    System.exit(1);
+	}
+
+    }
+    
+    public void doit() {
+	System.out.print("Creating DataHandler...");
+	dh = new DataHandler(url);
+	System.out.println("...done.");
+
+	System.out.println("The MimeType of the DH : " +
+			   dh.getContentType());
+	try {
+	InputStream is = dh.getInputStream();
+	if(is != null)
+	    System.out.println("got an inputstream");
+	} catch(Exception e) {
+	    e.printStackTrace();
+	}
+
+	
+    }
+	
+    
+}
diff --git a/src/share/classes/demo/FileView.java b/src/share/classes/demo/FileView.java
new file mode 100644
index 0000000..d440cfd
--- /dev/null
+++ b/src/share/classes/demo/FileView.java
@@ -0,0 +1,70 @@
+/*
+ * @(#)FileView.java	1.7 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.awt.*;
+import java.beans.*;
+import java.net.*;
+import javax.activation.*;
+
+public class FileView {
+    private Frame frame;
+
+    public static void main(String args[]) throws Exception {
+        FileView fv = new FileView();
+        if (args.length == 0) {
+            System.out.println("usage: FileView  file.txt");
+            System.exit(1);
+        }
+        fv.view(args[0]);
+    }
+
+    private void view(String filename) throws Exception {
+  	FileDataSource fds = new FileDataSource(filename); 
+  	DataHandler dh = new DataHandler(fds); 
+	// comment out previous two lines, and uncomment next
+	// line and pass in a URL on the command line.
+	// DataHandler dh = new DataHandler(new URL(filename));
+
+	CommandInfo bi = dh.getCommand("view");
+	
+	if (bi == null) {
+	    System.out.println("no viewer found, exiting");
+	    System.exit(1);
+	}
+
+	frame = new Frame("Viewer");
+	frame.add((Component)dh.getBean(bi));
+	frame.setSize(new Dimension(400,300));
+	frame.show();
+    }
+}
diff --git a/src/share/classes/demo/JAFApp.java b/src/share/classes/demo/JAFApp.java
new file mode 100644
index 0000000..42bc2a4
--- /dev/null
+++ b/src/share/classes/demo/JAFApp.java
@@ -0,0 +1,414 @@
+/*
+ * @(#)JAFApp.java	1.13 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import java.beans.*;
+import java.io.*;
+import javax.activation.*;
+
+public class JAFApp extends Frame implements WindowListener, ItemListener, ActionListener {
+
+    // UI stuff...
+    private GridBagLayout gridbag = null;
+    private GridBagLayout panel_gb = null;
+    private List file_list = null;
+    private Panel results_panel = null;
+    private Label f_title = null;
+    private Label f_name_label = null;
+    private Label type_label = null;
+    private Label type_title = null;
+    private Button launch_button = null;
+    private Choice verb_choice = null;
+    // File stuff...
+    private File _file = null;
+    // private FileDataSource fds[] = null;
+    private DataHandler dh[] = null;
+
+    private boolean debug = false;
+    //    private 
+    ///////////////////////////////////////////////////////////////////////
+    // ctor
+    public JAFApp(String title)
+	{
+	   super(title);
+	   initMe();
+	}
+
+    public JAFApp()
+	{
+	    super();
+	    initMe();
+	}
+    
+    ///////////////////////////////////////////////////////////////////////
+    // initME -- init the UI
+    private void initMe()
+	{
+	    Font label_font = new Font("Default", Font.PLAIN, 12);
+	    Font title_font = new Font("Default", Font.BOLD, 12);
+
+	    gridbag = new GridBagLayout();
+	    setLayout(gridbag);
+	    
+	    this.setBackground(Color.white);
+
+	    // results panel create
+	    results_panel = new Panel();
+	    panel_gb = new GridBagLayout();
+	    results_panel.setLayout(panel_gb);
+	    results_panel.setBackground(Color.lightGray);
+	    addGridComponent(this,
+			     results_panel,
+			     gridbag,
+			     0,0,
+			     1,1,
+			     1,0 );
+
+	    // file name label
+	    f_title = new Label("File Name:");
+	    f_title.setBackground(Color.lightGray);
+	    f_title.setAlignment(Label.RIGHT);
+	    f_title.setFont(title_font);	    
+	    addGridComponent(results_panel,
+			     f_title,
+			     panel_gb,
+			     0, 0,
+			     1, 1,
+			     5, 100);
+
+	    // file name label
+	    f_name_label = new Label("<none selected>");
+	    f_name_label.setBackground(Color.lightGray);
+	    f_name_label.setAlignment(Label.LEFT);
+	    f_name_label.setFont(label_font);
+	    addGridComponent(results_panel,
+			     f_name_label,
+			     panel_gb,
+			     1, 0,
+			     1, 1,
+			     15, 100);
+	    
+	    	    // file name label
+	    f_title = new Label("MIME Type:");
+	    f_title.setBackground(Color.lightGray);
+	    f_title.setAlignment(Label.RIGHT);
+	    f_title.setFont(title_font);	    
+	    addGridComponent(results_panel,
+			     f_title,
+			     panel_gb,
+			     2, 0,
+			     1, 1,
+			     5, 100);
+
+	    // type_label
+	    type_label = new Label("<no type>");
+	    type_label.setBackground(Color.lightGray);
+	    type_label.setAlignment(Label.LEFT);
+	    type_label.setFont(label_font);
+	    addGridComponent(results_panel,
+			     type_label,
+			     panel_gb,
+			     3,0,
+			     1,1,
+			     10, 100);
+
+	    // launch button
+	    launch_button = new Button("Launch!");
+	    launch_button.setEnabled( false );
+	    launch_button.setBackground(Color.red);
+	    launch_button.setFont(title_font);
+	    addGridComponent(results_panel,
+			     launch_button,
+			     panel_gb,
+			     4,0,
+			     1,1,
+			     5, 100);
+	    
+	    // verb popup
+	    verb_choice = new Choice();
+	    verb_choice.setEnabled( false );
+	    verb_choice.setFont(label_font);
+	    verb_choice.add("<empty>");
+	    addGridComponent(results_panel,
+			     verb_choice,
+			     panel_gb,
+			     5,0,
+			     1,1,
+			     10, 100);
+
+	    // file list
+	    file_list = new List();
+	    file_list.setBackground(Color.white);
+	    file_list.setFont(label_font);
+	    addGridComponent(this,
+			     file_list,
+			     gridbag,
+			     0,1,
+			     1, 2,
+			     1,1);
+
+	    this.invalidate();
+
+	    // set up events
+	    this.addWindowListener(this);
+	    file_list.addItemListener(this);
+	    launch_button.addActionListener(this);
+
+	}
+
+    ////////////////////////////////////////////////////////////////////////
+    /**
+     * adds a component to our gridbag layout
+     */
+    private void addGridComponent(Container cont, 
+				  Component comp,
+				  GridBagLayout mygb,
+				  int gridx,
+				  int gridy, 
+				  int gridw,
+				  int gridh,
+				  int weightx,
+				  int weighty)
+	{ 
+	    GridBagConstraints c = new GridBagConstraints(); 
+	    c.gridx = gridx; 
+	    c.gridy = gridy; 
+	    c.gridwidth = gridw; 
+	    c.gridheight = gridh; 
+	    c.fill = GridBagConstraints.BOTH;
+	    c.weighty = weighty;
+	    c.weightx = weightx;
+	    c.anchor =  GridBagConstraints.CENTER;
+	    mygb.setConstraints(comp, c); 
+	    cont.add(comp); 
+	}
+
+    ///////////////////////////////////////////////////////////////////////
+    // setFile - sets the file/directory for this frame at startup usually
+    //
+    public void setFile( File file )
+	{
+	    _file = file;
+	    int i;
+	    MailcapCommandMap cmdmap = 
+		(MailcapCommandMap)CommandMap.getDefaultCommandMap();
+	    cmdmap.addMailcap("application/x-int;      jaf.viewers.IntViewer");
+
+	    if(_file.isFile())
+		{
+		    dh = new DataHandler[1];
+		    dh[0] = new DataHandler(new FileDataSource( _file ));
+
+		    file_list.add( dh[0].getName() );
+		}
+	    else if( _file.isDirectory() )
+		{
+		    String files[] = _file.list();
+		    MimetypesFileTypeMap map = new MimetypesFileTypeMap();
+		    map.addMimeTypes("text/java java\n");
+		    FileTypeMap.setDefaultFileTypeMap(map);
+		    dh = new DataHandler[ files.length ];
+		    // iterate through the list and make fds
+		    for( i = 0; i < files.length; i++)
+			{
+
+
+			    if(debug)
+				System.out.println(files[i]);
+
+			    dh[i] = new  DataHandler(
+					   new FileDataSource( _file.getAbsolutePath() +
+							       _file.separator +  
+							       files[i] )
+					   );
+			    dh[i].setCommandMap(cmdmap);
+
+// 			    try {
+// 				((FileDataSource)dh[i].getDataSource()).addMimeTypes("text/plain java\n");
+// 			    } catch(IOException e){ System.out.println(e); }
+			    file_list.add(dh[i].getName());
+			}
+		    System.out.println("number of files: " + files.length +
+				       " read : " + i);
+
+		}
+
+	}
+    /////////////////***ACTION LISTENER***///////////////////////
+    // is called when a monkey (user) presses the launch button
+    public void actionPerformed(ActionEvent evt)
+	{
+	    Object source = evt.getSource();
+	    int index = file_list.getSelectedIndex();
+	    
+	    // make sure it's the launch button and that
+	    // a list item is selected...
+	    if(source == launch_button && index > -1){
+		CommandInfo cmds[] = null;
+		String mimeType = dh[index].getContentType();
+		
+		if(debug)
+		    System.out.println("Finding...");
+		
+		// get the available commands for this type
+		cmds = dh[index].getPreferredCommands();
+		
+		// if we actually got some back...
+		if(cmds.length > 0){ 
+		    CompViewer cont = null;
+		    Object my_bean = null;
+		    // take the first one
+		    if(debug)
+			System.out.println("Launching...");
+		    
+		    // get the first one
+		    my_bean = dh[index].getBean( cmds[verb_choice.getSelectedIndex()] );
+		    
+			    // if it isn't a CommandObject we still
+			    // have to give it it's data...
+// 			    if(!(my_bean instanceof javax.activation.CommandObject))
+// 				{
+// 				    System.out.println("WHOOOAAA!");
+// 				    if(my_bean instanceof 
+// 				       java.io.Externalizable)
+		
+// 					{
+// 					    try
+// 						{
+//                 	     ((Externalizable)my_bean).readExternal(
+// 						new ObjectInputStream( 
+// 						   dh[index].getInputStream() 
+// 						   )
+// 						);
+// 						} catch(Exception e)
+// 						    {
+// 				  System.out.println("There was a problem reading the Externalized Data in the viewer bean : " + e);
+// 						    }
+// 					}
+// 				}
+		    if(debug)
+			System.out.println("GOTTA BEAN!: " + 
+					   my_bean.getClass().getName() );
+			    // create a new bean container
+		    cont = new CompViewer( "JAF Component" );
+		    cont.setBean( (Component) my_bean);
+		    cont.show();
+		}
+	    }
+	}
+    /////////////////***ITEM LISTENER***/////////////////////////
+    public void itemStateChanged(ItemEvent evt)
+	{
+	    Integer id = (Integer)evt.getItem();
+
+	    if(evt.getStateChange() == ItemEvent.SELECTED)
+		{
+		    // get the content type from the data handler...
+		    String mime_type = dh[id.intValue()].getContentType();
+		    // set the state in the info dlog:
+		    f_name_label.setText(dh[id.intValue()].getName());
+		    
+		    // set the field in the UI and enable launch button
+		    if(mime_type != null)
+			{
+			    CommandInfo cmds[] = null;
+			    // set the text label
+			    type_label.setText(mime_type);
+
+			    // check to see if any commands are available
+			    cmds = dh[id.intValue()].getPreferredCommands();
+			    if(cmds != null && cmds.length > 0) // we got a command!
+				{
+				    launch_button.setEnabled( true );
+				    verb_choice.setEnabled( true );
+				    launch_button.setBackground( Color.green );
+
+				    verb_choice.removeAll();
+				    for(int i = 0; i < cmds.length; i++)
+					{
+					    //		    verb_choice.addItem(cmds[i].getBeanDescriptor().getName());
+					    verb_choice.addItem(cmds[i].getCommandName());
+					}
+				}
+			    else
+				{
+				    launch_button.setEnabled( false );
+				    verb_choice.setEnabled( false );
+				    launch_button.setBackground( Color.red );
+				}
+			    
+			}
+		    else
+			{
+			    // set label to be unknown and launch button off!
+			    type_label.setText("<unknown>");
+			    launch_button.setEnabled( false );
+			    launch_button.setBackground( Color.red );
+			}
+		    
+		}
+	}
+    /////////////////***WINDOW LISTENER***////////////////////////
+    public void windowOpened(WindowEvent e){}
+    public void windowClosing(WindowEvent e)
+	{
+	    System.exit(0); // quit
+	}
+    public void windowClosed(WindowEvent e){}
+    public void windowIconified(WindowEvent e){}
+    public void windowDeiconified(WindowEvent e){}
+    public void windowActivated(WindowEvent e){}
+    public void windowDeactivated(WindowEvent e){}
+	    
+    ///////////////////////////////////////////////////////////////////////
+    // main
+    public static void main(String args[])
+	{
+	    JAFApp appFrame = new JAFApp("JAF Testing Application");
+	    appFrame.setSize(600, 400);
+	    appFrame.show();
+
+	    // set the directory
+	    if(args.length == 0)
+		{
+		    appFrame.setFile( new File("."));
+		}
+	    else
+		{
+		    appFrame.setFile( new File(args[0]) );
+		}
+	}
+
+	    
+}
diff --git a/src/share/classes/demo/MCDump.java b/src/share/classes/demo/MCDump.java
new file mode 100644
index 0000000..3bc1447
--- /dev/null
+++ b/src/share/classes/demo/MCDump.java
@@ -0,0 +1,107 @@
+/*
+ * @(#)MCDump.java	1.3 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+import java.io.*;
+import java.beans.*;
+import com.sun.activation.registries.*;
+import javax.activation.*;
+
+/**
+ * Dump out everything we know about a MailcapCommandMap.
+ */
+public class MCDump {
+    static MailcapCommandMap mcf = null;
+
+    public static void main(String args[]) {
+	
+	try {
+	    if (args.length == 0)
+		mcf = new MailcapCommandMap();
+	    else
+		mcf = new MailcapCommandMap(args[0]);
+	} catch (Exception e){ 
+	    e.printStackTrace();
+	    System.exit(1);
+	}
+
+	String[] types = mcf.getMimeTypes();
+	if (types == null) {
+	    System.out.println("No known MIME types");
+	    System.exit(0);
+	} else {
+	    System.out.println("Known MIME types:");
+	    for (int i = 0; i < types.length; i++)
+		System.out.println("\t" + types[i]);
+	}
+
+	System.out.println();
+	System.out.println("All commands for each MIME type:");
+	for (int i = 0; i < types.length; i++) {
+	    System.out.println("    " + types[i]);
+	    CommandInfo[] cmdinfo = mcf.getAllCommands(types[i]);
+	    if (cmdinfo == null) {
+		System.out.println("\tNONE");
+	    } else {
+		for (int k = 0; k < cmdinfo.length; k++)
+		    System.out.println("\t" + cmdinfo[k].getCommandName() +
+			": " + cmdinfo[k].getCommandClass());
+	    }
+	}
+
+	System.out.println();
+	System.out.println("Preferred commands for each MIME type:");
+	for (int i = 0; i < types.length; i++) {
+	    System.out.println("    " + types[i]);
+	    CommandInfo[] cmdinfo = mcf.getPreferredCommands(types[i]);
+	    if (cmdinfo == null) {
+		System.out.println("\tNONE");
+	    } else {
+		for (int k = 0; k < cmdinfo.length; k++)
+		    System.out.println("\t" + cmdinfo[k].getCommandName() +
+			": " + cmdinfo[k].getCommandClass());
+	    }
+	}
+
+	System.out.println();
+	System.out.println("Native commands for each MIME type:");
+	for (int i = 0; i < types.length; i++) {
+	    System.out.println("    " + types[i]);
+	    String[] cmds = mcf.getNativeCommands(types[i]);
+	    if (cmds.length == 0) {
+		System.out.println("\tNONE");
+	    } else {
+		for (int k = 0; k < cmds.length; k++)
+		    System.out.println("\t" + cmds[k]);
+	    }
+	}
+    }
+}
diff --git a/src/share/classes/demo/MCTest.java b/src/share/classes/demo/MCTest.java
new file mode 100644
index 0000000..f68448d
--- /dev/null
+++ b/src/share/classes/demo/MCTest.java
@@ -0,0 +1,78 @@
+/*
+ * @(#)MCTest.java	1.9 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+import java.io.*;
+import java.beans.*;
+import com.sun.activation.registries.*;
+import javax.activation.*;
+
+public class MCTest {
+    static MailcapCommandMap mcf = null;
+
+    public static void main(String args[]) {
+	
+	try {
+	    if (args.length == 0)
+		mcf = new MailcapCommandMap();
+	    else
+		mcf = new MailcapCommandMap(args[0]);
+	} catch (Exception e){ 
+	    e.printStackTrace();
+	    System.exit(1);
+	}
+
+	CommandInfo cmdinfo[] = mcf.getAllCommands("text/plain");
+        System.out.print("Are there any commands for text/plain?");
+
+	if (cmdinfo != null) {
+	    System.out.println("number of cmds = " + cmdinfo.length);
+	    System.out.println("now try an individual cmd");
+	    CommandInfo info = mcf.getCommand("text/plain", "view");
+	    if (info != null) {
+		System.out.println("Got command...");
+	    } else {
+		System.out.println("no cmds");
+	    }
+
+	    mcf.addMailcap("text/plain;; x-java-flobotz=com.sun.activation.flobotz\n");	
+	    //	    System.out.println("...dome");
+	    if (cmdinfo != null) {
+		cmdinfo = mcf.getAllCommands("text/plain");
+		System.out.println("now we have cmds = " + cmdinfo.length);
+		
+	    }	
+
+        } else {
+	    System.out.println("NO CMDS AT ALL!");
+	}
+    }
+}
diff --git a/src/share/classes/demo/ODCHTest.java b/src/share/classes/demo/ODCHTest.java
new file mode 100644
index 0000000..7e72f01
--- /dev/null
+++ b/src/share/classes/demo/ODCHTest.java
@@ -0,0 +1,99 @@
+/*
+ * @(#)ODCHTest.java	1.4 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.io.*;
+import javax.activation.*;
+import java.awt.datatransfer.*;
+
+public class ODCHTest {
+    private FileDataSource fds = null;
+    private DataHandler dh = null;
+    private DataContentHandlerFactory dchf = null;
+    private String str;
+    /**
+     * main function
+     */
+    public static void main(String args[]) {
+	ODCHTest test = new ODCHTest();
+	
+	if(args.length != 0) {
+	    System.out.println("usage: ODCHTest");
+	    System.exit(1);
+	}
+	
+	// first let's get a DataSource
+
+	
+	test.doit();
+    }
+
+    private void doit() {
+	DataFlavor xfer_flavors[];
+	Object content = null;
+
+	str = new String("This is a test");
+
+	// now let's create a DataHandler
+	dh = new DataHandler(str, "text/plain");
+	System.out.println("ODCHTest: DataHandler created with str & text/plain");
+
+	// now lets set a DataContentHandlerFactory
+	dchf = new SimpleDCF("text/plain:PlainDCH\n");
+	System.out.println("ODCHTest: Simple dchf created");
+	
+	// now let's set the dchf in the dh
+	dh.setDataContentHandlerFactory(dchf);
+	System.out.println("ODCHTest: DataContentHandlerFactory set in DataHandler");
+	
+	// get the dataflavors
+	xfer_flavors = dh.getTransferDataFlavors();
+	System.out.println("ODCHTest: dh.getTransferDF returned " +
+			   xfer_flavors.length + " data flavors.");
+
+	// get the content:
+        try {
+	   content = dh.getContent();
+        } catch (Exception e) { e.printStackTrace(); }
+
+	if(content == null)
+	    System.out.println("ODCHTest: no content to be had!!!");
+	else {
+	    System.out.println("ODCHTest: got content of the following type: " +
+			       content.getClass().getName());
+	    if(content == str)
+		System.out.println("get content works");
+	    
+	}
+    }
+	    
+}
diff --git a/src/share/classes/demo/PlainDCH.java b/src/share/classes/demo/PlainDCH.java
new file mode 100644
index 0000000..7a3734b
--- /dev/null
+++ b/src/share/classes/demo/PlainDCH.java
@@ -0,0 +1,149 @@
+/*
+ * @(#)PlainDCH.java	1.10 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+import java.io.*;
+import java.awt.datatransfer.DataFlavor;
+import javax.activation.*;
+
+
+public class PlainDCH implements DataContentHandler {
+    /**
+     * return the DataFlavors for this <code>DataContentHandler</code>
+     * @return The DataFlavors.
+     */
+    public DataFlavor[] getTransferDataFlavors() { // throws Exception;
+	DataFlavor flavors[] = new DataFlavor[2];
+	
+
+	try {
+	    flavors[0] = new ActivationDataFlavor(Class.forName("java.lang.String"),
+					   "text/plain",
+					   "text string");
+	} catch(Exception e)
+	    { System.out.println(e); }
+
+	flavors[1] = new DataFlavor("text/plain", "Plain Text");
+	return flavors;
+    }
+    /**
+     * return the Transfer Data of type DataFlavor from InputStream
+     * @param df The DataFlavor.
+     * @param ins The InputStream corresponding to the data.
+     * @return The constructed Object.
+     */
+    public Object getTransferData(DataFlavor df, DataSource ds) {
+	
+	// this is sort of hacky, but will work for the
+	// sake of testing...
+	if(df.getMimeType().equals("text/plain")) {
+	    if(df.getRepresentationClass().getName().equals(
+					       "java.lang.String")) {
+		// spit out String
+		StringBuffer buf = new StringBuffer();
+		char data[] = new char[1024];
+		// InputStream is = null;
+		InputStreamReader isr = null;
+		int bytes_read = 0;
+		int total_bytes = 0;
+
+		try {
+		    isr = new InputStreamReader(ds.getInputStream());
+		    
+// 		    while(is.read(data) > 0)
+// 			buf.append(data);
+
+		    while(true){
+			bytes_read = isr.read(data);
+			if(bytes_read > 0)
+			    buf.append(data, total_bytes, bytes_read);
+			else
+			    break;
+			total_bytes += bytes_read;
+		    } 
+		} catch(Exception e) {}
+
+		return buf.toString();
+		
+	    }
+	    else if(df.getRepresentationClass().getName().equals(
+					     "java.io.InputStream")){
+		// spit out InputStream
+		try {
+		    return ds.getInputStream();
+		} catch (Exception e) {}
+	    }
+		
+	} 
+
+	    return null;
+    }
+    
+    /**
+     *
+     */
+    public Object getContent(DataSource ds) { // throws Exception;
+	StringBuffer buf = new StringBuffer();
+	char data[] = new char[1024];
+	// InputStream is = null;
+	InputStreamReader isr = null;
+	int bytes_read = 0;
+	int total_bytes = 0;
+	
+	try {
+	    isr = new InputStreamReader(ds.getInputStream());
+	    
+	    // 		    while(is.read(data) > 0)
+	    // 			buf.append(data);
+	    
+	    while(true){
+		bytes_read = isr.read(data);
+		if(bytes_read > 0)
+		    buf.append(data, total_bytes, bytes_read);
+		else
+		    break;
+		total_bytes += bytes_read;
+	    } 
+	} catch(Exception e) {}
+	
+	return buf.toString();
+    }
+    /**
+     * construct an object from a byte stream
+     * (similar semantically to previous method, we are deciding
+     *  which one to support)
+     */
+    public void writeTo(Object obj, String mimeTye, OutputStream os) 
+	throws IOException {
+	// throws Exception;
+    }
+    
+}
diff --git a/src/share/classes/demo/PrefTest.java b/src/share/classes/demo/PrefTest.java
new file mode 100644
index 0000000..104ecc1
--- /dev/null
+++ b/src/share/classes/demo/PrefTest.java
@@ -0,0 +1,79 @@
+/*
+ * @(#)PrefTest.java	1.6 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+import java.io.*;
+import java.beans.*;
+import javax.activation.*;
+
+public class PrefTest {
+
+    public static void main(String args[]) {
+	MailcapCommandMap mcf = null;
+
+	if (args.length > 0) {
+	    try {
+		mcf = new MailcapCommandMap(args[0]);
+	    } catch (Exception e) {
+		e.printStackTrace();
+		System.exit(1);
+	    }
+	} else
+	    mcf = new MailcapCommandMap();
+
+	CommandInfo cmdinfo[] = mcf.getAllCommands("text/plain");
+	
+	if (cmdinfo != null) {
+	    System.out.println("ALL Commands for text/plain:");
+	    for (int i = 0; i < cmdinfo.length; i++) {
+		System.out.println("Verb: " + cmdinfo[i].getCommandName() +
+				  " Class: " + cmdinfo[i].getCommandClass());
+	    }
+	    System.out.println("done");
+	} else {
+	    System.out.println("no commands");
+	}
+	System.out.println();
+
+	cmdinfo = mcf.getPreferredCommands("text/plain");
+	if (cmdinfo != null) {
+	    System.out.println("PREFERRED Commands for text/plain:");
+	    for (int i = 0; i < cmdinfo.length; i++) {
+		System.out.println("Verb: " + cmdinfo[i].getCommandName() +
+				  " Class: " + cmdinfo[i].getCommandClass());
+	    }
+	    System.out.println("done");
+	} else {
+	    System.out.println("no commands");
+	}
+	System.out.println();
+    }
+}
diff --git a/src/share/classes/demo/SimpleDCF.java b/src/share/classes/demo/SimpleDCF.java
new file mode 100644
index 0000000..da1ba57
--- /dev/null
+++ b/src/share/classes/demo/SimpleDCF.java
@@ -0,0 +1,117 @@
+/*
+ * @(#)SimpleDCF.java	1.4 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import javax.activation.*;
+import java.util.StringTokenizer;
+import java.util.Hashtable;
+
+public class SimpleDCF implements DataContentHandlerFactory {
+    Hashtable entry_hash = new Hashtable();
+    /**
+     * the constructor, takes a list of classes as an argument in the
+     * form:
+     * <mimetype>:<class name>\n
+     *
+     * For Example:
+     *
+     * application/x-wombat:com.womco.WombatDCH
+     * text/plain:com.textco.TextDCH
+     *
+     */
+    public SimpleDCF(String entries) {
+	StringTokenizer tok = new StringTokenizer(entries);
+
+	String entry;
+	System.out.println("SimpleDCH: new SimpleDCF being created");
+
+	// parse the string
+	while(tok.hasMoreTokens()) {
+	    int colon;
+
+	    entry = tok.nextToken();
+	    System.out.println("full entry = " + entry);
+
+	    // parse out the fields
+	    colon = entry.indexOf(':');
+	    VectorEntry ve = new VectorEntry(entry.substring(0,colon),
+					     entry.substring(colon + 1, 
+							     entry.length()));
+	    System.out.println("adding element = " + ve);
+	    entry_hash.put(ve.getMimeType(),ve);
+	}
+    }
+
+    /**
+     * implement the factor interface
+     */
+    public DataContentHandler createDataContentHandler(String mimeType){
+	DataContentHandler dch = null;
+
+	System.out.print("SimpleDCF: trying to create a DCH");
+
+	VectorEntry ve = (VectorEntry)entry_hash.get(mimeType);
+	if(ve != null) {
+	    System.out.print("...found token");
+	    try { 
+		
+		dch = (DataContentHandler)Class.forName(
+					ve.getClassName()).newInstance();
+		if(dch == null)
+		    System.out.println("...FAILED!!!");
+		else
+		    System.out.println("...SUCCESS!!!");
+
+	    } catch(Exception e) {
+		System.out.println(e);
+	    }
+	}
+	return dch;
+    }
+}
+
+class VectorEntry {
+    private String mimeType;
+    private String className;
+
+    public VectorEntry(String mimeType, String className) {
+	this.mimeType = mimeType;
+	this.className = className;
+    }
+    
+    public String getMimeType() { return mimeType; }
+    public String getClassName() { return className; }
+    public String toString() { 
+	return new String("type: " + mimeType + " class name: " + className);
+    }
+
+}
diff --git a/src/share/classes/demo/TextInternalizer.java b/src/share/classes/demo/TextInternalizer.java
new file mode 100644
index 0000000..c58bff8
--- /dev/null
+++ b/src/share/classes/demo/TextInternalizer.java
@@ -0,0 +1,113 @@
+/*
+ * @(#)TextInternalizer.java	1.4 07/07/13
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.awt.*;
+import java.io.*;
+import java.beans.*;
+import javax.activation.*;
+
+public class TextInternalizer extends Panel implements Externalizable {
+    // UI Vars...
+    private TextArea text_area = null;
+    
+    // File Vars
+    private File text_file = null;
+    private String text_buffer = null;
+    
+    private DataHandler _dh = null;
+    private boolean DEBUG = false;
+    /**
+     * Constructor
+     */
+    public TextInternalizer() {
+	System.out.println("TextInternalizer!!!!!");
+
+	setLayout( new GridLayout(1,1));
+	// create the text area
+	text_area = new TextArea("", 24, 80, 
+				 TextArea.SCROLLBARS_VERTICAL_ONLY );
+	text_area.setEditable( false );
+	
+	add(text_area);
+    }
+    
+    public void writeExternal(ObjectOutput out) throws IOException{
+
+    }
+
+    public void readExternal(ObjectInput in) throws IOException, 
+	ClassNotFoundException {
+
+	
+	this.setObjectInput(in);
+    }
+
+
+
+    //--------------------------------------------------------------------
+//     public void setCommandContext(String verb, DataHandler dh) throws IOException {
+// 	_dh = dh;
+// 	this.setInputStream( _dh.getInputStream() );
+//     }
+  //--------------------------------------------------------------------
+
+  /**
+   * set the data stream, component to assume it is ready to
+   * be read.
+   */
+  public void setObjectInput(ObjectInput ins) throws IOException {
+      try {
+
+      text_buffer = (String)ins.readObject();
+      } catch(Exception e){ e.printStackTrace(); }
+      // place in the text area
+      text_area.setText(text_buffer);
+
+    }
+  //--------------------------------------------------------------------
+    public void addNotify() {
+	super.addNotify();
+	invalidate();
+    }
+  //--------------------------------------------------------------------
+    public Dimension getPreferredSize()	{
+	return text_area.getMinimumSize(24, 80);
+    }
+
+}
+
+
+
+
+
+
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestActivationDataFlavor.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestActivationDataFlavor.java
new file mode 100644
index 0000000..436d657
--- /dev/null
+++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestActivationDataFlavor.java
@@ -0,0 +1,46 @@
+/* @(#)TestActivationDataFlavor.java   1.1 98/02/09
+ *
+ * Copyright (c) 1997-1998 Sun Microsystems, Inc.  All Rights Reserved.
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ */
+package javasoft.sqe.tests.api.javax.activation.TestClasses;
+
+import java.awt.datatransfer.*;
+import javax.activation.*;
+
+/**
+ * this class extends ActivationDataFlavor and provides 
+ * public versions of protected methods for JCK testing
+ */
+
+public class TestActivationDataFlavor extends ActivationDataFlavor {
+
+    public TestActivationDataFlavor(String mimeType,
+				    String humanReadableName)
+    {
+	super(mimeType, humanReadableName);
+    }
+
+    // we will only override protected methods:
+    public String testNormalizeMimeTypeParameter(String parameterName,
+						 String parameterValue)
+    {
+	return super.normalizeMimeTypeParameter(parameterName,parameterValue);
+    }
+
+    public String testNormalizeMimeType(String mimeType)
+    {
+	return super.normalizeMimeType(mimeType);
+    }
+}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandMap.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandMap.java
new file mode 100644
index 0000000..0b91731
--- /dev/null
+++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandMap.java
@@ -0,0 +1,84 @@
+/* @(#)TestCommandMap.java   1.1 98/02/09
+ *
+ * Copyright (c) 1997-1998 Sun Microsystems, Inc.  All Rights Reserved.
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ *
+ */
+
+package	javasoft.sqe.tests.api.javax.activation.TestClasses;
+
+import	javax.activation.*;
+import  javasoft.sqe.tests.api.javax.activation.TestClasses.*;
+
+/** This class is used to provide an alternative to the default MailcapCommandMap
+ *  for testing purposes. It provides a number of distinct values which can be used
+ *  to validate that it is being correctly used by a DataHandler.
+ */
+
+public class TestCommandMap extends CommandMap {
+
+	public static String getClassName() {
+		return  "test.package.TestClass";
+	}
+
+	public static String getVerb() {
+		return "testVerb";
+	}
+
+	public static String getPreferredClassName() {
+		return "test.package.PreferredClass";
+	}
+
+	public static String getPreferredVerb() {
+		return "preferredVerb";
+	}
+
+	public static String getIncorrectMimeTypeVerb() {
+		return "incorrectMimeType";
+	}
+
+	private String requiredMimeType = null;
+	
+	public TestCommandMap(String requiredMimeType)
+	{
+		this.requiredMimeType = requiredMimeType;
+	}
+
+	public CommandInfo[] getPreferredCommands(String mimeType)
+	{
+    	      CommandInfo cmdArray[] = new CommandInfo[1];
+    	      String verb = (requiredMimeType.equals(mimeType)) ? getPreferredVerb() : getIncorrectMimeTypeVerb();
+    	      cmdArray[0] = new CommandInfo(verb, getPreferredClassName());
+    	      return cmdArray;
+	}
+
+	public CommandInfo[] getAllCommands(String mimeType)
+	{
+    		CommandInfo cmdArray[] = new CommandInfo[1];
+    		String verb = (requiredMimeType.equals(mimeType)) ? getVerb() : getIncorrectMimeTypeVerb();
+    		cmdArray[0] = new CommandInfo(verb, getClassName());
+    		return cmdArray;
+	}
+
+	public CommandInfo getCommand(String mimeType, String cmdName)
+	{
+		String verb = (requiredMimeType.equals(mimeType)) ? cmdName : getIncorrectMimeTypeVerb();
+		return new CommandInfo(verb, getClassName());
+	}
+
+	public DataContentHandler createDataContentHandler(String mimeType)
+	{
+    		return (requiredMimeType.equals(mimeType)) ? new TestDCH(mimeType) : null;
+	}
+}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandObject.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandObject.java
new file mode 100644
index 0000000..d4a3b42
--- /dev/null
+++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandObject.java
@@ -0,0 +1,52 @@
+/* @(#)TestCommandObject.java   1.1 98/02/09
+ *
+ * Copyright (c) 1997-1998 Sun Microsystems, Inc.  All Rights Reserved.
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ */
+
+package	javasoft.sqe.tests.api.javax.activation.TestClasses;
+
+import javax.activation.*;
+
+/**
+ * This is utility library routine.
+ */
+
+public class TestCommandObject implements CommandObject {
+
+    private DataHandler dh = null;
+    private String verb = null;
+    private boolean wasCalled = false;
+    
+    public TestCommandObject() {
+    }
+    
+    public void setCommandContext(String verb, DataHandler dh) {
+	this.dh = dh;
+	this.verb = verb;
+	wasCalled = true;
+    }
+    
+    public String getVerb() {
+	return verb;
+    }
+
+    public DataHandler getDataHandler() {
+	return dh;
+    }
+
+    public boolean getWasCalled() {
+	return wasCalled;
+    }
+}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCH.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCH.java
new file mode 100644
index 0000000..13269d6
--- /dev/null
+++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCH.java
@@ -0,0 +1,97 @@
+/* @(#)TestDCH.java   1.1 98/02/09
+ *
+ * Copyright (c) 1997-1998 Sun Microsystems, Inc.  All Rights Reserved.
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ *
+ */
+
+package	javasoft.sqe.tests.api.javax.activation.TestClasses;
+
+import	java.awt.datatransfer.*;
+import	java.io.*;
+import  java.io.IOException;
+import	javax.activation.*;
+
+/** Test DCH that does nothing. Just provides an object 
+ */
+
+public class TestDCH implements DataContentHandler {
+
+    private DataFlavor df = null;
+    private static Object obj = null;
+
+    public static String getDefaultMimeType() {
+	return "test/test";
+    }
+
+    public static String getDataFlavorName() {
+	return "madeInTestDCH";
+    }
+
+    public static Object getObject()
+    {
+	if (obj == null)
+	    obj = new TestCommandObject();
+
+	return obj;
+    }
+
+    public TestDCH(String mimeType)
+    {
+	this.df = new DataFlavor(mimeType, getDataFlavorName());
+    }
+
+    public TestDCH()
+    {
+	this(getDefaultMimeType());
+    }
+
+    public DataFlavor[] getTransferDataFlavors()
+    {
+	DataFlavor dfs [] = new DataFlavor[1];
+	dfs[0] = df;
+	return dfs;
+    }
+
+    public Object getTransferData(DataFlavor df, DataSource ds) throws UnsupportedFlavorException, IOException {
+	if (!this.df.isMimeTypeEqual(df.getMimeType()))
+	    throw new UnsupportedFlavorException(df);
+
+	return getObject();
+    }
+    /**
+     * Return an object representing the data in its most preferred form.
+     * Generally this will be the form described by the first DataFlavor
+     * returned by the getTransferDataFlavors method.
+     */
+
+    public Object getContent(DataSource ds) throws IOException
+    {
+	return obj;
+    }
+    /**
+     * Convert the object to a byte stream of the specified MIME type
+     * and write it to the output stream.
+     */
+
+    public void writeTo(Object obj, String mimeType, OutputStream os ) throws IOException {
+	// tests not counting on this doing anything for now.
+    }
+    // methods of TestDCH  (testing convenience)
+
+    public String getMimeType()
+    {
+	return df.getMimeType();
+    }
+}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCHFactory.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCHFactory.java
new file mode 100644
index 0000000..054c439
--- /dev/null
+++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCHFactory.java
@@ -0,0 +1,48 @@
+/* @(#)TestDCHFactory.java   1.1 98/02/09
+ *
+ * Copyright (c) 1997-1998 Sun Microsystems, Inc.  All Rights Reserved.
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ *
+ */
+
+package	javasoft.sqe.tests.api.javax.activation.TestClasses;
+
+import	javax.activation.*;
+
+/** Test uitlity used by DataHandler class.
+ */
+
+public class TestDCHFactory implements DataContentHandlerFactory
+{
+    private String mimeType = null;
+
+    public TestDCHFactory() {
+    }
+
+    public TestDCHFactory(String mimeType)
+    {
+	this.mimeType = mimeType;
+    }
+    // We allow the factory to make a distinctive TestDCH based upon an optional
+    // mimeType constructor argument, to allow tests to prove that 
+    // DataHandler.setDataContentHandlerFactory overrides the affect setCommandMap.
+
+    public DataContentHandler createDataContentHandler(String mimeType)
+    {
+	if (this.mimeType != null)
+	    return new TestDCH(this.mimeType);
+	else
+	    return new TestDCH(mimeType);
+    }
+}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDataSource.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDataSource.java
new file mode 100644
index 0000000..7f1490b
--- /dev/null
+++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDataSource.java
@@ -0,0 +1,50 @@
+/* @(#)TestDataSource.java   1.1 98/02/09
+ *
+ * Copyright (c) 1997-1998 Sun Microsystems, Inc.  All Rights Reserved.
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ */
+
+package	javasoft.sqe.tests.api.javax.activation.TestClasses;
+
+import javax.activation.*;
+import java.io.*;
+
+/**
+ * A TestDataSource for the DataHandler tests. It will return a 
+ * the passed in byte stream via the getinputstream method.
+ */
+
+public class TestDataSource implements DataSource {
+
+    byte byte_array[] = null;
+    
+    public TestDataSource(byte byte_array[]){
+	this.byte_array = byte_array;
+    }
+
+    public InputStream getInputStream() throws IOException {
+	ByteArrayInputStream bis = new ByteArrayInputStream(byte_array);
+	return bis;
+	
+    }
+    public OutputStream getOutputStream() throws IOException {
+	return null;
+    }
+    public String getContentType(){
+	return "application/octet-stream";
+    }
+    public String getName() {
+	    return "name";
+    }
+}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestFileTypeMap.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestFileTypeMap.java
new file mode 100644
index 0000000..37e0142
--- /dev/null
+++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestFileTypeMap.java
@@ -0,0 +1,40 @@
+/* @(#)TestFileTypeMap.java   1.1 98/02/09
+ *
+ * Copyright (c) 1997-1998 Sun Microsystems, Inc.  All Rights Reserved.
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ *
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
+ *
+ */
+
+package	javasoft.sqe.tests.api.javax.activation.TestClasses;
+
+import	java.io.*;
+import	javax.activation.*;
+
+/** Test utility library used by FileTypeMap tests.
+ */
+
+public class TestFileTypeMap extends FileTypeMap
+{
+    public static String getTestType(){
+	    return "test/test";
+    }
+
+    public String getContentType(File f) {
+    	return getTestType();
+    }
+
+    public String getContentType(String filename){
+    	return getTestType();
+    }
+}
diff --git a/src/share/classes/javax/activation/ActivationDataFlavor.java b/src/share/classes/javax/activation/ActivationDataFlavor.java
new file mode 100644
index 0000000..ee47d92
--- /dev/null
+++ b/src/share/classes/javax/activation/ActivationDataFlavor.java
@@ -0,0 +1,263 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)ActivationDataFlavor.java	1.16 07/07/13
+ */
+
+package javax.activation;
+
+import java.awt.datatransfer.DataFlavor;
+import java.io.IOException;
+import javax.activation.MimeType;
+
+/**
+ * The ActivationDataFlavor class is a special subclass of
+ * <code>java.awt.datatransfer.DataFlavor</code>. It allows the JAF to
+ * set all three values stored by the DataFlavor class via a new
+ * constructor. It also contains improved MIME parsing in the <code>equals
+ * </code> method. Except for the improved parsing, its semantics are
+ * identical to that of the JDK's DataFlavor class.
+ */
+
+public class ActivationDataFlavor extends DataFlavor {
+
+    /*
+     * Raison d'etre:
+     *
+     * The DataFlavor class included in JDK 1.1 has several limitations
+     * including piss poor MIME type parsing, and the limitation of
+     * only supporting serialized objects and InputStreams as
+     * representation objects. This class 'fixes' that.
+     */
+
+    // I think for now I'll keep copies of all the variables and
+    // then later I may choose try to better coexist with the base
+    // class *sigh*
+    private String mimeType = null;
+    private MimeType mimeObject = null;
+    private String humanPresentableName = null;
+    private Class representationClass = null;
+
+    /**
+     * Construct a DataFlavor that represents an arbitrary
+     * Java object. This constructor is an extension of the
+     * JDK's DataFlavor in that it allows the explicit setting
+     * of all three DataFlavor attributes.
+     * <p>
+     * The returned DataFlavor will have the following characteristics:
+     * <p>
+     * representationClass = representationClass<br>
+     * mimeType            = mimeType<br>
+     * humanName           = humanName
+     * <p>
+     *
+     * @param representationClass the class used in this DataFlavor
+     * @param mimeType the MIME type of the data represented by this class
+     * @param humanPresentableName the human presentable name of the flavor
+     */
+    public ActivationDataFlavor(Class representationClass,
+		      String mimeType, String humanPresentableName) {
+	super(mimeType, humanPresentableName); // need to call super
+
+	// init private variables:
+	this.mimeType = mimeType;
+	this.humanPresentableName = humanPresentableName;
+	this.representationClass = representationClass;
+    }
+
+    /**
+     * Construct a DataFlavor that represents a MimeType.
+     * <p>
+     * The returned DataFlavor will have the following characteristics:
+     * <p>
+     * If the mimeType is "application/x-java-serialized-object;
+     * class=", the result is the same as calling new
+     * DataFlavor(Class.forName()) as above.
+     * <p>
+     * otherwise:
+     * <p>
+     * representationClass = InputStream<p>
+     * mimeType = mimeType<p>
+     *
+     * @param representationClass the class used in this DataFlavor
+     * @param humanPresentableName the human presentable name of the flavor
+     */
+    public ActivationDataFlavor(Class representationClass,
+				String humanPresentableName) {
+	super(representationClass, humanPresentableName);
+	this.mimeType = super.getMimeType();
+	this.representationClass = representationClass;
+      	this.humanPresentableName = humanPresentableName;
+    }
+
+    /**
+     * Construct a DataFlavor that represents a MimeType.
+     * <p>
+     * The returned DataFlavor will have the following characteristics:
+     * <p>
+     * If the mimeType is "application/x-java-serialized-object; class=",
+     * the result is the same as calling new DataFlavor(Class.forName()) as
+     * above, otherwise:
+     * <p>
+     * representationClass = InputStream<p>
+     * mimeType = mimeType
+     *
+     * @param mimeType the MIME type of the data represented by this class
+     * @param humanPresentableName the human presentable name of the flavor
+     */
+    public ActivationDataFlavor(String mimeType, String humanPresentableName) {
+	super(mimeType, humanPresentableName);
+	this.mimeType = mimeType;
+	try {
+	    this.representationClass = Class.forName("java.io.InputStream");
+	} catch (ClassNotFoundException ex) {
+	    // XXX - should never happen, ignore it
+	}
+      	this.humanPresentableName = humanPresentableName;
+    }
+
+    /**
+     * Return the MIME type for this DataFlavor.
+     *
+     * @return	the MIME type
+     */
+    public String getMimeType() {
+	return mimeType;
+    }
+
+    /**
+     * Return the representation class.
+     *
+     * @return	the representation class
+     */
+    public Class getRepresentationClass() {
+	return representationClass;
+    }
+
+    /**
+     * Return the Human Presentable name.
+     *
+     * @return	the human presentable name
+     */
+    public String getHumanPresentableName() {
+	return humanPresentableName;
+    }
+
+    /**
+     * Set the human presentable name.
+     *
+     * @param humanPresentableName	the name to set
+     */
+    public void setHumanPresentableName(String humanPresentableName) {
+	this.humanPresentableName = humanPresentableName;
+    }
+
+    /**
+     * Compares the DataFlavor passed in with this DataFlavor; calls
+     * the <code>isMimeTypeEqual</code> method.
+     *
+     * @param dataFlavor	the DataFlavor to compare with
+     * @return			true if the MIME type and representation class
+     *				are the same
+     */
+    public boolean equals(DataFlavor dataFlavor) {
+	return (isMimeTypeEqual(dataFlavor) &&
+	 	dataFlavor.getRepresentationClass() == representationClass);
+    }
+
+    /**
+     * Is the string representation of the MIME type passed in equivalent
+     * to the MIME type of this DataFlavor. <p>
+     *
+     * ActivationDataFlavor delegates the comparison of MIME types to
+     * the MimeType class included as part of the JavaBeans Activation
+     * Framework. This provides a more robust comparison than is normally
+     * available in the DataFlavor class.
+     *
+     * @param mimeType	the MIME type
+     * @return		true if the same MIME type
+     */
+    public boolean isMimeTypeEqual(String mimeType) {
+	MimeType mt = null;
+	try {
+	    if (mimeObject == null)
+		mimeObject = new MimeType(this.mimeType);
+	    mt = new MimeType(mimeType);
+	} catch (MimeTypeParseException e) {
+	    // something didn't parse, do a crude comparison
+	    return this.mimeType.equalsIgnoreCase(mimeType);
+	}
+
+	return mimeObject.match(mt);
+    }
+
+    /**
+     * Called on DataFlavor for every MIME Type parameter to allow DataFlavor
+     * subclasses to handle special parameters like the text/plain charset
+     * parameters, whose values are case insensitive.  (MIME type parameter
+     * values are supposed to be case sensitive).
+     * <p>
+     * This method is called for each parameter name/value pair and should
+     * return the normalized representation of the parameterValue.
+     * This method is never invoked by this implementation.
+     *
+     * @param parameterName	the parameter name
+     * @param parameterValue	the parameter value
+     * @return			the normalized parameter value
+     * @deprecated
+     */
+    protected String normalizeMimeTypeParameter(String parameterName,
+						String parameterValue) {
+	return parameterValue;
+    }
+
+    /**
+     * Called for each MIME type string to give DataFlavor subtypes the
+     * opportunity to change how the normalization of MIME types is
+     * accomplished.
+     * One possible use would be to add default parameter/value pairs in cases
+     * where none are present in the MIME type string passed in.
+     * This method is never invoked by this implementation.
+     *
+     * @param mimeType	the MIME type
+     * @return		the normalized MIME type
+     * @deprecated
+     */
+    protected String normalizeMimeType(String mimeType) {
+	return mimeType;
+    }
+}
diff --git a/src/share/classes/javax/activation/CommandInfo.java b/src/share/classes/javax/activation/CommandInfo.java
new file mode 100644
index 0000000..ca3257a
--- /dev/null
+++ b/src/share/classes/javax/activation/CommandInfo.java
@@ -0,0 +1,151 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)CommandInfo.java	1.12 07/05/14
+ */
+
+package javax.activation;
+
+import java.io.*;
+import java.beans.Beans;
+
+/**
+ * The CommandInfo class is used by CommandMap implementations to
+ * describe the results of command requests. It provides the requestor
+ * with both the verb requested, as well as an instance of the
+ * bean. There is also a method that will return the name of the
+ * class that implements the command but <i>it is not guaranteed to
+ * return a valid value</i>. The reason for this is to allow CommandMap
+ * implmentations that subclass CommandInfo to provide special
+ * behavior. For example a CommandMap could dynamically generate
+ * JavaBeans. In this case, it might not be possible to create an
+ * object with all the correct state information solely from the class
+ * name.
+ */
+
+public class CommandInfo {
+    private String verb;
+    private String className;
+
+    /**
+     * The Constructor for CommandInfo.
+     * @param verb The command verb this CommandInfo decribes.
+     * @param className The command's fully qualified class name.
+     */
+    public CommandInfo(String verb, String className) {
+	this.verb = verb;
+	this.className = className;
+    }
+
+    /**
+     * Return the command verb.
+     *
+     * @return the command verb.
+     */
+    public String getCommandName() {
+	return verb;
+    }
+
+    /**
+     * Return the command's class name. <i>This method MAY return null in
+     * cases where a CommandMap subclassed CommandInfo for its
+     * own purposes.</i> In other words, it might not be possible to
+     * create the correct state in the command by merely knowing
+     * its class name. <b>DO NOT DEPEND ON THIS METHOD RETURNING
+     * A VALID VALUE!</b>
+     *
+     * @return The class name of the command, or <i>null</i>
+     */
+    public String getCommandClass() {
+	return className;
+    }
+
+    /**
+     * Return the instantiated JavaBean component.
+     * <p>
+     * Begin by instantiating the component with
+     * <code>Beans.instantiate()</code>.
+     * <p>
+     * If the bean implements the <code>javax.activation.CommandObject</code>
+     * interface, call its <code>setCommandContext</code> method.
+     * <p>
+     * If the DataHandler parameter is null, then the bean is
+     * instantiated with no data. NOTE: this may be useful
+     * if for some reason the DataHandler that is passed in
+     * throws IOExceptions when this method attempts to
+     * access its InputStream. It will allow the caller to
+     * retrieve a reference to the bean if it can be
+     * instantiated.
+     * <p>
+     * If the bean does NOT implement the CommandObject interface,
+     * this method will check if it implements the
+     * java.io.Externalizable interface. If it does, the bean's
+     * readExternal method will be called if an InputStream
+     * can be acquired from the DataHandler.<p>
+     *
+     * @param dh	The DataHandler that describes the data to be
+     *			passed to the command.
+     * @param loader	The ClassLoader to be used to instantiate the bean.
+     * @return The bean
+     * @see java.beans.Beans#instantiate
+     * @see javax.activation.CommandObject
+     */
+    public Object getCommandObject(DataHandler dh, ClassLoader loader)
+			throws IOException, ClassNotFoundException {
+	Object new_bean = null;
+
+	// try to instantiate the bean
+	new_bean = java.beans.Beans.instantiate(loader, className);
+
+	// if we got one and it is a CommandObject
+	if (new_bean != null) {
+	    if (new_bean instanceof CommandObject) {
+		((CommandObject)new_bean).setCommandContext(verb, dh);
+	    } else if (new_bean instanceof Externalizable) {
+		if (dh != null) {
+		    InputStream is = dh.getInputStream();
+		    if (is != null) {
+			((Externalizable)new_bean).readExternal(
+					       new ObjectInputStream(is));
+		    }
+		}
+	    }
+	}
+
+	return new_bean;
+    }
+}
diff --git a/src/share/classes/javax/activation/CommandMap.java b/src/share/classes/javax/activation/CommandMap.java
new file mode 100644
index 0000000..7da1e2a
--- /dev/null
+++ b/src/share/classes/javax/activation/CommandMap.java
@@ -0,0 +1,233 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)CommandMap.java	1.20 07/05/14
+ */
+
+package javax.activation;
+
+
+/**
+ * The CommandMap class provides an interface to a registry of
+ * command objects available in the system.
+ * Developers are expected to either use the CommandMap
+ * implementation included with this package (MailcapCommandMap) or
+ * develop their own. Note that some of the methods in this class are
+ * abstract.
+ */
+public abstract class CommandMap {
+    private static CommandMap defaultCommandMap = null;
+
+    /**
+     * Get the default CommandMap.
+     * <p>
+     *
+     * <ul>
+     * <li> In cases where a CommandMap instance has been previously set
+     *      to some value (via <i>setDefaultCommandMap</i>)
+     *  return the CommandMap.
+     * <li>
+     *  In cases where no CommandMap has been set, the CommandMap
+     *       creates an instance of <code>MailcapCommandMap</code> and
+     *       set that to the default, returning its value.
+     *
+     * </ul>
+     *
+     * @return the CommandMap
+     */
+    public static CommandMap getDefaultCommandMap() {
+	if (defaultCommandMap == null)
+	    defaultCommandMap = new MailcapCommandMap();
+
+	return defaultCommandMap;
+    }
+
+    /**
+     * Set the default CommandMap. Reset the CommandMap to the default by
+     * calling this method with <code>null</code>.
+     *
+     * @param commandMap The new default CommandMap.
+     * @exception SecurityException if the caller doesn't have permission
+     *					to change the default
+     */
+    public static void setDefaultCommandMap(CommandMap commandMap) {
+	SecurityManager security = System.getSecurityManager();
+	if (security != null) {
+	    try {
+		// if it's ok with the SecurityManager, it's ok with me...
+		security.checkSetFactory();
+	    } catch (SecurityException ex) {
+		// otherwise, we also allow it if this code and the
+		// factory come from the same class loader (e.g.,
+		// the JAF classes were loaded with the applet classes).
+		if (CommandMap.class.getClassLoader() !=
+			    commandMap.getClass().getClassLoader())
+		    throw ex;
+	    }
+	}
+	defaultCommandMap = commandMap;
+    }
+
+    /**
+     * Get the preferred command list from a MIME Type. The actual semantics
+     * are determined by the implementation of the CommandMap.
+     *
+     * @param mimeType	the MIME type
+     * @return the CommandInfo classes that represent the command Beans.
+     */
+    abstract public  CommandInfo[] getPreferredCommands(String mimeType);
+
+    /**
+     * Get the preferred command list from a MIME Type. The actual semantics
+     * are determined by the implementation of the CommandMap. <p>
+     *
+     * The <code>DataSource</code> provides extra information, such as
+     * the file name, that a CommandMap implementation may use to further
+     * refine the list of commands that are returned.  The implementation
+     * in this class simply calls the <code>getPreferredCommands</code>
+     * method that ignores this argument.
+     *
+     * @param mimeType	the MIME type
+     * @param ds	a DataSource for the data
+     * @return the CommandInfo classes that represent the command Beans.
+     * @since	JAF 1.1
+     */
+    public CommandInfo[] getPreferredCommands(String mimeType, DataSource ds) {
+	return getPreferredCommands(mimeType);
+    }
+
+    /**
+     * Get all the available commands for this type. This method
+     * should return all the possible commands for this MIME type.
+     *
+     * @param mimeType	the MIME type
+     * @return the CommandInfo objects representing all the commands.
+     */
+    abstract public CommandInfo[] getAllCommands(String mimeType);
+
+    /**
+     * Get all the available commands for this type. This method
+     * should return all the possible commands for this MIME type. <p>
+     *
+     * The <code>DataSource</code> provides extra information, such as
+     * the file name, that a CommandMap implementation may use to further
+     * refine the list of commands that are returned.  The implementation
+     * in this class simply calls the <code>getAllCommands</code>
+     * method that ignores this argument.
+     *
+     * @param mimeType	the MIME type
+     * @param ds	a DataSource for the data
+     * @return the CommandInfo objects representing all the commands.
+     * @since	JAF 1.1
+     */
+    public CommandInfo[] getAllCommands(String mimeType, DataSource ds) {
+	return getAllCommands(mimeType);
+    }
+
+    /**
+     * Get the default command corresponding to the MIME type.
+     *
+     * @param mimeType	the MIME type
+     * @param cmdName	the command name
+     * @return the CommandInfo corresponding to the command.
+     */
+    abstract public CommandInfo getCommand(String mimeType, String cmdName);
+
+    /**
+     * Get the default command corresponding to the MIME type. <p>
+     *
+     * The <code>DataSource</code> provides extra information, such as
+     * the file name, that a CommandMap implementation may use to further
+     * refine the command that is chosen.  The implementation
+     * in this class simply calls the <code>getCommand</code>
+     * method that ignores this argument.
+     *
+     * @param mimeType	the MIME type
+     * @param cmdName	the command name
+     * @param ds	a DataSource for the data
+     * @return the CommandInfo corresponding to the command.
+     * @since	JAF 1.1
+     */
+    public CommandInfo getCommand(String mimeType, String cmdName,
+				DataSource ds) {
+	return getCommand(mimeType, cmdName);
+    }
+
+    /**
+     * Locate a DataContentHandler that corresponds to the MIME type.
+     * The mechanism and semantics for determining this are determined
+     * by the implementation of the particular CommandMap.
+     *
+     * @param mimeType	the MIME type
+     * @return		the DataContentHandler for the MIME type
+     */
+    abstract public DataContentHandler createDataContentHandler(String
+								mimeType);
+
+    /**
+     * Locate a DataContentHandler that corresponds to the MIME type.
+     * The mechanism and semantics for determining this are determined
+     * by the implementation of the particular CommandMap. <p>
+     *
+     * The <code>DataSource</code> provides extra information, such as
+     * the file name, that a CommandMap implementation may use to further
+     * refine the choice of DataContentHandler.  The implementation
+     * in this class simply calls the <code>createDataContentHandler</code>
+     * method that ignores this argument.
+     *
+     * @param mimeType	the MIME type
+     * @param ds	a DataSource for the data
+     * @return		the DataContentHandler for the MIME type
+     * @since	JAF 1.1
+     */
+    public DataContentHandler createDataContentHandler(String mimeType,
+				DataSource ds) {
+	return createDataContentHandler(mimeType);
+    }
+
+    /**
+     * Get all the MIME types known to this command map.
+     * If the command map doesn't support this operation,
+     * null is returned.
+     *
+     * @return		array of MIME types as strings, or null if not supported
+     * @since	JAF 1.1
+     */
+    public String[] getMimeTypes() {
+	return null;
+    }
+}
diff --git a/src/share/classes/javax/activation/CommandObject.java b/src/share/classes/javax/activation/CommandObject.java
new file mode 100644
index 0000000..fe62451
--- /dev/null
+++ b/src/share/classes/javax/activation/CommandObject.java
@@ -0,0 +1,67 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)CommandObject.java	1.10 07/05/14
+ */
+
+package javax.activation;
+
+import java.io.IOException;
+
+/**
+ * JavaBeans components that are Activation Framework aware implement
+ * this interface to find out which command verb they're being asked
+ * to perform, and to obtain the DataHandler representing the
+ * data they should operate on.  JavaBeans that don't implement
+ * this interface may be used as well.  Such commands may obtain
+ * the data using the Externalizable interface, or using an
+ * application-specific method.<p>
+ */
+public interface CommandObject {
+
+    /**
+     * Initialize the Command with the verb it is requested to handle
+     * and the DataHandler that describes the data it will
+     * operate on. <b>NOTE:</b> it is acceptable for the caller
+     * to pass <i>null</i> as the value for <code>DataHandler</code>.
+     *
+     * @param verb The Command Verb this object refers to.
+     * @param dh The DataHandler.
+     */
+    public void setCommandContext(String verb, DataHandler dh)
+						throws IOException;
+}
diff --git a/src/share/classes/javax/activation/DataContentHandler.java b/src/share/classes/javax/activation/DataContentHandler.java
new file mode 100644
index 0000000..18aa837
--- /dev/null
+++ b/src/share/classes/javax/activation/DataContentHandler.java
@@ -0,0 +1,114 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)DataContentHandler.java	1.17 07/05/14
+ */
+
+package javax.activation;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import javax.activation.DataSource;
+
+/**
+ * The DataContentHandler interface is implemented by objects that can
+ * be used to extend the capabilities of the DataHandler's implementation
+ * of the Transferable interface. Through <code>DataContentHandlers</code>
+ * the framework can be extended to convert streams in to objects, and
+ * to write objects to streams. <p>
+ *
+ * Applications don't generally call the methods in DataContentHandlers
+ * directly. Instead, an application calls the equivalent methods in
+ * DataHandler. The DataHandler will attempt to find an appropriate
+ * DataContentHandler that corresponds to its MIME type using the
+ * current DataContentHandlerFactory. The DataHandler then calls
+ * through to the methods in the DataContentHandler.
+ */
+
+public interface DataContentHandler {
+    /**
+     * Returns an array of DataFlavor objects indicating the flavors the
+     * data can be provided in. The array should be ordered according to
+     * preference for providing the data (from most richly descriptive to
+     * least descriptive).
+     *
+     * @return The DataFlavors.
+     */
+    public DataFlavor[] getTransferDataFlavors();
+
+    /**
+     * Returns an object which represents the data to be transferred.
+     * The class of the object returned is defined by the representation class
+     * of the flavor.
+     *
+     * @param df The DataFlavor representing the requested type.
+     * @param ds The DataSource representing the data to be converted.
+     * @return The constructed Object.
+     * @exception UnsupportedFlavorException	if the handler doesn't
+     *						support the requested flavor
+     * @exception IOException	if the data can't be accessed
+     */
+    public Object getTransferData(DataFlavor df, DataSource ds)
+				throws UnsupportedFlavorException, IOException;
+
+    /**
+     * Return an object representing the data in its most preferred form.
+     * Generally this will be the form described by the first DataFlavor
+     * returned by the <code>getTransferDataFlavors</code> method.
+     *
+     * @param ds The DataSource representing the data to be converted.
+     * @return The constructed Object.
+     * @exception IOException	if the data can't be accessed
+     */
+    public Object getContent(DataSource ds) throws IOException;
+
+    /**
+     * Convert the object to a byte stream of the specified MIME type
+     * and write it to the output stream.
+     *
+     * @param obj	The object to be converted.
+     * @param mimeType	The requested MIME type of the resulting byte stream.
+     * @param os	The output stream into which to write the converted
+     *			byte stream.
+     * @exception IOException	errors writing to the stream
+     */
+    public void writeTo(Object obj, String mimeType, OutputStream os)
+	                                               throws IOException;
+}
diff --git a/src/share/classes/javax/activation/DataContentHandlerFactory.java b/src/share/classes/javax/activation/DataContentHandlerFactory.java
new file mode 100644
index 0000000..27206a9
--- /dev/null
+++ b/src/share/classes/javax/activation/DataContentHandlerFactory.java
@@ -0,0 +1,61 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)DataContentHandlerFactory.java	1.7 07/05/14
+ */
+
+package javax.activation;
+
+/**
+ * This interface defines a factory for <code>DataContentHandlers</code>. An
+ * implementation of this interface should map a MIME type into an
+ * instance of DataContentHandler. The design pattern for classes implementing
+ * this interface is the same as for the ContentHandler mechanism used in
+ * <code>java.net.URL</code>.
+ */
+
+public interface DataContentHandlerFactory {
+
+    /**
+     * Creates a new DataContentHandler object for the MIME type.
+     *
+     * @param mimeType the MIME type to create the DataContentHandler for.
+     * @return The new <code>DataContentHandler</code>, or <i>null</i>
+     * if none are found.
+     */
+    public DataContentHandler createDataContentHandler(String mimeType);
+}
diff --git a/src/share/classes/javax/activation/DataHandler.java b/src/share/classes/javax/activation/DataHandler.java
new file mode 100644
index 0000000..901a93f
--- /dev/null
+++ b/src/share/classes/javax/activation/DataHandler.java
@@ -0,0 +1,908 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)DataHandler.java	1.41 07/05/14
+ */
+
+package javax.activation;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
+
+/**
+ * The DataHandler class provides a consistent interface to data
+ * available in many different sources and formats.
+ * It manages simple stream to string conversions and related operations
+ * using DataContentHandlers.
+ * It provides access to commands that can operate on the data.
+ * The commands are found using a CommandMap. <p>
+ *
+ * <b>DataHandler and the Transferable Interface</b><p>
+ * DataHandler implements the Transferable interface so that data can
+ * be used in AWT data transfer operations, such as cut and paste and
+ * drag and drop. The implementation of the Transferable interface
+ * relies on the availability of an installed DataContentHandler
+ * object corresponding to the MIME type of the data represented in
+ * the specific instance of the DataHandler.<p>
+ *
+ * <b>DataHandler and CommandMaps</b><p>
+ * The DataHandler keeps track of the current CommandMap that it uses to
+ * service requests for commands (<code>getCommand</code>,
+ * <code>getAllCommands</code>, <code>getPreferredCommands</code>).
+ * Each instance of a DataHandler may have a CommandMap associated with
+ * it using the <code>setCommandMap</code> method.  If a CommandMap was
+ * not set, DataHandler calls the <code>getDefaultCommandMap</code>
+ * method in CommandMap and uses the value it returns. See
+ * <i>CommandMap</i> for more information. <p>
+ *
+ * <b>DataHandler and URLs</b><p>
+ * The current DataHandler implementation creates a private
+ * instance of URLDataSource when it is constructed with a URL.
+ *
+ * @see javax.activation.CommandMap
+ * @see javax.activation.DataContentHandler
+ * @see javax.activation.DataSource
+ * @see javax.activation.URLDataSource
+ */
+
+public class DataHandler implements Transferable {
+
+    // Use the datasource to indicate whether we were started via the
+    // DataSource constructor or the object constructor.
+    private DataSource dataSource = null;
+    private DataSource objDataSource = null;
+
+    // The Object and mimetype from the constructor (if passed in).
+    // object remains null if it was instantiated with a
+    // DataSource.
+    private Object object = null;
+    private String objectMimeType = null;
+
+    // Keep track of the CommandMap
+    private CommandMap currentCommandMap = null;
+
+    // our transfer flavors
+    private static final DataFlavor emptyFlavors[] = new DataFlavor[0];
+    private DataFlavor transferFlavors[] = emptyFlavors;
+
+    // our DataContentHandler
+    private DataContentHandler dataContentHandler = null;
+    private DataContentHandler factoryDCH = null;
+
+    // our DataContentHandlerFactory
+    private static DataContentHandlerFactory factory = null;
+    private DataContentHandlerFactory oldFactory = null;
+    // the short representation of the ContentType (sans params)
+    private String shortType = null;
+
+    /**
+     * Create a <code>DataHandler</code> instance referencing the
+     * specified DataSource.  The data exists in a byte stream form.
+     * The DataSource will provide an InputStream to access the data.
+     *
+     * @param ds	the DataSource
+     */
+    public DataHandler(DataSource ds) {
+	// save a reference to the incoming DS
+	dataSource = ds;
+	oldFactory = factory; // keep track of the factory
+    }
+
+    /**
+     * Create a <code>DataHandler</code> instance representing an object
+     * of this MIME type.  This constructor is
+     * used when the application already has an in-memory representation
+     * of the data in the form of a Java Object.
+     *
+     * @param obj	the Java Object
+     * @param mimeType	the MIME type of the object
+     */
+    public DataHandler(Object obj, String mimeType) {
+	object = obj;
+	objectMimeType = mimeType;
+	oldFactory = factory; // keep track of the factory
+    }
+
+    /**
+     * Create a <code>DataHandler</code> instance referencing a URL.
+     * The DataHandler internally creates a <code>URLDataSource</code>
+     * instance to represent the URL.
+     *
+     * @param url	a URL object
+     */
+    public DataHandler(URL url) {
+	dataSource = new URLDataSource(url);
+	oldFactory = factory; // keep track of the factory
+    }
+
+    /**
+     * Return the CommandMap for this instance of DataHandler.
+     */
+    private synchronized CommandMap getCommandMap() {
+	if (currentCommandMap != null)
+	    return currentCommandMap;
+	else
+	    return CommandMap.getDefaultCommandMap();
+    }
+
+    /**
+     * Return the DataSource associated with this instance
+     * of DataHandler.
+     * <p>
+     * For DataHandlers that have been instantiated with a DataSource,
+     * this method returns the DataSource that was used to create the
+     * DataHandler object. In other cases the DataHandler
+     * constructs a DataSource from the data used to construct
+     * the DataHandler. DataSources created for DataHandlers <b>not</b>
+     * instantiated with a DataSource are cached for performance
+     * reasons.
+     *
+     * @return	a valid DataSource object for this DataHandler
+     */
+    public DataSource getDataSource() {
+	if (dataSource == null) {
+	    // create one on the fly
+	    if (objDataSource == null)
+		objDataSource = new DataHandlerDataSource(this);
+	    return objDataSource;
+	}
+	return dataSource;
+    }
+
+    /**
+     * Return the name of the data object. If this DataHandler
+     * was created with a DataSource, this method calls through
+     * to the <code>DataSource.getName</code> method, otherwise it
+     * returns <i>null</i>.
+     *
+     * @return	the name of the object
+     */
+    public String getName() {
+	if (dataSource != null)
+	    return dataSource.getName();
+	else
+	    return null;
+    }
+
+    /**
+     * Return the MIME type of this object as retrieved from
+     * the source object. Note that this is the <i>full</i>
+     * type with parameters.
+     *
+     * @return	the MIME type
+     */
+    public String getContentType() {
+	if (dataSource != null) // data source case
+	    return dataSource.getContentType();
+	else
+	    return objectMimeType; // obj/type case
+    }
+
+    /**
+     * Get the InputStream for this object. <p>
+     *
+     * For DataHandlers instantiated with a DataSource, the DataHandler
+     * calls the <code>DataSource.getInputStream</code> method and
+     * returns the result to the caller.
+     * <p>
+     * For DataHandlers instantiated with an Object, the DataHandler
+     * first attempts to find a DataContentHandler for the Object. If
+     * the DataHandler can not find a DataContentHandler for this MIME
+     * type, it throws an UnsupportedDataTypeException.  If it is
+     * successful, it creates a pipe and a thread.  The thread uses the
+     * DataContentHandler's <code>writeTo</code> method to write the
+     * stream data into one end of the pipe.  The other end of the pipe
+     * is returned to the caller.  Because a thread is created to copy
+     * the data, IOExceptions that may occur during the copy can not be
+     * propagated back to the caller. The result is an empty stream.<p>
+     *
+     * @return	the InputStream representing this data
+     * @exception IOException	if an I/O error occurs
+     *
+     * @see javax.activation.DataContentHandler#writeTo
+     * @see javax.activation.UnsupportedDataTypeException
+     */
+    public InputStream getInputStream() throws IOException {
+	InputStream ins = null;
+
+	if (dataSource != null) {
+	    ins = dataSource.getInputStream();
+	} else {
+	    DataContentHandler dch = getDataContentHandler();
+	    // we won't even try if we can't get a dch
+	    if (dch == null)
+		throw new UnsupportedDataTypeException(
+				"no DCH for MIME type " + getBaseType());
+
+	    if (dch instanceof ObjectDataContentHandler) {
+		if (((ObjectDataContentHandler)dch).getDCH() == null)
+		    throw new UnsupportedDataTypeException(
+				"no object DCH for MIME type " + getBaseType());
+	    }
+	    // there is none but the default^^^^^^^^^^^^^^^^
+	    final DataContentHandler fdch = dch;
+
+	    // from bill s.
+	    // ce n'est pas une pipe!
+	    //
+	    // NOTE: This block of code needs to throw exceptions, but
+	    // can't because it is in another thread!!! ARG!
+	    //
+	    final PipedOutputStream pos = new PipedOutputStream();
+	    PipedInputStream pin = new PipedInputStream(pos);
+	    new Thread(
+		       new Runnable() {
+		public void run() {
+		    try {
+			fdch.writeTo(object, objectMimeType, pos);
+		    } catch (IOException e) {
+
+		    } finally {
+			try {
+			    pos.close();
+			} catch (IOException ie) { }
+		    }
+		}
+	    },
+		      "DataHandler.getInputStream").start();
+	    ins = pin;
+	}
+
+	return ins;
+    }
+
+    /**
+     * Write the data to an <code>OutputStream</code>.<p>
+     *
+     * If the DataHandler was created with a DataSource, writeTo
+     * retrieves the InputStream and copies the bytes from the
+     * InputStream to the OutputStream passed in.
+     * <p>
+     * If the DataHandler was created with an object, writeTo
+     * retrieves the DataContentHandler for the object's type.
+     * If the DataContentHandler was found, it calls the
+     * <code>writeTo</code> method on the <code>DataContentHandler</code>.
+     *
+     * @param os	the OutputStream to write to
+     * @exception IOException	if an I/O error occurs
+     */
+    public void writeTo(OutputStream os) throws IOException {
+	// for the DataSource case
+	if (dataSource != null) {
+	    InputStream is = null;
+	    byte data[] = new byte[8*1024];
+	    int bytes_read;
+
+	    is = dataSource.getInputStream();
+
+	    try {
+		while ((bytes_read = is.read(data)) > 0) {
+		    os.write(data, 0, bytes_read);
+		}
+	    } finally {
+		is.close();
+		is = null;
+	    }
+	} else { // for the Object case
+	    DataContentHandler dch = getDataContentHandler();
+	    dch.writeTo(object, objectMimeType, os);
+	}
+    }
+
+    /**
+     * Get an OutputStream for this DataHandler to allow overwriting
+     * the underlying data.
+     * If the DataHandler was created with a DataSource, the
+     * DataSource's <code>getOutputStream</code> method is called.
+     * Otherwise, <code>null</code> is returned.
+     *
+     * @return the OutputStream
+     *
+     * @see javax.activation.DataSource#getOutputStream
+     * @see javax.activation.URLDataSource
+     */
+    public OutputStream getOutputStream() throws IOException {
+	if (dataSource != null)
+	    return dataSource.getOutputStream();
+	else
+	    return null;
+    }
+
+    /**
+     * Return the DataFlavors in which this data is available. <p>
+     *
+     * Returns an array of DataFlavor objects indicating the flavors
+     * the data can be provided in. The array is usually ordered
+     * according to preference for providing the data, from most
+     * richly descriptive to least richly descriptive.<p>
+     *
+     * The DataHandler attempts to find a DataContentHandler that
+     * corresponds to the MIME type of the data. If one is located,
+     * the DataHandler calls the DataContentHandler's
+     * <code>getTransferDataFlavors</code> method. <p>
+     *
+     * If a DataContentHandler can <i>not</i> be located, and if the
+     * DataHandler was created with a DataSource (or URL), one
+     * DataFlavor is returned that represents this object's MIME type
+     * and the <code>java.io.InputStream</code> class.  If the
+     * DataHandler was created with an object and a MIME type,
+     * getTransferDataFlavors returns one DataFlavor that represents
+     * this object's MIME type and the object's class.
+     *
+     * @return	an array of data flavors in which this data can be transferred
+     * @see javax.activation.DataContentHandler#getTransferDataFlavors
+     */
+    public synchronized DataFlavor[] getTransferDataFlavors() {
+	if (factory != oldFactory) // if the factory has changed, clear cache
+	    transferFlavors = emptyFlavors;
+
+	// if it's not set, set it...
+	if (transferFlavors == emptyFlavors)
+	    transferFlavors = getDataContentHandler().getTransferDataFlavors();
+	return transferFlavors;
+    }
+
+    /**
+     * Returns whether the specified data flavor is supported
+     * for this object.<p>
+     *
+     * This method iterates through the DataFlavors returned from
+     * <code>getTransferDataFlavors</code>, comparing each with
+     * the specified flavor.
+     *
+     * @param flavor	the requested flavor for the data
+     * @return		true if the data flavor is supported
+     * @see javax.activation.DataHandler#getTransferDataFlavors
+     */
+    public boolean isDataFlavorSupported(DataFlavor flavor) {
+	DataFlavor[] lFlavors = getTransferDataFlavors();
+
+	for (int i = 0; i < lFlavors.length; i++) {
+	    if (lFlavors[i].equals(flavor))
+		return true;
+	}
+	return false;
+    }
+
+    /**
+     * Returns an object that represents the data to be
+     * transferred. The class of the object returned is defined by the
+     * representation class of the data flavor.<p>
+     *
+     * <b>For DataHandler's created with DataSources or URLs:</b><p>
+     *
+     * The DataHandler attempts to locate a DataContentHandler
+     * for this MIME type. If one is found, the passed in DataFlavor
+     * and the type of the data are passed to its <code>getTransferData</code>
+     * method. If the DataHandler fails to locate a DataContentHandler
+     * and the flavor specifies this object's MIME type and the
+     * <code>java.io.InputStream</code> class, this object's InputStream
+     * is returned.
+     * Otherwise it throws an UnsupportedFlavorException. <p>
+     *
+     * <b>For DataHandler's created with Objects:</b><p>
+     *
+     * The DataHandler attempts to locate a DataContentHandler
+     * for this MIME type. If one is found, the passed in DataFlavor
+     * and the type of the data are passed to its getTransferData
+     * method. If the DataHandler fails to locate a DataContentHandler
+     * and the flavor specifies this object's MIME type and its class,
+     * this DataHandler's referenced object is returned.  
+     * Otherwise it throws an UnsupportedFlavorException.
+     *
+     * @param flavor	the requested flavor for the data
+     * @return		the object
+     * @exception UnsupportedFlavorException	if the data could not be
+     *			converted to the requested flavor
+     * @exception IOException	if an I/O error occurs
+     * @see javax.activation.ActivationDataFlavor
+     */
+    public Object getTransferData(DataFlavor flavor)
+				throws UnsupportedFlavorException, IOException {
+	return getDataContentHandler().getTransferData(flavor, dataSource);
+    }
+
+    /**
+     * Set the CommandMap for use by this DataHandler.
+     * Setting it to <code>null</code> causes the CommandMap to revert
+     * to the CommandMap returned by the
+     * <code>CommandMap.getDefaultCommandMap</code> method.
+     * Changing the CommandMap, or setting it to <code>null</code>,
+     * clears out any data cached from the previous CommandMap.
+     *
+     * @param commandMap	the CommandMap to use in this DataHandler
+     *
+     * @see javax.activation.CommandMap#setDefaultCommandMap
+     */
+    public synchronized void setCommandMap(CommandMap commandMap) {
+	if (commandMap != currentCommandMap || commandMap == null) {
+	    // clear cached values...
+	    transferFlavors = emptyFlavors;
+	    dataContentHandler = null;
+
+	    currentCommandMap = commandMap;
+	}
+    }
+
+    /**
+     * Return the <i>preferred</i> commands for this type of data.
+     * This method calls the <code>getPreferredCommands</code> method
+     * in the CommandMap associated with this instance of DataHandler.
+     * This method returns an array that represents a subset of
+     * available commands. In cases where multiple commands for the
+     * MIME type represented by this DataHandler are present, the
+     * installed CommandMap chooses the appropriate commands.
+     *
+     * @return	the CommandInfo objects representing the preferred commands
+     *
+     * @see javax.activation.CommandMap#getPreferredCommands
+     */
+    public CommandInfo[] getPreferredCommands() {
+	if (dataSource != null)
+	    return getCommandMap().getPreferredCommands(getBaseType(),
+							dataSource);
+	else
+	    return getCommandMap().getPreferredCommands(getBaseType());
+    }
+
+    /**
+     * Return all the commands for this type of data.
+     * This method returns an array containing all commands
+     * for the type of data represented by this DataHandler. The
+     * MIME type for the underlying data represented by this DataHandler
+     * is used to call through to the <code>getAllCommands</code> method
+     * of the CommandMap associated with this DataHandler.
+     *
+     * @return	the CommandInfo objects representing all the commands
+     *
+     * @see javax.activation.CommandMap#getAllCommands
+     */
+    public CommandInfo[] getAllCommands() {
+	if (dataSource != null)
+	    return getCommandMap().getAllCommands(getBaseType(), dataSource);
+	else
+	    return getCommandMap().getAllCommands(getBaseType());
+    }
+
+    /**
+     * Get the command <i>cmdName</i>. Use the search semantics as
+     * defined by the CommandMap installed in this DataHandler. The
+     * MIME type for the underlying data represented by this DataHandler
+     * is used to call through to the <code>getCommand</code> method
+     * of the CommandMap associated with this DataHandler.
+     *
+     * @param cmdName	the command name
+     * @return	the CommandInfo corresponding to the command
+     *
+     * @see javax.activation.CommandMap#getCommand
+     */
+    public CommandInfo getCommand(String cmdName) {
+	if (dataSource != null)
+	    return getCommandMap().getCommand(getBaseType(), cmdName,
+								dataSource);
+	else
+	    return getCommandMap().getCommand(getBaseType(), cmdName);
+    }
+
+    /**
+     * Return the data in its preferred Object form. <p>
+     *
+     * If the DataHandler was instantiated with an object, return
+     * the object. <p>
+     *
+     * If the DataHandler was instantiated with a DataSource,
+     * this method uses a DataContentHandler to return the content
+     * object for the data represented by this DataHandler. If no
+     * <code>DataContentHandler</code> can be found for the
+     * the type of this data, the DataHandler returns an
+     * InputStream for the data.
+     *
+     * @return the content.
+     * @exception IOException if an IOException occurs during
+     *                              this operation.
+     */
+    public Object getContent() throws IOException {
+	if (object != null)
+	    return object;
+	else
+	    return getDataContentHandler().getContent(getDataSource());
+    }
+
+    /**
+     * A convenience method that takes a CommandInfo object
+     * and instantiates the corresponding command, usually
+     * a JavaBean component.
+     * <p>
+     * This method calls the CommandInfo's <code>getCommandObject</code>
+     * method with the <code>ClassLoader</code> used to load
+     * the <code>javax.activation.DataHandler</code> class itself.
+     *
+     * @param cmdinfo	the CommandInfo corresponding to a command
+     * @return	the instantiated command object
+     */
+    public Object getBean(CommandInfo cmdinfo) {
+	Object bean = null;
+
+	try {
+	    // make the bean
+	    ClassLoader cld = null;
+	    // First try the "application's" class loader.
+	    cld = SecuritySupport.getContextClassLoader();
+	    if (cld == null)
+		cld = this.getClass().getClassLoader();
+	    bean = cmdinfo.getCommandObject(this, cld);
+	} catch (IOException e) {
+	} catch (ClassNotFoundException e) { }
+
+	return bean;
+    }
+
+    /**
+     * Get the DataContentHandler for this DataHandler: <p>
+     *
+     * If a DataContentHandlerFactory is set, use it.
+     * Otherwise look for an object to serve DCH in the
+     * following order: <p>
+     *
+     * 1) if a factory is set, use it <p>
+     * 2) if a CommandMap is set, use it <p>
+     * 3) use the default CommandMap <p>
+     *
+     * In any case, wrap the real DataContentHandler with one of our own
+     * to handle any missing cases, fill in defaults, and to ensure that
+     * we always have a non-null DataContentHandler.
+     *
+     * @return	the requested DataContentHandler
+     */
+    private synchronized DataContentHandler getDataContentHandler() {
+
+	// make sure the factory didn't change
+	if (factory != oldFactory) {
+	    oldFactory = factory;
+	    factoryDCH = null;
+	    dataContentHandler = null;
+	    transferFlavors = emptyFlavors;
+	}
+
+ 	if (dataContentHandler != null)
+ 	    return dataContentHandler;
+
+	String simpleMT = getBaseType();
+
+	if (factoryDCH == null && factory != null)
+	    factoryDCH = factory.createDataContentHandler(simpleMT);
+
+ 	if (factoryDCH != null)
+ 	    dataContentHandler = factoryDCH;
+
+	if (dataContentHandler == null) {
+	    if (dataSource != null)
+		dataContentHandler = getCommandMap().
+				createDataContentHandler(simpleMT, dataSource);
+	    else
+		dataContentHandler = getCommandMap().
+				createDataContentHandler(simpleMT);
+	}
+
+	// getDataContentHandler always uses these 'wrapper' handlers
+	// to make sure it returns SOMETHING meaningful...
+	if (dataSource != null)
+	    dataContentHandler = new DataSourceDataContentHandler(
+						      dataContentHandler,
+						      dataSource);
+	else
+	    dataContentHandler = new ObjectDataContentHandler(
+						      dataContentHandler,
+						      object,
+						      objectMimeType);
+	return dataContentHandler;
+    }
+
+    /**
+     * Use the MimeType class to extract the MIME type/subtype,
+     * ignoring the parameters.  The type is cached.
+     */
+    private synchronized String getBaseType() {
+	if (shortType == null) {
+	    String ct = getContentType();
+	    try {
+		MimeType mt = new MimeType(ct);
+		shortType = mt.getBaseType();
+	    } catch (MimeTypeParseException e) {
+		shortType = ct;
+	    }
+	}
+	return shortType;
+    }
+
+    /**
+     * Sets the DataContentHandlerFactory.  The DataContentHandlerFactory
+     * is called first to find DataContentHandlers.
+     * The DataContentHandlerFactory can only be set once.
+     * <p>
+     * If the DataContentHandlerFactory has already been set,
+     * this method throws an Error.
+     *
+     * @param newFactory	the DataContentHandlerFactory
+     * @exception Error	if the factory has already been defined.
+     *
+     * @see javax.activation.DataContentHandlerFactory
+     */
+    public static synchronized void setDataContentHandlerFactory(
+					 DataContentHandlerFactory newFactory) {
+	if (factory != null)
+	    throw new Error("DataContentHandlerFactory already defined");
+
+	SecurityManager security = System.getSecurityManager();
+	if (security != null) {
+	    try {
+		// if it's ok with the SecurityManager, it's ok with me...
+		security.checkSetFactory();
+	    } catch (SecurityException ex) {
+		// otherwise, we also allow it if this code and the
+		// factory come from the same class loader (e.g.,
+		// the JAF classes were loaded with the applet classes).
+		if (DataHandler.class.getClassLoader() !=
+			newFactory.getClass().getClassLoader())
+		    throw ex;
+	    }
+	}
+	factory = newFactory;
+    }
+}
+
+/**
+ * The DataHanderDataSource class implements the
+ * DataSource interface when the DataHandler is constructed
+ * with an Object and a mimeType string.
+ */
+class DataHandlerDataSource implements DataSource {
+    DataHandler dataHandler = null;
+
+    /**
+     * The constructor.
+     */
+    public DataHandlerDataSource(DataHandler dh) {
+	this.dataHandler = dh;
+    }
+
+    /**
+     * Returns an <code>InputStream</code> representing this object.
+     * @return	the <code>InputStream</code>
+     */
+    public InputStream getInputStream() throws IOException {
+	return dataHandler.getInputStream();
+    }
+
+    /**
+     * Returns the <code>OutputStream</code> for this object.
+     * @return	the <code>OutputStream</code>
+     */
+    public OutputStream getOutputStream() throws IOException {
+	return dataHandler.getOutputStream();
+    }
+
+    /**
+     * Returns the MIME type of the data represented by this object.
+     * @return	the MIME type
+     */
+    public String getContentType() {
+	return dataHandler.getContentType();
+    }
+
+    /**
+     * Returns the name of this object.
+     * @return	the name of this object
+     */
+    public String getName() {
+	return dataHandler.getName(); // what else would it be?
+    }
+}
+
+/*
+ * DataSourceDataContentHandler
+ *
+ * This is a <i>private</i> DataContentHandler that wraps the real
+ * DataContentHandler in the case where the DataHandler was instantiated
+ * with a DataSource.
+ */
+class DataSourceDataContentHandler implements DataContentHandler {
+    private DataSource ds = null;
+    private DataFlavor transferFlavors[] = null;
+    private DataContentHandler dch = null;
+
+    /**
+     * The constructor.
+     */
+    public DataSourceDataContentHandler(DataContentHandler dch, DataSource ds) {
+	this.ds = ds;
+	this.dch = dch;
+    }
+
+    /**
+     * Return the DataFlavors for this <code>DataContentHandler</code>.
+     * @return	the DataFlavors
+     */
+    public DataFlavor[] getTransferDataFlavors() {
+
+	if (transferFlavors == null) {
+	    if (dch != null) { // is there a dch?
+		transferFlavors = dch.getTransferDataFlavors();
+	    } else {
+		transferFlavors = new DataFlavor[1];
+		transferFlavors[0] =
+		    new ActivationDataFlavor(ds.getContentType(),
+					     ds.getContentType());
+	    }
+	}
+	return transferFlavors;
+    }
+
+    /**
+     * Return the Transfer Data of type DataFlavor from InputStream.
+     * @param df	the DataFlavor
+     * @param ds	the DataSource
+     * @return		the constructed Object
+     */
+    public Object getTransferData(DataFlavor df, DataSource ds) throws
+				UnsupportedFlavorException, IOException {
+
+	if (dch != null)
+	    return dch.getTransferData(df, ds);
+	else if (df.equals(getTransferDataFlavors()[0])) // only have one now
+	    return ds.getInputStream();
+	else
+	    throw new UnsupportedFlavorException(df);
+    }
+
+    public Object getContent(DataSource ds) throws IOException {
+
+	if (dch != null)
+	    return dch.getContent(ds);
+	else
+	    return ds.getInputStream();
+    }
+
+    /**
+     * Write the object to the output stream.
+     */
+    public void writeTo(Object obj, String mimeType, OutputStream os)
+						throws IOException {
+	if (dch != null)
+	    dch.writeTo(obj, mimeType, os);
+	else
+	    throw new UnsupportedDataTypeException(
+			"no DCH for content type " + ds.getContentType());
+    }
+}
+
+/*
+ * ObjectDataContentHandler
+ *
+ * This is a <i>private</i> DataContentHandler that wraps the real
+ * DataContentHandler in the case where the DataHandler was instantiated
+ * with an object.
+ */
+class ObjectDataContentHandler implements DataContentHandler {
+    private DataFlavor transferFlavors[] = null;
+    private Object obj;
+    private String mimeType;
+    private DataContentHandler dch = null;
+
+    /**
+     * The constructor.
+     */
+    public ObjectDataContentHandler(DataContentHandler dch,
+				    Object obj, String mimeType) {
+	this.obj = obj;
+	this.mimeType = mimeType;
+	this.dch = dch;
+    }
+
+    /**
+     * Return the DataContentHandler for this object.
+     * Used only by the DataHandler class.
+     */
+    public DataContentHandler getDCH() {
+	return dch;
+    }
+
+    /**
+     * Return the DataFlavors for this <code>DataContentHandler</code>.
+     * @return	the DataFlavors
+     */
+    public synchronized DataFlavor[] getTransferDataFlavors() {
+	if (transferFlavors == null) {
+	    if (dch != null) {
+		transferFlavors = dch.getTransferDataFlavors();
+	    } else {
+		transferFlavors = new DataFlavor[1];
+		transferFlavors[0] = new ActivationDataFlavor(obj.getClass(),
+					     mimeType, mimeType);
+	    }
+	}
+	return transferFlavors;
+    }
+
+    /**
+     * Return the Transfer Data of type DataFlavor from InputStream.
+     * @param df	the DataFlavor
+     * @param ds	the DataSource
+     * @return		the constructed Object
+     */
+    public Object getTransferData(DataFlavor df, DataSource ds)
+				throws UnsupportedFlavorException, IOException {
+
+	if (dch != null)
+	    return dch.getTransferData(df, ds);
+	else if (df.equals(getTransferDataFlavors()[0])) // only have one now
+	    return obj;
+	else
+	    throw new UnsupportedFlavorException(df);
+
+    }
+
+    public Object getContent(DataSource ds) {
+	return obj;
+    }
+
+    /**
+     * Write the object to the output stream.
+     */
+    public void writeTo(Object obj, String mimeType, OutputStream os)
+						throws IOException {
+	if (dch != null)
+	    dch.writeTo(obj, mimeType, os);
+	else if (obj instanceof byte[])
+	    os.write((byte[])obj);
+	else if (obj instanceof String) {
+	    OutputStreamWriter osw = new OutputStreamWriter(os);
+	    osw.write((String)obj);
+	    osw.flush();
+	} else
+	    throw new UnsupportedDataTypeException(
+				"no object DCH for MIME type " + this.mimeType);
+    }
+}
diff --git a/src/share/classes/javax/activation/DataSource.java b/src/share/classes/javax/activation/DataSource.java
new file mode 100644
index 0000000..5d9ed1c
--- /dev/null
+++ b/src/share/classes/javax/activation/DataSource.java
@@ -0,0 +1,99 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)DataSource.java	1.12 07/05/14
+ */
+
+package javax.activation;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+
+/**
+ * The DataSource interface provides the JavaBeans Activation Framework
+ * with an abstraction of an arbitrary collection of data.  It
+ * provides a type for that data as well as access
+ * to it in the form of <code>InputStreams</code> and
+ * <code>OutputStreams</code> where appropriate.
+ */
+
+public interface DataSource {
+
+    /**
+     * This method returns an <code>InputStream</code> representing
+     * the data and throws the appropriate exception if it can
+     * not do so.  Note that a new <code>InputStream</code> object must be
+     * returned each time this method is called, and the stream must be
+     * positioned at the beginning of the data.
+     *
+     * @return an InputStream
+     */
+    public InputStream getInputStream() throws IOException;
+
+    /**
+     * This method returns an <code>OutputStream</code> where the
+     * data can be written and throws the appropriate exception if it can
+     * not do so.  Note that a new <code>OutputStream</code> object must
+     * be returned each time this method is called, and the stream must
+     * be positioned at the location the data is to be written.
+     *
+     * @return an OutputStream
+     */
+    public OutputStream getOutputStream() throws IOException;
+
+    /**
+     * This method returns the MIME type of the data in the form of a
+     * string. It should always return a valid type. It is suggested
+     * that getContentType return "application/octet-stream" if the
+     * DataSource implementation can not determine the data type.
+     *
+     * @return the MIME Type
+     */
+    public String getContentType();
+
+    /**
+     * Return the <i>name</i> of this object where the name of the object
+     * is dependant on the nature of the underlying objects. DataSources
+     * encapsulating files may choose to return the filename of the object.
+     * (Typically this would be the last component of the filename, not an
+     * entire pathname.)
+     *
+     * @return the name of the object.
+     */
+    public String getName();
+}
diff --git a/src/share/classes/javax/activation/FileDataSource.java b/src/share/classes/javax/activation/FileDataSource.java
new file mode 100644
index 0000000..0900681
--- /dev/null
+++ b/src/share/classes/javax/activation/FileDataSource.java
@@ -0,0 +1,171 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)FileDataSource.java	1.10 07/05/14
+ */
+
+package javax.activation;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileNotFoundException;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import com.sun.activation.registries.MimeTypeFile;
+
+/**
+ * The FileDataSource class implements a simple DataSource object
+ * that encapsulates a file. It provides data typing services via
+ * a FileTypeMap object. <p>
+ *
+ * <b>FileDataSource Typing Semantics</b><p>
+ *
+ * The FileDataSource class delegates data typing of files
+ * to an object subclassed from the FileTypeMap class.
+ * The <code>setFileTypeMap</code> method can be used to explicitly
+ * set the FileTypeMap for an instance of FileDataSource. If no
+ * FileTypeMap is set, the FileDataSource will call the FileTypeMap's
+ * getDefaultFileTypeMap method to get the System's default FileTypeMap.
+ *
+ * @see javax.activation.DataSource
+ * @see javax.activation.FileTypeMap
+ * @see javax.activation.MimetypesFileTypeMap
+ */
+public class FileDataSource implements DataSource {
+
+    // keep track of original 'ref' passed in, non-null
+    // one indicated which was passed in:
+    private File _file = null;
+    private FileTypeMap typeMap = null;
+
+    /**
+     * Creates a FileDataSource from a File object. <i>Note:
+     * The file will not actually be opened until a method is
+     * called that requires the file to be opened.</i>
+     *
+     * @param file the file
+     */
+    public FileDataSource(File file) {
+	_file = file;	// save the file Object...
+    }
+
+    /**
+     * Creates a FileDataSource from
+     * the specified path name. <i>Note:
+     * The file will not actually be opened until a method is
+     * called that requires the file to be opened.</i>
+     *
+     * @param name the system-dependent file name.
+     */
+    public FileDataSource(String name) {
+	this(new File(name));	// use the file constructor
+    }
+
+    /**
+     * This method will return an InputStream representing the
+     * the data and will throw an IOException if it can
+     * not do so. This method will return a new
+     * instance of InputStream with each invocation.
+     *
+     * @return an InputStream
+     */
+    public InputStream getInputStream() throws IOException {
+	return new FileInputStream(_file);
+    }
+
+    /**
+     * This method will return an OutputStream representing the
+     * the data and will throw an IOException if it can
+     * not do so. This method will return a new instance of
+     * OutputStream with each invocation.
+     *
+     * @return an OutputStream
+     */
+    public OutputStream getOutputStream() throws IOException {
+	return new FileOutputStream(_file);
+    }
+
+    /**
+     * This method returns the MIME type of the data in the form of a
+     * string. This method uses the currently installed FileTypeMap. If
+     * there is no FileTypeMap explictly set, the FileDataSource will
+     * call the <code>getDefaultFileTypeMap</code> method on
+     * FileTypeMap to acquire a default FileTypeMap. <i>Note: By
+     * default, the FileTypeMap used will be a MimetypesFileTypeMap.</i>
+     *
+     * @return the MIME Type
+     * @see javax.activation.FileTypeMap#getDefaultFileTypeMap
+     */
+    public String getContentType() {
+	// check to see if the type map is null?
+	if (typeMap == null)
+	    return FileTypeMap.getDefaultFileTypeMap().getContentType(_file);
+	else
+	    return typeMap.getContentType(_file);
+    }
+
+    /**
+     * Return the <i>name</i> of this object. The FileDataSource
+     * will return the file name of the object.
+     *
+     * @return the name of the object.
+     * @see javax.activation.DataSource
+     */
+    public String getName() {
+	return _file.getName();
+    }
+
+    /**
+     * Return the File object that corresponds to this FileDataSource.
+     * @return the File object for the file represented by this object.
+     */
+    public File getFile() {
+	return _file;
+    }
+
+    /**
+     * Set the FileTypeMap to use with this FileDataSource
+     *
+     * @param map The FileTypeMap for this object.
+     */
+    public void setFileTypeMap(FileTypeMap map) {
+	typeMap = map;
+    }
+}
diff --git a/src/share/classes/javax/activation/FileTypeMap.java b/src/share/classes/javax/activation/FileTypeMap.java
new file mode 100644
index 0000000..8b7079e
--- /dev/null
+++ b/src/share/classes/javax/activation/FileTypeMap.java
@@ -0,0 +1,131 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)FileTypeMap.java	1.9 07/05/14
+ */
+
+package javax.activation;
+
+import java.io.File;
+
+/**
+ * The FileTypeMap is an abstract class that provides a data typing
+ * interface for files. Implementations of this class will
+ * implement the getContentType methods which will derive a content
+ * type from a file name or a File object. FileTypeMaps could use any
+ * scheme to determine the data type, from examining the file extension
+ * of a file (like the MimetypesFileTypeMap) to opening the file and
+ * trying to derive its type from the contents of the file. The
+ * FileDataSource class uses the default FileTypeMap (a MimetypesFileTypeMap
+ * unless changed) to determine the content type of files.
+ *
+ * @see javax.activation.FileTypeMap
+ * @see javax.activation.FileDataSource
+ * @see javax.activation.MimetypesFileTypeMap
+ */
+
+public abstract class FileTypeMap {
+
+    private static FileTypeMap defaultMap = null;
+
+    /**
+     * The default constructor.
+     */
+    public FileTypeMap() {
+	super();
+    }
+
+    /**
+     * Return the type of the file object. This method should
+     * always return a valid MIME type.
+     *
+     * @param file A file to be typed.
+     * @return The content type.
+     */
+    abstract public String getContentType(File file);
+
+    /**
+     * Return the type of the file passed in.  This method should
+     * always return a valid MIME type.
+     *
+     * @param filename the pathname of the file.
+     * @return The content type.
+     */
+    abstract public String getContentType(String filename);
+
+    /**
+     * Sets the default FileTypeMap for the system. This instance
+     * will be returned to callers of getDefaultFileTypeMap.
+     *
+     * @param map The FileTypeMap.
+     * @exception SecurityException if the caller doesn't have permission
+     *					to change the default
+     */
+    public static void setDefaultFileTypeMap(FileTypeMap map) {
+	SecurityManager security = System.getSecurityManager();
+	if (security != null) {
+	    try {
+		// if it's ok with the SecurityManager, it's ok with me...
+		security.checkSetFactory();
+	    } catch (SecurityException ex) {
+		// otherwise, we also allow it if this code and the
+		// factory come from the same class loader (e.g.,
+		// the JAF classes were loaded with the applet classes).
+		if (FileTypeMap.class.getClassLoader() !=
+			map.getClass().getClassLoader())
+		    throw ex;
+	    }
+	}
+	defaultMap = map;	
+    }
+
+    /**
+     * Return the default FileTypeMap for the system.
+     * If setDefaultFileTypeMap was called, return
+     * that instance, otherwise return an instance of
+     * <code>MimetypesFileTypeMap</code>.
+     *
+     * @return The default FileTypeMap
+     * @see javax.activation.FileTypeMap#setDefaultFileTypeMap
+     */
+    public static FileTypeMap getDefaultFileTypeMap() {
+	// XXX - probably should be synchronized
+	if (defaultMap == null)
+	    defaultMap = new MimetypesFileTypeMap();
+	return defaultMap;
+    }
+}
diff --git a/src/share/classes/javax/activation/MailcapCommandMap.java b/src/share/classes/javax/activation/MailcapCommandMap.java
new file mode 100644
index 0000000..5f2c319
--- /dev/null
+++ b/src/share/classes/javax/activation/MailcapCommandMap.java
@@ -0,0 +1,714 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MailcapCommandMap.java	1.42 07/05/14
+ */
+
+
+package javax.activation;
+
+import java.util.*;
+import java.io.*;
+import java.net.*;
+import com.sun.activation.registries.MailcapFile;
+import com.sun.activation.registries.LogSupport;
+
+/**
+ * MailcapCommandMap extends the CommandMap
+ * abstract class. It implements a CommandMap whose configuration
+ * is based on mailcap files
+ * (<A HREF="http://www.ietf.org/rfc/rfc1524.txt">RFC 1524</A>).
+ * The MailcapCommandMap can be configured both programmatically
+ * and via configuration files.
+ * <p>
+ * <b>Mailcap file search order:</b><p>
+ * The MailcapCommandMap looks in various places in the user's
+ * system for mailcap file entries. When requests are made
+ * to search for commands in the MailcapCommandMap, it searches  
+ * mailcap files in the following order:
+ * <p>
+ * <ol>
+ * <li> Programatically added entries to the MailcapCommandMap instance.
+ * <li> The file <code>.mailcap</code> in the user's home directory.
+ * <li> The file &lt;<i>java.home</i>&gt;<code>/lib/mailcap</code>.
+ * <li> The file or resources named <code>META-INF/mailcap</code>.
+ * <li> The file or resource named <code>META-INF/mailcap.default</code>
+ * (usually found only in the <code>activation.jar</code> file).
+ * </ol>
+ * <p>
+ * <b>Mailcap file format:</b><p>
+ *
+ * Mailcap files must conform to the mailcap
+ * file specification (RFC 1524, <i>A User Agent Configuration Mechanism
+ * For Multimedia Mail Format Information</i>). 
+ * The file format consists of entries corresponding to
+ * particular MIME types. In general, the specification 
+ * specifies <i>applications</i> for clients to use when they
+ * themselves cannot operate on the specified MIME type. The 
+ * MailcapCommandMap extends this specification by using a parameter mechanism
+ * in mailcap files that allows JavaBeans(tm) components to be specified as
+ * corresponding to particular commands for a MIME type.<p>
+ *
+ * When a mailcap file is
+ * parsed, the MailcapCommandMap recognizes certain parameter signatures,
+ * specifically those parameter names that begin with <code>x-java-</code>.
+ * The MailcapCommandMap uses this signature to find
+ * command entries for inclusion into its registries.
+ * Parameter names with the form <code>x-java-&lt;name></code>
+ * are read by the MailcapCommandMap as identifying a command
+ * with the name <i>name</i>. When the <i>name</i> is <code>
+ * content-handler</code> the MailcapCommandMap recognizes the class
+ * signified by this parameter as a <i>DataContentHandler</i>.
+ * All other commands are handled generically regardless of command 
+ * name. The command implementation is specified by a fully qualified
+ * class name of a JavaBean(tm) component. For example; a command for viewing
+ * some data can be specified as: <code>x-java-view=com.foo.ViewBean</code>.<p>
+ *
+ * When the command name is <code>fallback-entry</code>, the value of
+ * the command may be <code>true</code> or <code>false</code>.  An
+ * entry for a MIME type that includes a parameter of
+ * <code>x-java-fallback-entry=true</code> defines fallback commands
+ * for that MIME type that will only be used if no non-fallback entry
+ * can be found.  For example, an entry of the form <code>text/*; ;
+ * x-java-fallback-entry=true; x-java-view=com.sun.TextViewer</code>
+ * specifies a view command to be used for any text MIME type.  This
+ * view command would only be used if a non-fallback view command for
+ * the MIME type could not be found.<p>
+ * 
+ * MailcapCommandMap aware mailcap files have the 
+ * following general form:<p>
+ * <code>
+ * # Comments begin with a '#' and continue to the end of the line.<br>
+ * &lt;mime type>; ; &lt;parameter list><br>
+ * # Where a parameter list consists of one or more parameters,<br>
+ * # where parameters look like: x-java-view=com.sun.TextViewer<br>
+ * # and a parameter list looks like: <br>
+ * text/plain; ; x-java-view=com.sun.TextViewer; x-java-edit=com.sun.TextEdit
+ * <br>
+ * # Note that mailcap entries that do not contain 'x-java' parameters<br>
+ * # and comply to RFC 1524 are simply ignored:<br>
+ * image/gif; /usr/dt/bin/sdtimage %s<br>
+ *
+ * </code>
+ * <p>
+ *
+ * @author Bart Calder
+ * @author Bill Shannon
+ */
+
+public class MailcapCommandMap extends CommandMap {
+    /*
+     * We manage a collection of databases, searched in order.
+     * The default database is shared between all instances
+     * of this class.
+     * XXX - Can we safely share more databases between instances?
+     */
+    private static MailcapFile defDB = null;
+    private MailcapFile[] DB;
+    private static final int PROG = 0;	// programmatically added entries
+
+    /**
+     * The default Constructor.
+     */
+    public MailcapCommandMap() {
+	super();
+	List dbv = new ArrayList(5);	// usually 5 or less databases
+	MailcapFile mf = null;
+	dbv.add(null);		// place holder for PROG entry
+
+	LogSupport.log("MailcapCommandMap: load HOME");
+	try {
+	    String user_home = System.getProperty("user.home");
+
+	    if (user_home != null) {
+		String path = user_home + File.separator + ".mailcap";
+		mf = loadFile(path);
+		if (mf != null)
+		    dbv.add(mf);
+	    }
+	} catch (SecurityException ex) {}
+
+	LogSupport.log("MailcapCommandMap: load SYS");
+	try {
+	    // check system's home
+	    String system_mailcap = System.getProperty("java.home") +
+		File.separator + "lib" + File.separator + "mailcap";
+	    mf = loadFile(system_mailcap);
+	    if (mf != null)
+		dbv.add(mf);
+	} catch (SecurityException ex) {}
+
+	LogSupport.log("MailcapCommandMap: load JAR");
+	// load from the app's jar file
+	loadAllResources(dbv, "META-INF/mailcap");
+
+	LogSupport.log("MailcapCommandMap: load DEF");
+	synchronized (MailcapCommandMap.class) {
+	    // see if another instance has created this yet.
+	    if (defDB == null)
+		defDB = loadResource("/META-INF/mailcap.default");
+	}
+
+	if (defDB != null)
+	    dbv.add(defDB);
+
+	DB = new MailcapFile[dbv.size()];
+	DB = (MailcapFile[])dbv.toArray(DB);
+    }
+
+    /**
+     * Load from the named resource.
+     */
+    private MailcapFile loadResource(String name) {
+	InputStream clis = null;
+	try {
+	    clis = SecuritySupport.getResourceAsStream(this.getClass(), name);
+	    if (clis != null) {
+		MailcapFile mf = new MailcapFile(clis);
+		if (LogSupport.isLoggable())
+		    LogSupport.log("MailcapCommandMap: successfully loaded " +
+			"mailcap file: " + name);
+		return mf;
+	    } else {
+		if (LogSupport.isLoggable())
+		    LogSupport.log("MailcapCommandMap: not loading " +
+			"mailcap file: " + name);
+	    }
+	} catch (IOException e) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("MailcapCommandMap: can't load " + name, e);
+	} catch (SecurityException sex) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("MailcapCommandMap: can't load " + name, sex);
+	} finally {
+	    try {
+		if (clis != null)
+		    clis.close();
+	    } catch (IOException ex) { }	// ignore it
+	}
+	return null;
+    }
+
+    /**
+     * Load all of the named resource.
+     */
+    private void loadAllResources(List v, String name) {
+	boolean anyLoaded = false;
+	try {
+	    URL[] urls;
+	    ClassLoader cld = null;
+	    // First try the "application's" class loader.
+	    cld = SecuritySupport.getContextClassLoader();
+	    if (cld == null)
+		cld = this.getClass().getClassLoader();
+	    if (cld != null)
+		urls = SecuritySupport.getResources(cld, name);
+	    else
+		urls = SecuritySupport.getSystemResources(name);
+	    if (urls != null) {
+		if (LogSupport.isLoggable())
+		    LogSupport.log("MailcapCommandMap: getResources");
+		for (int i = 0; i < urls.length; i++) {
+		    URL url = urls[i];
+		    InputStream clis = null;
+		    if (LogSupport.isLoggable())
+			LogSupport.log("MailcapCommandMap: URL " + url);
+		    try {
+			clis = SecuritySupport.openStream(url);
+			if (clis != null) {
+			    v.add(new MailcapFile(clis));
+			    anyLoaded = true;
+			    if (LogSupport.isLoggable())
+				LogSupport.log("MailcapCommandMap: " +
+				    "successfully loaded " +
+				    "mailcap file from URL: " +
+				    url);
+			} else {
+			    if (LogSupport.isLoggable())
+				LogSupport.log("MailcapCommandMap: " +
+				    "not loading mailcap " +
+				    "file from URL: " + url);
+			}
+		    } catch (IOException ioex) {
+			if (LogSupport.isLoggable())
+			    LogSupport.log("MailcapCommandMap: can't load " +
+						url, ioex);
+		    } catch (SecurityException sex) {
+			if (LogSupport.isLoggable())
+			    LogSupport.log("MailcapCommandMap: can't load " +
+						url, sex);
+		    } finally {
+			try {
+			    if (clis != null)
+				clis.close();
+			} catch (IOException cex) { }
+		    }
+		}
+	    }
+	} catch (Exception ex) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("MailcapCommandMap: can't load " + name, ex);
+	}
+
+	// if failed to load anything, fall back to old technique, just in case
+	if (!anyLoaded) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("MailcapCommandMap: !anyLoaded");
+	    MailcapFile mf = loadResource("/" + name);
+	    if (mf != null)
+		v.add(mf);
+	}
+    }
+
+    /**
+     * Load from the named file.
+     */
+    private MailcapFile loadFile(String name) {
+	MailcapFile mtf = null;
+
+	try {
+	    mtf = new MailcapFile(name);
+	} catch (IOException e) {
+	    //	e.printStackTrace();
+	}
+	return mtf;
+    }
+
+    /**
+     * Constructor that allows the caller to specify the path
+     * of a <i>mailcap</i> file.
+     *
+     * @param fileName The name of the <i>mailcap</i> file to open
+     * @exception	IOException	if the file can't be accessed
+     */
+    public MailcapCommandMap(String fileName) throws IOException {
+	this();
+
+	if (LogSupport.isLoggable())
+	    LogSupport.log("MailcapCommandMap: load PROG from " + fileName);
+	if (DB[PROG] == null) {
+	    DB[PROG] = new MailcapFile(fileName);
+	}
+    }
+
+
+    /**
+     * Constructor that allows the caller to specify an <i>InputStream</i>
+     * containing a mailcap file.
+     *
+     * @param is	InputStream of the <i>mailcap</i> file to open
+     */
+    public MailcapCommandMap(InputStream is) {
+	this();
+
+	LogSupport.log("MailcapCommandMap: load PROG");
+	if (DB[PROG] == null) {
+	    try {
+		DB[PROG] = new MailcapFile(is);
+	    } catch (IOException ex) {
+		// XXX - should throw it
+	    }
+	}
+    }
+
+    /**
+     * Get the preferred command list for a MIME Type. The MailcapCommandMap
+     * searches the mailcap files as described above under
+     * <i>Mailcap file search order</i>.<p>
+     *
+     * The result of the search is a proper subset of available
+     * commands in all mailcap files known to this instance of 
+     * MailcapCommandMap.  The first entry for a particular command
+     * is considered the preferred command.
+     *
+     * @param mimeType	the MIME type
+     * @return the CommandInfo objects representing the preferred commands.
+     */
+    public synchronized CommandInfo[] getPreferredCommands(String mimeType) {
+	List cmdList = new ArrayList();
+	if (mimeType != null)
+	    mimeType = mimeType.toLowerCase(Locale.ENGLISH);
+
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    Map cmdMap = DB[i].getMailcapList(mimeType);
+	    if (cmdMap != null)
+		appendPrefCmdsToList(cmdMap, cmdList);
+	}
+
+	// now add the fallback commands
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    Map cmdMap = DB[i].getMailcapFallbackList(mimeType);
+	    if (cmdMap != null)
+		appendPrefCmdsToList(cmdMap, cmdList);
+	}
+
+	CommandInfo[] cmdInfos = new CommandInfo[cmdList.size()];
+	cmdInfos = (CommandInfo[])cmdList.toArray(cmdInfos);
+
+	return cmdInfos;
+    }
+
+    /**
+     * Put the commands that are in the hash table, into the list.
+     */
+    private void appendPrefCmdsToList(Map cmdHash, List cmdList) {
+	Iterator verb_enum = cmdHash.keySet().iterator();
+
+	while (verb_enum.hasNext()) {
+	    String verb = (String)verb_enum.next();
+	    if (!checkForVerb(cmdList, verb)) {
+		List cmdList2 = (List)cmdHash.get(verb); // get the list
+		String className = (String)cmdList2.get(0);
+		cmdList.add(new CommandInfo(verb, className));
+	    }
+	}
+    }
+
+    /**
+     * Check the cmdList to see if this command exists, return
+     * true if the verb is there.
+     */
+    private boolean checkForVerb(List cmdList, String verb) {
+	Iterator ee = cmdList.iterator();
+	while (ee.hasNext()) {
+	    String enum_verb =
+		(String)((CommandInfo)ee.next()).getCommandName();
+	    if (enum_verb.equals(verb))
+		return true;
+	}
+	return false;
+    }
+
+    /**
+     * Get all the available commands in all mailcap files known to
+     * this instance of MailcapCommandMap for this MIME type.
+     *
+     * @param mimeType	the MIME type
+     * @return the CommandInfo objects representing all the commands.
+     */
+    public synchronized CommandInfo[] getAllCommands(String mimeType) {
+	List cmdList = new ArrayList();
+	if (mimeType != null)
+	    mimeType = mimeType.toLowerCase(Locale.ENGLISH);
+
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    Map cmdMap = DB[i].getMailcapList(mimeType);
+	    if (cmdMap != null)
+		appendCmdsToList(cmdMap, cmdList);
+	}
+
+	// now add the fallback commands
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    Map cmdMap = DB[i].getMailcapFallbackList(mimeType);
+	    if (cmdMap != null)
+		appendCmdsToList(cmdMap, cmdList);
+	}
+
+	CommandInfo[] cmdInfos = new CommandInfo[cmdList.size()];
+	cmdInfos = (CommandInfo[])cmdList.toArray(cmdInfos);
+
+	return cmdInfos;
+    }
+
+    /**
+     * Put the commands that are in the hash table, into the list.
+     */
+    private void appendCmdsToList(Map typeHash, List cmdList) {
+	Iterator verb_enum = typeHash.keySet().iterator();
+
+	while (verb_enum.hasNext()) {
+	    String verb = (String)verb_enum.next();
+	    List cmdList2 = (List)typeHash.get(verb);
+	    Iterator cmd_enum = ((List)cmdList2).iterator();
+
+	    while (cmd_enum.hasNext()) {
+		String cmd = (String)cmd_enum.next();
+		cmdList.add(new CommandInfo(verb, cmd));
+		// cmdList.add(0, new CommandInfo(verb, cmd));
+	    }
+	}
+    }
+
+    /**
+     * Get the command corresponding to <code>cmdName</code> for the MIME type.
+     *
+     * @param mimeType	the MIME type
+     * @param cmdName	the command name
+     * @return the CommandInfo object corresponding to the command.
+     */
+    public synchronized CommandInfo getCommand(String mimeType,
+							String cmdName) {
+	if (mimeType != null)
+	    mimeType = mimeType.toLowerCase(Locale.ENGLISH);
+
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    Map cmdMap = DB[i].getMailcapList(mimeType);
+	    if (cmdMap != null) {
+		// get the cmd list for the cmd
+		List v = (List)cmdMap.get(cmdName);
+		if (v != null) {
+		    String cmdClassName = (String)v.get(0);
+
+		    if (cmdClassName != null)
+			return new CommandInfo(cmdName, cmdClassName);
+		}
+	    }
+	}
+
+	// now try the fallback list
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    Map cmdMap = DB[i].getMailcapFallbackList(mimeType);
+	    if (cmdMap != null) {
+		// get the cmd list for the cmd
+		List v = (List)cmdMap.get(cmdName);
+		if (v != null) {
+		    String cmdClassName = (String)v.get(0);
+
+		    if (cmdClassName != null)
+			return new CommandInfo(cmdName, cmdClassName);
+		}
+	    }
+	}
+	return null;
+    }
+
+    /**
+     * Add entries to the registry.  Programmatically 
+     * added entries are searched before other entries.<p>
+     *
+     * The string that is passed in should be in mailcap
+     * format.
+     *
+     * @param mail_cap a correctly formatted mailcap string
+     */
+    public synchronized void addMailcap(String mail_cap) {
+	// check to see if one exists
+	LogSupport.log("MailcapCommandMap: add to PROG");
+	if (DB[PROG] == null)
+	    DB[PROG] = new MailcapFile();
+
+	DB[PROG].appendToMailcap(mail_cap);
+    }
+
+    /**
+     * Return the DataContentHandler for the specified MIME type.
+     *
+     * @param mimeType	the MIME type
+     * @return		the DataContentHandler
+     */
+    public synchronized DataContentHandler createDataContentHandler(
+							String mimeType) {
+	if (LogSupport.isLoggable())
+	    LogSupport.log(
+		"MailcapCommandMap: createDataContentHandler for " + mimeType);
+	if (mimeType != null)
+	    mimeType = mimeType.toLowerCase(Locale.ENGLISH);
+
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    if (LogSupport.isLoggable())
+		LogSupport.log("  search DB #" + i);
+	    Map cmdMap = DB[i].getMailcapList(mimeType);
+	    if (cmdMap != null) {
+		List v = (List)cmdMap.get("content-handler");
+		if (v != null) {
+		    String name = (String)v.get(0);
+		    DataContentHandler dch = getDataContentHandler(name);
+		    if (dch != null)
+			return dch;
+		}
+	    }
+	}
+
+	// now try the fallback entries
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    if (LogSupport.isLoggable())
+		LogSupport.log("  search fallback DB #" + i);
+	    Map cmdMap = DB[i].getMailcapFallbackList(mimeType);
+	    if (cmdMap != null) {
+		List v = (List)cmdMap.get("content-handler");
+		if (v != null) {
+		    String name = (String)v.get(0);
+		    DataContentHandler dch = getDataContentHandler(name);
+		    if (dch != null)
+			return dch;
+		}
+	    }
+	}
+	return null;
+    }
+
+    private DataContentHandler getDataContentHandler(String name) {
+	if (LogSupport.isLoggable())
+	    LogSupport.log("    got content-handler");
+	if (LogSupport.isLoggable())
+	    LogSupport.log("      class " + name);
+	try {
+	    ClassLoader cld = null;
+	    // First try the "application's" class loader.
+	    cld = SecuritySupport.getContextClassLoader();
+	    if (cld == null)
+		cld = this.getClass().getClassLoader();
+	    Class cl = null;
+	    try {
+		cl = cld.loadClass(name);
+	    } catch (Exception ex) {
+		// if anything goes wrong, do it the old way
+		cl = Class.forName(name);
+	    }
+	    if (cl != null)		// XXX - always true?
+		return (DataContentHandler)cl.newInstance();
+	} catch (IllegalAccessException e) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("Can't load DCH " + name, e);
+	} catch (ClassNotFoundException e) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("Can't load DCH " + name, e);
+	} catch (InstantiationException e) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("Can't load DCH " + name, e);
+	}
+	return null;
+    }
+
+    /**
+     * Get all the MIME types known to this command map.
+     *
+     * @return		array of MIME types as strings
+     * @since	JAF 1.1
+     */
+    public synchronized String[] getMimeTypes() {
+	List mtList = new ArrayList();
+
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    String[] ts = DB[i].getMimeTypes();
+	    if (ts != null) {
+		for (int j = 0; j < ts.length; j++) {
+		    // eliminate duplicates
+		    if (!mtList.contains(ts[j]))
+			mtList.add(ts[j]);
+		}
+	    }
+	}
+
+	String[] mts = new String[mtList.size()];
+	mts = (String[])mtList.toArray(mts);
+
+	return mts;
+    }
+
+    /**
+     * Get the native commands for the given MIME type.
+     * Returns an array of strings where each string is
+     * an entire mailcap file entry.  The application
+     * will need to parse the entry to extract the actual
+     * command as well as any attributes it needs. See
+     * <A HREF="http://www.ietf.org/rfc/rfc1524.txt">RFC 1524</A>
+     * for details of the mailcap entry syntax.  Only mailcap
+     * entries that specify a view command for the specified
+     * MIME type are returned.
+     *
+     * @return		array of native command entries
+     * @since	JAF 1.1
+     */
+    public synchronized String[] getNativeCommands(String mimeType) {
+	List cmdList = new ArrayList();
+	if (mimeType != null)
+	    mimeType = mimeType.toLowerCase(Locale.ENGLISH);
+
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    String[] cmds = DB[i].getNativeCommands(mimeType);
+	    if (cmds != null) {
+		for (int j = 0; j < cmds.length; j++) {
+		    // eliminate duplicates
+		    if (!cmdList.contains(cmds[j]))
+			cmdList.add(cmds[j]);
+		}
+	    }
+	}
+
+	String[] cmds = new String[cmdList.size()];
+	cmds = (String[])cmdList.toArray(cmds);
+
+	return cmds;
+    }
+
+    /**
+     * for debugging...
+     *
+    public static void main(String[] argv) throws Exception {
+	MailcapCommandMap map = new MailcapCommandMap();
+	CommandInfo[] cmdInfo;
+
+	cmdInfo = map.getPreferredCommands(argv[0]);
+	System.out.println("Preferred Commands:");
+	for (int i = 0; i < cmdInfo.length; i++)
+	    System.out.println("Command " + cmdInfo[i].getCommandName() + " [" +
+					    cmdInfo[i].getCommandClass() + "]");
+	cmdInfo = map.getAllCommands(argv[0]);
+	System.out.println();
+	System.out.println("All Commands:");
+	for (int i = 0; i < cmdInfo.length; i++)
+	    System.out.println("Command " + cmdInfo[i].getCommandName() + " [" +
+					    cmdInfo[i].getCommandClass() + "]");
+	DataContentHandler dch = map.createDataContentHandler(argv[0]);
+	if (dch != null)
+	    System.out.println("DataContentHandler " +
+						dch.getClass().toString());
+	System.exit(0);
+    }
+    */
+}
diff --git a/src/share/classes/javax/activation/MimeType.java b/src/share/classes/javax/activation/MimeType.java
new file mode 100644
index 0000000..2c73195
--- /dev/null
+++ b/src/share/classes/javax/activation/MimeType.java
@@ -0,0 +1,357 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MimeType.java	1.21 07/05/14
+ */
+
+package javax.activation;
+
+import java.io.*;
+import java.util.Locale;
+
+/**
+ * A Multipurpose Internet Mail Extension (MIME) type, as defined
+ * in RFC 2045 and 2046.
+ */
+public class MimeType implements Externalizable {
+
+    private String    primaryType;
+    private String    subType;
+    private MimeTypeParameterList parameters;
+
+    /**
+     * A string that holds all the special chars.
+     */
+    private static final String TSPECIALS = "()<>@,;:/[]?=\\\"";
+
+    /**
+     * Default constructor.
+     */
+    public MimeType() {
+        primaryType = "application";
+        subType = "*";
+        parameters = new MimeTypeParameterList();
+    }
+
+    /**
+     * Constructor that builds a MimeType from a String.
+     *
+     * @param rawdata	the MIME type string
+     */
+    public MimeType(String rawdata) throws MimeTypeParseException {
+        parse(rawdata);
+    }
+
+    /**
+     * Constructor that builds a MimeType with the given primary and sub type
+     * but has an empty parameter list.
+     *
+     * @param primary	the primary MIME type
+     * @param sub	the MIME sub-type
+     * @exception	MimeTypeParseException	if the primary type or subtype
+     *						is not a valid token
+     */
+    public MimeType(String primary, String sub) throws MimeTypeParseException {
+        //    check to see if primary is valid
+        if (isValidToken(primary)) {
+            primaryType = primary.toLowerCase(Locale.ENGLISH);
+        } else {
+            throw new MimeTypeParseException("Primary type is invalid.");
+        }
+
+        //    check to see if sub is valid
+        if (isValidToken(sub)) {
+            subType = sub.toLowerCase(Locale.ENGLISH);
+        } else {
+            throw new MimeTypeParseException("Sub type is invalid.");
+        }
+
+        parameters = new MimeTypeParameterList();
+    }
+
+    /**
+     * A routine for parsing the MIME type out of a String.
+     */
+    private void parse(String rawdata) throws MimeTypeParseException {
+        int slashIndex = rawdata.indexOf('/');
+        int semIndex = rawdata.indexOf(';');
+        if ((slashIndex < 0) && (semIndex < 0)) {
+            //    neither character is present, so treat it
+            //    as an error
+            throw new MimeTypeParseException("Unable to find a sub type.");
+        } else if ((slashIndex < 0) && (semIndex >= 0)) {
+            //    we have a ';' (and therefore a parameter list),
+            //    but no '/' indicating a sub type is present
+            throw new MimeTypeParseException("Unable to find a sub type.");
+        } else if ((slashIndex >= 0) && (semIndex < 0)) {
+            //    we have a primary and sub type but no parameter list
+            primaryType = rawdata.substring(0, slashIndex).trim().
+						toLowerCase(Locale.ENGLISH);
+            subType = rawdata.substring(slashIndex + 1).trim().
+						toLowerCase(Locale.ENGLISH);
+            parameters = new MimeTypeParameterList();
+        } else if (slashIndex < semIndex) {
+            //    we have all three items in the proper sequence
+            primaryType = rawdata.substring(0, slashIndex).trim().
+						toLowerCase(Locale.ENGLISH);
+            subType = rawdata.substring(slashIndex + 1, semIndex).trim().
+						toLowerCase(Locale.ENGLISH);
+            parameters = new MimeTypeParameterList(rawdata.substring(semIndex));
+        } else {
+            // we have a ';' lexically before a '/' which means we
+	    // have a primary type and a parameter list but no sub type
+            throw new MimeTypeParseException("Unable to find a sub type.");
+        }
+
+        //    now validate the primary and sub types
+
+        //    check to see if primary is valid
+        if (!isValidToken(primaryType))
+            throw new MimeTypeParseException("Primary type is invalid.");
+
+        //    check to see if sub is valid
+        if (!isValidToken(subType))
+            throw new MimeTypeParseException("Sub type is invalid.");
+    }
+
+    /**
+     * Retrieve the primary type of this object.
+     *
+     * @return	the primary MIME type
+     */
+    public String getPrimaryType() {
+        return primaryType;
+    }
+
+    /**
+     * Set the primary type for this object to the given String.
+     *
+     * @param primary	the primary MIME type
+     * @exception	MimeTypeParseException	if the primary type
+     *						is not a valid token
+     */
+    public void setPrimaryType(String primary) throws MimeTypeParseException {
+        //    check to see if primary is valid
+        if (!isValidToken(primaryType))
+            throw new MimeTypeParseException("Primary type is invalid.");
+        primaryType = primary.toLowerCase(Locale.ENGLISH);
+    }
+
+    /**
+     * Retrieve the subtype of this object.
+     *
+     * @return	the MIME subtype
+     */
+    public String getSubType() {
+        return subType;
+    }
+
+    /**
+     * Set the subtype for this object to the given String.
+     *
+     * @param sub	the MIME subtype
+     * @exception	MimeTypeParseException	if the subtype
+     *						is not a valid token
+     */
+    public void setSubType(String sub) throws MimeTypeParseException {
+        //    check to see if sub is valid
+        if (!isValidToken(subType))
+            throw new MimeTypeParseException("Sub type is invalid.");
+        subType = sub.toLowerCase(Locale.ENGLISH);
+    }
+
+    /**
+     * Retrieve this object's parameter list.
+     *
+     * @return	a MimeTypeParameterList object representing the parameters
+     */
+    public MimeTypeParameterList getParameters() {
+        return parameters;
+    }
+
+    /**
+     * Retrieve the value associated with the given name, or null if there
+     * is no current association.
+     *
+     * @param name	the parameter name
+     * @return		the paramter's value
+     */
+    public String getParameter(String name) {
+        return parameters.get(name);
+    }
+
+    /**
+     * Set the value to be associated with the given name, replacing
+     * any previous association.
+     *
+     * @param name	the parameter name
+     * @param value	the paramter's value
+     */
+    public void setParameter(String name, String value) {
+        parameters.set(name, value);
+    }
+
+    /**
+     * Remove any value associated with the given name.
+     *
+     * @param name	the parameter name
+     */
+    public void removeParameter(String name) {
+        parameters.remove(name);
+    }
+
+    /**
+     * Return the String representation of this object.
+     */
+    public String toString() {
+        return getBaseType() + parameters.toString();
+    }
+
+    /**
+     * Return a String representation of this object
+     * without the parameter list.
+     *
+     * @return	the MIME type and sub-type
+     */
+    public String getBaseType() {
+        return primaryType + "/" + subType;
+    }
+
+    /**
+     * Determine if the primary and sub type of this object is
+     * the same as what is in the given type.
+     *
+     * @param type	the MimeType object to compare with
+     * @return		true if they match
+     */
+    public boolean match(MimeType type) {
+        return primaryType.equals(type.getPrimaryType())
+                    && (subType.equals("*")
+                            || type.getSubType().equals("*")
+                            || (subType.equals(type.getSubType())));
+    }
+
+    /**
+     * Determine if the primary and sub type of this object is
+     * the same as the content type described in rawdata.
+     *
+     * @param rawdata	the MIME type string to compare with
+     * @return		true if they match
+     */
+    public boolean match(String rawdata) throws MimeTypeParseException {
+        return match(new MimeType(rawdata));
+    }
+
+    /**
+     * The object implements the writeExternal method to save its contents
+     * by calling the methods of DataOutput for its primitive values or
+     * calling the writeObject method of ObjectOutput for objects, strings
+     * and arrays.
+     *
+     * @param out	the ObjectOutput object to write to
+     * @exception IOException Includes any I/O exceptions that may occur
+     */
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeUTF(toString());
+	out.flush();
+    }
+
+    /**
+     * The object implements the readExternal method to restore its
+     * contents by calling the methods of DataInput for primitive
+     * types and readObject for objects, strings and arrays.  The
+     * readExternal method must read the values in the same sequence
+     * and with the same types as were written by writeExternal.
+     *
+     * @param in	the ObjectInput object to read from
+     * @exception ClassNotFoundException If the class for an object being
+     *              restored cannot be found.
+     */
+    public void readExternal(ObjectInput in)
+				throws IOException, ClassNotFoundException {
+        try {
+            parse(in.readUTF());
+        } catch (MimeTypeParseException e) {
+            throw new IOException(e.toString());
+        }
+    }
+
+    //    below here be scary parsing related things
+
+    /**
+     * Determine whether or not a given character belongs to a legal token.
+     */
+    private static boolean isTokenChar(char c) {
+        return ((c > 040) && (c < 0177)) && (TSPECIALS.indexOf(c) < 0);
+    }
+
+    /**
+     * Determine whether or not a given string is a legal token.
+     */
+    private boolean isValidToken(String s) {
+        int len = s.length();
+        if (len > 0) {
+            for (int i = 0; i < len; ++i) {
+                char c = s.charAt(i);
+                if (!isTokenChar(c)) {
+                    return false;
+                }
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * A simple parser test,
+     * for debugging...
+     *
+    public static void main(String[] args)
+				throws MimeTypeParseException, IOException {
+        for (int i = 0; i < args.length; ++i) {
+            System.out.println("Original: " + args[i]);
+
+            MimeType type = new MimeType(args[i]);
+
+            System.out.println("Short:    " + type.getBaseType());
+            System.out.println("Parsed:   " + type.toString());
+            System.out.println();
+        }
+    }
+    */
+}
diff --git a/src/share/classes/javax/activation/MimeTypeParameterList.java b/src/share/classes/javax/activation/MimeTypeParameterList.java
new file mode 100644
index 0000000..bb0aa34
--- /dev/null
+++ b/src/share/classes/javax/activation/MimeTypeParameterList.java
@@ -0,0 +1,352 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MimeTypeParameterList.java	1.13 07/05/14
+ */
+
+package javax.activation;
+
+import java.util.Hashtable;
+import java.util.Enumeration;
+import java.util.Locale;
+
+/**
+ * A parameter list of a MimeType
+ * as defined in RFC 2045 and 2046. The Primary type of the
+ * object must already be stripped off.
+ *
+ * @see javax.activation.MimeType
+ */
+public class MimeTypeParameterList {
+    private Hashtable parameters;
+
+    /**
+     * A string that holds all the special chars.
+     */
+    private static final String TSPECIALS = "()<>@,;:/[]?=\\\"";
+
+
+    /**
+     * Default constructor.
+     */
+    public MimeTypeParameterList() {
+        parameters = new Hashtable();
+    }
+
+    /**
+     * Constructs a new MimeTypeParameterList with the passed in data.
+     *
+     * @param parameterList an RFC 2045, 2046 compliant parameter list.
+     */
+    public MimeTypeParameterList(String parameterList)
+					throws MimeTypeParseException {
+        parameters = new Hashtable();
+
+        //    now parse rawdata
+        parse(parameterList);
+    }
+
+    /**
+     * A routine for parsing the parameter list out of a String.
+     *
+     * @param parameterList an RFC 2045, 2046 compliant parameter list.
+     */
+    protected void parse(String parameterList) throws MimeTypeParseException {
+	if (parameterList == null)
+	    return;
+
+        int length = parameterList.length();
+        if (length <= 0)
+	    return;
+
+	int i;
+	char c;
+	for (i = skipWhiteSpace(parameterList, 0);
+		i < length && (c = parameterList.charAt(i)) == ';';
+		i = skipWhiteSpace(parameterList, i)) {
+	    int lastIndex;
+	    String name;
+	    String value;
+
+	    //    eat the ';'
+	    i++;
+
+	    //    now parse the parameter name
+
+	    //    skip whitespace
+	    i = skipWhiteSpace(parameterList, i);
+
+	    // tolerate trailing semicolon, even though it violates the spec
+	    if (i >= length)
+		return;
+
+	    //    find the end of the token char run
+	    lastIndex = i;
+	    while ((i < length) && isTokenChar(parameterList.charAt(i)))
+		i++;
+
+	    name = parameterList.substring(lastIndex, i).
+						toLowerCase(Locale.ENGLISH);
+
+	    //    now parse the '=' that separates the name from the value
+	    i = skipWhiteSpace(parameterList, i);
+
+	    if (i >= length || parameterList.charAt(i) != '=')
+		throw new MimeTypeParseException(
+		    "Couldn't find the '=' that separates a " +
+		    "parameter name from its value.");
+
+	    //    eat it and parse the parameter value
+	    i++;
+	    i = skipWhiteSpace(parameterList, i);
+
+	    if (i >= length)
+		throw new MimeTypeParseException(
+			"Couldn't find a value for parameter named " + name);
+
+	    //    now find out whether or not we have a quoted value
+	    c = parameterList.charAt(i);
+	    if (c == '"') {
+		//    yup it's quoted so eat it and capture the quoted string
+		i++;
+		if (i >= length)
+		    throw new MimeTypeParseException(
+			    "Encountered unterminated quoted parameter value.");
+
+		lastIndex = i;
+
+		//    find the next unescaped quote
+		while (i < length) {
+		    c = parameterList.charAt(i);
+		    if (c == '"')
+			break;
+		    if (c == '\\') {
+			//    found an escape sequence
+			//    so skip this and the
+			//    next character
+			i++;
+		    }
+		    i++;
+		}
+		if (c != '"')
+		    throw new MimeTypeParseException(
+			"Encountered unterminated quoted parameter value.");
+
+		value = unquote(parameterList.substring(lastIndex, i));
+		//    eat the quote
+		i++;
+	    } else if (isTokenChar(c)) {
+		//    nope it's an ordinary token so it
+		//    ends with a non-token char
+		lastIndex = i;
+		while (i < length && isTokenChar(parameterList.charAt(i)))
+		    i++;
+		value = parameterList.substring(lastIndex, i);
+	    } else {
+		//    it ain't a value
+		throw new MimeTypeParseException(
+			"Unexpected character encountered at index " + i);
+	    }
+
+	    //    now put the data into the hashtable
+	    parameters.put(name, value);
+	}
+	if (i < length) {
+	    throw new MimeTypeParseException(
+		"More characters encountered in input than expected.");
+	}
+    }
+
+    /**
+     * Return the number of name-value pairs in this list.
+     *
+     * @return	the number of parameters
+     */
+    public int size() {
+        return parameters.size();
+    }
+
+    /**
+     * Determine whether or not this list is empty.
+     *
+     * @return	true if there are no parameters
+     */
+    public boolean isEmpty() {
+        return parameters.isEmpty();
+    }
+
+    /**
+     * Retrieve the value associated with the given name, or null if there
+     * is no current association.
+     *
+     * @param name	the parameter name
+     * @return		the parameter's value
+     */
+    public String get(String name) {
+        return (String)parameters.get(name.trim().toLowerCase(Locale.ENGLISH));
+    }
+
+    /**
+     * Set the value to be associated with the given name, replacing
+     * any previous association.
+     *
+     * @param name	the parameter name
+     * @param value	the parameter's value
+     */
+    public void set(String name, String value) {
+        parameters.put(name.trim().toLowerCase(Locale.ENGLISH), value);
+    }
+
+    /**
+     * Remove any value associated with the given name.
+     *
+     * @param name	the parameter name
+     */
+    public void remove(String name) {
+        parameters.remove(name.trim().toLowerCase(Locale.ENGLISH));
+    }
+
+    /**
+     * Retrieve an enumeration of all the names in this list.
+     *
+     * @return	an enumeration of all parameter names
+     */
+    public Enumeration getNames() {
+        return parameters.keys();
+    }
+
+    /**
+     * Return a string representation of this object.
+     */
+    public String toString() {
+        StringBuffer buffer = new StringBuffer();
+        buffer.ensureCapacity(parameters.size() * 16);
+			//    heuristic: 8 characters per field
+
+        Enumeration keys = parameters.keys();
+        while (keys.hasMoreElements()) {
+            String key = (String)keys.nextElement();
+            buffer.append("; ");
+            buffer.append(key);
+            buffer.append('=');
+	    buffer.append(quote((String)parameters.get(key)));
+        }
+
+        return buffer.toString();
+    }
+
+    //    below here be scary parsing related things
+
+    /**
+     * Determine whether or not a given character belongs to a legal token.
+     */
+    private static boolean isTokenChar(char c) {
+        return ((c > 040) && (c < 0177)) && (TSPECIALS.indexOf(c) < 0);
+    }
+
+    /**
+     * return the index of the first non white space character in
+     * rawdata at or after index i.
+     */
+    private static int skipWhiteSpace(String rawdata, int i) {
+        int length = rawdata.length();
+	while ((i < length) && Character.isWhitespace(rawdata.charAt(i)))
+	    i++;
+        return i;
+    }
+
+    /**
+     * A routine that knows how and when to quote and escape the given value.
+     */
+    private static String quote(String value) {
+        boolean needsQuotes = false;
+
+        //    check to see if we actually have to quote this thing
+        int length = value.length();
+        for (int i = 0; (i < length) && !needsQuotes; i++) {
+            needsQuotes = !isTokenChar(value.charAt(i));
+        }
+
+        if (needsQuotes) {
+            StringBuffer buffer = new StringBuffer();
+            buffer.ensureCapacity((int)(length * 1.5));
+
+            //    add the initial quote
+            buffer.append('"');
+
+            //    add the properly escaped text
+            for (int i = 0; i < length; ++i) {
+                char c = value.charAt(i);
+                if ((c == '\\') || (c == '"'))
+                    buffer.append('\\');
+                buffer.append(c);
+            }
+
+            //    add the closing quote
+            buffer.append('"');
+
+            return buffer.toString();
+        } else {
+            return value;
+        }
+    }
+
+    /**
+     * A routine that knows how to strip the quotes and
+     * escape sequences from the given value.
+     */
+    private static String unquote(String value) {
+        int valueLength = value.length();
+        StringBuffer buffer = new StringBuffer();
+        buffer.ensureCapacity(valueLength);
+
+        boolean escaped = false;
+        for (int i = 0; i < valueLength; ++i) {
+            char currentChar = value.charAt(i);
+            if (!escaped && (currentChar != '\\')) {
+                buffer.append(currentChar);
+            } else if (escaped) {
+                buffer.append(currentChar);
+                escaped = false;
+            } else {
+                escaped = true;
+            }
+        }
+
+        return buffer.toString();
+    }
+}
diff --git a/src/share/classes/javax/activation/MimeTypeParseException.java b/src/share/classes/javax/activation/MimeTypeParseException.java
new file mode 100644
index 0000000..e106a53
--- /dev/null
+++ b/src/share/classes/javax/activation/MimeTypeParseException.java
@@ -0,0 +1,63 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MimeTypeParseException.java	1.7 07/05/14
+ */
+
+package javax.activation;
+
+/**
+ * A class to encapsulate MimeType parsing related exceptions.
+ */
+public class MimeTypeParseException extends Exception {
+
+    /**
+     * Constructs a MimeTypeParseException with no specified detail message. 
+     */
+    public MimeTypeParseException() {
+	super();
+    }
+
+    /**
+     * Constructs a MimeTypeParseException with the specified detail message. 
+     *
+     * @param   s   the detail message.
+     */
+    public MimeTypeParseException(String s) {
+	super(s);
+    }
+}
diff --git a/src/share/classes/javax/activation/MimetypesFileTypeMap.java b/src/share/classes/javax/activation/MimetypesFileTypeMap.java
new file mode 100644
index 0000000..eef6c5f
--- /dev/null
+++ b/src/share/classes/javax/activation/MimetypesFileTypeMap.java
@@ -0,0 +1,349 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)MimetypesFileTypeMap.java	1.18 07/05/14
+ */
+
+package javax.activation;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+import com.sun.activation.registries.MimeTypeFile;
+import com.sun.activation.registries.LogSupport;
+
+/**
+ * This class extends FileTypeMap and provides data typing of files
+ * via their file extension. It uses the <code>.mime.types</code> format. <p>
+ *
+ * <b>MIME types file search order:</b><p>
+ * The MimetypesFileTypeMap looks in various places in the user's
+ * system for MIME types file entries. When requests are made
+ * to search for MIME types in the MimetypesFileTypeMap, it searches  
+ * MIME types files in the following order:
+ * <p>
+ * <ol>
+ * <li> Programmatically added entries to the MimetypesFileTypeMap instance.
+ * <li> The file <code>.mime.types</code> in the user's home directory.
+ * <li> The file &lt;<i>java.home</i>&gt;<code>/lib/mime.types</code>.
+ * <li> The file or resources named <code>META-INF/mime.types</code>.
+ * <li> The file or resource named <code>META-INF/mimetypes.default</code>
+ * (usually found only in the <code>activation.jar</code> file).
+ * </ol>
+ * <p>
+ * <b>MIME types file format:</b><p>
+ *
+ * <code>
+ * # comments begin with a '#'<br>
+ * # the format is &lt;mime type> &lt;space separated file extensions><br>
+ * # for example:<br>
+ * text/plain    txt text TXT<br>
+ * # this would map file.txt, file.text, and file.TXT to<br>
+ * # the mime type "text/plain"<br>
+ * </code>
+ *
+ * @author Bart Calder
+ * @author Bill Shannon
+ */
+public class MimetypesFileTypeMap extends FileTypeMap {
+    /*
+     * We manage a collection of databases, searched in order.
+     * The default database is shared between all instances
+     * of this class.
+     * XXX - Can we safely share more databases between instances?
+     */
+    private static MimeTypeFile defDB = null;
+    private MimeTypeFile[] DB;
+    private static final int PROG = 0;	// programmatically added entries
+
+    private static String defaultType = "application/octet-stream";
+
+    /**
+     * The default constructor.
+     */
+    public MimetypesFileTypeMap() {
+	Vector dbv = new Vector(5);	// usually 5 or less databases
+	MimeTypeFile mf = null;
+	dbv.addElement(null);		// place holder for PROG entry
+
+	LogSupport.log("MimetypesFileTypeMap: load HOME");
+	try {
+	    String user_home = System.getProperty("user.home");
+
+	    if (user_home != null) {
+		String path = user_home + File.separator + ".mime.types";
+		mf = loadFile(path);
+		if (mf != null)
+		    dbv.addElement(mf);
+	    }
+	} catch (SecurityException ex) {}
+
+	LogSupport.log("MimetypesFileTypeMap: load SYS");
+	try {
+	    // check system's home
+	    String system_mimetypes = System.getProperty("java.home") +
+		File.separator + "lib" + File.separator + "mime.types";
+	    mf = loadFile(system_mimetypes);
+	    if (mf != null)
+		dbv.addElement(mf);
+	} catch (SecurityException ex) {}
+
+	LogSupport.log("MimetypesFileTypeMap: load JAR");
+	// load from the app's jar file
+	loadAllResources(dbv, "META-INF/mime.types");
+
+	LogSupport.log("MimetypesFileTypeMap: load DEF");
+	synchronized (MimetypesFileTypeMap.class) {
+	    // see if another instance has created this yet.
+	    if (defDB == null)
+		defDB = loadResource("/META-INF/mimetypes.default");
+	}
+
+	if (defDB != null)
+	    dbv.addElement(defDB);
+
+	DB = new MimeTypeFile[dbv.size()];
+	dbv.copyInto(DB);
+    }
+
+    /**
+     * Load from the named resource.
+     */
+    private MimeTypeFile loadResource(String name) {
+	InputStream clis = null;
+	try {
+	    clis = SecuritySupport.getResourceAsStream(this.getClass(), name);
+	    if (clis != null) {
+		MimeTypeFile mf = new MimeTypeFile(clis);
+		if (LogSupport.isLoggable())
+		    LogSupport.log("MimetypesFileTypeMap: successfully " +
+			"loaded mime types file: " + name);
+		return mf;
+	    } else {
+		if (LogSupport.isLoggable())
+		    LogSupport.log("MimetypesFileTypeMap: not loading " +
+			"mime types file: " + name);
+	    }
+	} catch (IOException e) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("MimetypesFileTypeMap: can't load " + name, e);
+	} catch (SecurityException sex) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("MimetypesFileTypeMap: can't load " + name, sex);
+	} finally {
+	    try {
+		if (clis != null)
+		    clis.close();
+	    } catch (IOException ex) { }	// ignore it
+	}
+	return null;
+    }
+
+    /**
+     * Load all of the named resource.
+     */
+    private void loadAllResources(Vector v, String name) {
+	boolean anyLoaded = false;
+	try {
+	    URL[] urls;
+	    ClassLoader cld = null;
+	    // First try the "application's" class loader.
+	    cld = SecuritySupport.getContextClassLoader();
+	    if (cld == null)
+		cld = this.getClass().getClassLoader();
+	    if (cld != null)
+		urls = SecuritySupport.getResources(cld, name);
+	    else
+		urls = SecuritySupport.getSystemResources(name);
+	    if (urls != null) {
+		if (LogSupport.isLoggable())
+		    LogSupport.log("MimetypesFileTypeMap: getResources");
+		for (int i = 0; i < urls.length; i++) {
+		    URL url = urls[i];
+		    InputStream clis = null;
+		    if (LogSupport.isLoggable())
+			LogSupport.log("MimetypesFileTypeMap: URL " + url);
+		    try {
+			clis = SecuritySupport.openStream(url);
+			if (clis != null) {
+			    v.addElement(new MimeTypeFile(clis));
+			    anyLoaded = true;
+			    if (LogSupport.isLoggable())
+				LogSupport.log("MimetypesFileTypeMap: " +
+				    "successfully loaded " +
+				    "mime types from URL: " + url);
+			} else {
+			    if (LogSupport.isLoggable())
+				LogSupport.log("MimetypesFileTypeMap: " +
+				    "not loading " +
+				    "mime types from URL: " + url);
+			}
+		    } catch (IOException ioex) {
+			if (LogSupport.isLoggable())
+			    LogSupport.log("MimetypesFileTypeMap: can't load " +
+						url, ioex);
+		    } catch (SecurityException sex) {
+			if (LogSupport.isLoggable())
+			    LogSupport.log("MimetypesFileTypeMap: can't load " +
+						url, sex);
+		    } finally {
+			try {
+			    if (clis != null)
+				clis.close();
+			} catch (IOException cex) { }
+		    }
+		}
+	    }
+	} catch (Exception ex) {
+	    if (LogSupport.isLoggable())
+		LogSupport.log("MimetypesFileTypeMap: can't load " + name, ex);
+	}
+
+	// if failed to load anything, fall back to old technique, just in case
+	if (!anyLoaded) {
+	    LogSupport.log("MimetypesFileTypeMap: !anyLoaded");
+	    MimeTypeFile mf = loadResource("/" + name);
+	    if (mf != null)
+		v.addElement(mf);
+	}
+    }
+
+    /**
+     * Load the named file.
+     */
+    private MimeTypeFile loadFile(String name) {
+	MimeTypeFile mtf = null;
+
+	try {
+	    mtf = new MimeTypeFile(name);
+	} catch (IOException e) {
+	    //	e.printStackTrace();
+	}
+	return mtf;
+    }
+
+    /**
+     * Construct a MimetypesFileTypeMap with programmatic entries
+     * added from the named file.
+     *
+     * @param mimeTypeFileName	the file name
+     */
+    public MimetypesFileTypeMap(String mimeTypeFileName) throws IOException {
+	this();
+	DB[PROG] = new MimeTypeFile(mimeTypeFileName);
+    }
+
+    /**
+     * Construct a MimetypesFileTypeMap with programmatic entries
+     * added from the InputStream.
+     *
+     * @param is	the input stream to read from
+     */
+    public MimetypesFileTypeMap(InputStream is) {
+	this();
+	try {
+	    DB[PROG] = new MimeTypeFile(is);
+	} catch (IOException ex) {
+	    // XXX - really should throw it
+	}
+    }
+
+    /**
+     * Prepend the MIME type values to the registry.
+     *
+     * @param mime_types A .mime.types formatted string of entries.
+     */
+    public synchronized void addMimeTypes(String mime_types) {
+	// check to see if we have created the registry
+	if (DB[PROG] == null)
+	    DB[PROG] = new MimeTypeFile(); // make one
+
+	DB[PROG].appendToRegistry(mime_types);
+    }
+
+    /**
+     * Return the MIME type of the file object.
+     * The implementation in this class calls
+     * <code>getContentType(f.getName())</code>.
+     *
+     * @param f	the file
+     * @return	the file's MIME type
+     */
+    public String getContentType(File f) {
+	return this.getContentType(f.getName());
+    }
+
+    /**
+     * Return the MIME type based on the specified file name.
+     * The MIME type entries are searched as described above under
+     * <i>MIME types file search order</i>.
+     * If no entry is found, the type "application/octet-stream" is returned.
+     *
+     * @param filename	the file name
+     * @return		the file's MIME type
+     */
+    public synchronized String getContentType(String filename) {
+	int dot_pos = filename.lastIndexOf("."); // period index
+
+	if (dot_pos < 0)
+	    return defaultType;
+
+	String file_ext = filename.substring(dot_pos + 1);
+	if (file_ext.length() == 0)
+	    return defaultType;
+
+	for (int i = 0; i < DB.length; i++) {
+	    if (DB[i] == null)
+		continue;
+	    String result = DB[i].getMIMETypeString(file_ext);
+	    if (result != null)
+		return result;
+	}
+	return defaultType;
+    }
+
+    /**
+     * for debugging...
+     *
+    public static void main(String[] argv) throws Exception {
+	MimetypesFileTypeMap map = new MimetypesFileTypeMap();
+	System.out.println("File " + argv[0] + " has MIME type " +
+						map.getContentType(argv[0]));
+	System.exit(0);
+    }
+    */
+}
diff --git a/src/share/classes/javax/activation/SecuritySupport.java b/src/share/classes/javax/activation/SecuritySupport.java
new file mode 100644
index 0000000..fbab93d
--- /dev/null
+++ b/src/share/classes/javax/activation/SecuritySupport.java
@@ -0,0 +1,144 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)SecuritySupport.java	1.4 07/05/14
+ */
+
+package javax.activation;
+
+import java.security.*;
+import java.net.*;
+import java.io.*;
+import java.util.*;
+
+/**
+ * Security related methods that only work on J2SE 1.2 and newer.
+ */
+class SecuritySupport {
+
+    private SecuritySupport() {
+	// private constructor, can't create an instance
+    }
+
+    public static ClassLoader getContextClassLoader() {
+	return (ClassLoader)
+		AccessController.doPrivileged(new PrivilegedAction() {
+	    public Object run() {
+		ClassLoader cl = null;
+		try {
+		    cl = Thread.currentThread().getContextClassLoader();
+		} catch (SecurityException ex) { }
+		return cl;
+	    }
+	});
+    }
+
+    public static InputStream getResourceAsStream(final Class c,
+				final String name) throws IOException {
+	try {
+	    return (InputStream)
+		AccessController.doPrivileged(new PrivilegedExceptionAction() {
+		    public Object run() throws IOException {
+			return c.getResourceAsStream(name);
+		    }
+		});
+	} catch (PrivilegedActionException e) {
+	    throw (IOException)e.getException();
+	}
+    }
+
+    public static URL[] getResources(final ClassLoader cl, final String name) {
+	return (URL[])
+		AccessController.doPrivileged(new PrivilegedAction() {
+	    public Object run() {
+		URL[] ret = null;
+		try {
+		    List v = new ArrayList();
+		    Enumeration e = cl.getResources(name);
+		    while (e != null && e.hasMoreElements()) {
+			URL url = (URL)e.nextElement();
+			if (url != null)
+			    v.add(url);
+		    }
+		    if (v.size() > 0) {
+			ret = new URL[v.size()];
+			ret = (URL[])v.toArray(ret);
+		    }
+		} catch (IOException ioex) {
+		} catch (SecurityException ex) { }
+		return ret;
+	    }
+	});
+    }
+
+    public static URL[] getSystemResources(final String name) {
+	return (URL[])
+		AccessController.doPrivileged(new PrivilegedAction() {
+	    public Object run() {
+		URL[] ret = null;
+		try {
+		    List v = new ArrayList();
+		    Enumeration e = ClassLoader.getSystemResources(name);
+		    while (e != null && e.hasMoreElements()) {
+			URL url = (URL)e.nextElement();
+			if (url != null)
+			    v.add(url);
+		    }
+		    if (v.size() > 0) {
+			ret = new URL[v.size()];
+			ret = (URL[])v.toArray(ret);
+		    }
+		} catch (IOException ioex) {
+		} catch (SecurityException ex) { }
+		return ret;
+	    }
+	});
+    }
+
+    public static InputStream openStream(final URL url) throws IOException {
+	try {
+	    return (InputStream)
+		AccessController.doPrivileged(new PrivilegedExceptionAction() {
+		    public Object run() throws IOException {
+			return url.openStream();
+		    }
+		});
+	} catch (PrivilegedActionException e) {
+	    throw (IOException)e.getException();
+	}
+    }
+}
diff --git a/src/share/classes/javax/activation/URLDataSource.java b/src/share/classes/javax/activation/URLDataSource.java
new file mode 100644
index 0000000..38a79e7
--- /dev/null
+++ b/src/share/classes/javax/activation/URLDataSource.java
@@ -0,0 +1,150 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)URLDataSource.java	1.11 07/05/14
+ */
+
+package javax.activation;
+
+import java.net.URL;
+import java.net.URLConnection;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+
+/**
+ * The URLDataSource class provides an object that wraps a <code>URL</code>
+ * object in a DataSource interface. URLDataSource simplifies the handling
+ * of data described by URLs within the JavaBeans Activation Framework
+ * because this class can be used to create new DataHandlers. <i>NOTE: The
+ * DataHandler object creates a URLDataSource internally,
+ * when it is constructed with a URL.</i>
+ *
+ * @see javax.activation.DataSource
+ * @see javax.activation.DataHandler
+ */
+public class URLDataSource implements DataSource {
+    private URL url = null;
+    private URLConnection url_conn = null;
+
+    /**
+     * URLDataSource constructor. The URLDataSource class will
+     * not open a connection to the URL until a method requiring it
+     * to do so is called.
+     *
+     * @param url The URL to be encapsulated in this object.
+     */
+    public URLDataSource(URL url) {
+	this.url = url;
+    }
+
+    /**
+     * Returns the value of the URL content-type header field.
+     * It calls the URL's <code>URLConnection.getContentType</code> method
+     * after retrieving a URLConnection object.
+     * <i>Note: this method attempts to call the <code>openConnection</code>
+     * method on the URL. If this method fails, or if a content type is not
+     * returned from the URLConnection, getContentType returns
+     * "application/octet-stream" as the content type.</i>
+     *
+     * @return the content type.
+     */
+    public String getContentType() {
+	String type = null;
+
+	try {
+	    if (url_conn == null)
+		url_conn = url.openConnection();
+	} catch (IOException e) { }
+	
+	if (url_conn != null)
+	    type = url_conn.getContentType();
+
+	if (type == null)
+	    type = "application/octet-stream";
+	
+	return type;
+    }
+
+    /**
+     * Calls the <code>getFile</code> method on the URL used to
+     * instantiate the object.
+     *
+     * @return the result of calling the URL's getFile method.
+     */
+    public String getName() {
+	return url.getFile();
+    }
+
+    /**
+     * The getInputStream method from the URL. Calls the
+     * <code>openStream</code> method on the URL.
+     *
+     * @return the InputStream.
+     */
+    public InputStream getInputStream() throws IOException {
+	return url.openStream();
+    }
+
+    /**
+     * The getOutputStream method from the URL. First an attempt is
+     * made to get the URLConnection object for the URL. If that
+     * succeeds, the getOutputStream method on the URLConnection
+     * is returned.
+     *
+     * @return the OutputStream.
+     */
+    public OutputStream getOutputStream() throws IOException {
+	// get the url connection if it is available
+	url_conn = url.openConnection();
+	
+	if (url_conn != null) {
+	    url_conn.setDoOutput(true);
+	    return url_conn.getOutputStream();
+	} else
+	    return null;
+    }
+
+    /**
+     * Return the URL used to create this DataSource.
+     *
+     * @return The URL.
+     */
+    public URL getURL() {
+	return url;
+    }
+}
diff --git a/src/share/classes/javax/activation/UnsupportedDataTypeException.java b/src/share/classes/javax/activation/UnsupportedDataTypeException.java
new file mode 100644
index 0000000..cb93965
--- /dev/null
+++ b/src/share/classes/javax/activation/UnsupportedDataTypeException.java
@@ -0,0 +1,70 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common Development
+ * and Distribution License("CDDL") (collectively, the "License").  You
+ * may not use this file except in compliance with the License. You can obtain
+ * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+ * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * When distributing the software, include this License Header Notice in each
+ * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+ * Sun designates this particular file as subject to the "Classpath" exception
+ * as provided by Sun in the GPL Version 2 section of the License file that
+ * accompanied this code.  If applicable, add the following below the License
+ * Header, with the fields enclosed by brackets [] replaced by your own
+ * identifying information: "Portions Copyrighted [year]
+ * [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * If you wish your version of this file to be governed by only the CDDL or
+ * only the GPL Version 2, indicate your decision by adding "[Contributor]
+ * elects to include this software in this distribution under the [CDDL or GPL
+ * Version 2] license."  If you don't indicate a single choice of license, a
+ * recipient has the option to distribute your version of this file under
+ * either the CDDL, the GPL Version 2 or to extend the choice of license to
+ * its licensees as provided above.  However, if you add GPL Version 2 code
+ * and therefore, elected the GPL Version 2 license, then the option applies
+ * only if the new code is made subject to such option by the copyright
+ * holder.
+ */
+
+/*
+ * @(#)UnsupportedDataTypeException.java	1.10 07/05/14
+ */
+
+package javax.activation;
+
+import java.io.IOException;
+
+/**
+ * Signals that the requested operation does not support the
+ * requested data type.
+ *
+ * @see javax.activation.DataHandler
+ */
+
+public class UnsupportedDataTypeException extends IOException {
+    /**
+     * Constructs an UnsupportedDataTypeException with no detail
+     * message.
+     */
+    public UnsupportedDataTypeException() {
+	super();
+    }
+
+    /**
+     * Constructs an UnsupportedDataTypeException with the specified 
+     * message.
+     * 
+     * @param s The detail message.
+     */
+    public UnsupportedDataTypeException(String s) {
+	super(s);
+    }
+}
diff --git a/src/share/classes/javax/activation/package.html b/src/share/classes/javax/activation/package.html
new file mode 100644
index 0000000..0021e7d
--- /dev/null
+++ b/src/share/classes/javax/activation/package.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<!--
+
+  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ 
+  Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
+ 
+  The contents of this file are subject to the terms of either the GNU
+  General Public License Version 2 only ("GPL") or the Common Development
+  and Distribution License("CDDL") (collectively, the "License").  You
+  may not use this file except in compliance with the License. You can obtain
+  a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
+  or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
+  language governing permissions and limitations under the License.
+ 
+  When distributing the software, include this License Header Notice in each
+  file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
+  Sun designates this particular file as subject to the "Classpath" exception
+  as provided by Sun in the GPL Version 2 section of the License file that
+  accompanied this code.  If applicable, add the following below the License
+  Header, with the fields enclosed by brackets [] replaced by your own
+  identifying information: "Portions Copyrighted [year]
+  [name of copyright owner]"
+ 
+  Contributor(s):
+ 
+  If you wish your version of this file to be governed by only the CDDL or
+  only the GPL Version 2, indicate your decision by adding "[Contributor]
+  elects to include this software in this distribution under the [CDDL or GPL
+  Version 2] license."  If you don't indicate a single choice of license, a
+  recipient has the option to distribute your version of this file under
+  either the CDDL, the GPL Version 2 or to extend the choice of license to
+  its licensees as provided above.  However, if you add GPL Version 2 code
+  and therefore, elected the GPL Version 2 license, then the option applies
+  only if the new code is made subject to such option by the copyright
+  holder.
+
+  @(#)package.html	1.2 07/05/14
+
+-->
+
+</HEAD>
+<BODY BGCOLOR="white">
+
+The JavaBeans(TM) Activation Framework is used by the JavaMail(TM)
+API to manage MIME data.
+
+</BODY>
+</HTML>
diff --git a/src/share/classes/javax/activation/tests/Bug6456395.java b/src/share/classes/javax/activation/tests/Bug6456395.java
new file mode 100644
index 0000000..29c6ea5
--- /dev/null
+++ b/src/share/classes/javax/activation/tests/Bug6456395.java
@@ -0,0 +1,43 @@
+package demo;
+
+import java.util.Arrays;
+import java.io.ByteArrayOutputStream;
+import javax.activation.DataHandler;
+
+public class Bug6456395 {
+
+    public static void main(String args[]) throws Exception {
+	Bug6456395 bug = new Bug6456395();
+	
+	if(args.length != 0) {
+	    System.out.println("usage: Bug6456395");
+	    System.exit(1);
+	}
+        String whatisyourname = "como se llama ?";	
+        byte[] hello = new byte[] {'h','o','l','a'};
+	bug.test(whatisyourname);
+        bug.test(hello);
+    }
+
+    private void test(String obj) throws Exception {
+        DataHandler dh = new DataHandler(obj, "espanol/foo");
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        dh.writeTo(bos);
+        if (obj.equals(bos.toString()))
+	    System.out.println(
+                "Test Passed for String Object and Unknown MimeType");
+        else System.out.println(
+            "Test Failed for String Object and Unknown MimeType");
+    }
+
+    private void test(byte[] obj) throws Exception {
+        DataHandler dh = new DataHandler(obj, "espanol/foo");
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        dh.writeTo(bos);
+        if (Arrays.equals((byte[])obj, bos.toByteArray()))
+            System.out.println(
+                "Test Passed for Byte array Object and Unknown MimeType");
+        else System.out.println(
+            "Test Failed for Byte array Object and Unknown MimeType");            
+    }
+}
diff --git a/src/share/classes/javax/activation/tests/readme.txt b/src/share/classes/javax/activation/tests/readme.txt
new file mode 100644
index 0000000..676e5b6
--- /dev/null
+++ b/src/share/classes/javax/activation/tests/readme.txt
@@ -0,0 +1,13 @@
+# Compile and run the test in the present directory: 
+# It is assumed that JAF sources have been compiled and activation.jar formed. 
+# Replace the jar location with the one you have elsewhere in case activation.jar 
+# has been generated/downloaded by any other means.
+
+# Compile
+% javac -d  . -cp ../../../../../../build/solaris/activation.jar Bug6456395.java
+
+# Run
+% java  -cp ../../../../../../build/solaris/activation.jar:. demo.Bug6456395
+Test Passed for String Object and Unknown MimeType
+Test Passed for Byte array Object and Unknown MimeType
+
diff --git a/src/share/classes/test/AppletTest.java b/src/share/classes/test/AppletTest.java
new file mode 100644
index 0000000..705ac28
--- /dev/null
+++ b/src/share/classes/test/AppletTest.java
@@ -0,0 +1,445 @@
+package	test;
+
+import	java.applet.*;
+import	java.awt.*;
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+import  javax.activation.*;
+
+public class	AppletTest
+	extends		Applet
+{
+
+public	AppletTest()
+{
+	
+	mTextArea = new TextArea(10, 40);
+	mTextArea.setEditable(false);
+	
+	add(mTextArea);
+}
+
+public void	init()
+{
+	StringWriter lWriter = new StringWriter();
+	try
+	{
+		String lTest = getParameter("test");
+		
+		String[] lArgs = { "file", "" };
+		lArgs[1] = getParameter(lArgs[0]);
+		
+		if(lArgs[1] == null)
+		{
+			lArgs[0] = "url";
+			lArgs[1] = getParameter(lArgs[0]);
+		}
+		
+		lWriter.write("Test: " + lTest + " " + lArgs[0] + " " + lArgs[1] + "\n\n");
+		
+		if(lTest.equals("CommandMapTest"))
+		{
+			doCommandMapTest(lWriter, lArgs);
+		}
+		else if(lTest.equals("RelCommandMapTest"))
+		{
+			doRelCommandMapTest(lWriter, lArgs);
+		}
+		else if(lTest.equals("DSWriteTest"))
+		{
+			doDSWriteTest(lWriter, lArgs);
+		}
+		else if(lTest.equals("RelDSWriteTest"))
+		{
+			doRelDSWriteTest(lWriter, lArgs);
+		}
+	}
+	catch(Exception inException)
+	{
+		lWriter.write(inException.toString() + "\n");
+	}
+	
+	mTextArea.setText(lWriter.toString());
+	mTextArea.repaint();
+}
+
+private void	doCommandMapTest(Writer outWriter, String[] inArguments) throws MalformedURLException, IOException
+{
+	CommandMap lCommandMap = CommandMap.getDefaultCommandMap();
+	
+	if(inArguments.length >= 2)
+	{
+		if(inArguments[0].equals("file"))
+		{
+			for(int lIndex = 1; lIndex < inArguments.length; ++lIndex)
+			{
+				File lFile = new File(inArguments[lIndex]);
+				FileDataSource lFileSource = new FileDataSource(lFile);
+				DataHandler ldh = new DataHandler (lFileSource);
+
+				outWriter.write("Name: " + lFileSource.getName() + "\n");
+				
+				String lMIMEType = lFileSource.getContentType();
+				outWriter.write("Type: " + lFileSource.getContentType() + "\n");
+				
+				processType(outWriter, lCommandMap, lMIMEType, ldh);
+				
+				outWriter.write("\n");
+			}
+		}
+		else if(inArguments[0].equals("url")) {
+		    System.out.println("url option not supported!!");
+
+		    //    for(int lIndex = 1; lIndex < inArguments.length; ++lIndex){
+		    // 	 URL lURL = new URL(inArguments[lIndex]);
+		    //  URLConnection lURLSource = lURL.openConnection();
+			
+		    // lURLSource.connect();
+		    // outWriter.write("Name: " + lURLSource.getName() + "\n");
+			
+		    // String lMIMEType = lURLSource.getContentType();
+		    // outWriter.write("Type: " + lURLSource.getContentType() + "\n");
+			
+		    // processType(outWriter, lCommandMap, lMIMEType);
+			
+		    //  outWriter.write("\n");
+		    // }
+		}
+	}
+	else
+	{
+		outWriter.write("usage: CommandMapTest <sourcetype> <sources>\n");
+	}
+}
+
+private void	doRelCommandMapTest(Writer outWriter, String[] inArguments) throws MalformedURLException, IOException
+{
+	CommandMap lCommandMap = CommandMap.getDefaultCommandMap();
+	
+	if(inArguments.length >= 2)
+	{
+		if(inArguments[0].equals("file"))
+		{
+			for(int lIndex = 1; lIndex < inArguments.length; ++lIndex)
+			{
+				File lFile = new File(inArguments[lIndex]);
+				FileDataSource lFileSource = new FileDataSource(lFile);
+				DataHandler ldh = new DataHandler (lFileSource);
+				
+				outWriter.write("Name: " + lFileSource.getName() + "\n");
+				
+				String lMIMEType = lFileSource.getContentType();
+				outWriter.write("Type: " + lFileSource.getContentType() + "\n");
+				
+				processType(outWriter, lCommandMap, lMIMEType, ldh);
+				
+				outWriter.write("\n");
+			}
+		}
+		else if(inArguments[0].equals("url")) {
+		   //  for(int lIndex = 1; lIndex < inArguments.length; ++lIndex){
+// 			URL lDoc = getDocumentBase();
+// 			URL lURL = new URL(lDoc, inArguments[lIndex]);
+// 			URLConnection lURLSource = lURL.openConnection();
+			
+// 			lURLSource.connect();
+// 			outWriter.write("Name: " + lURLSource.getName() + "\n");
+			
+// 			String lMIMEType = lURLSource.getContentType();
+// 			outWriter.write("Type: " + lURLSource.getContentType() + "\n");
+			
+// 			processType(outWriter, lCommandMap, lMIMEType);
+			
+// 			outWriter.write("\n");
+// 		    }
+		}
+	}
+	else
+	{
+		outWriter.write("usage: CommandMapTest <sourcetype> <sources>\n");
+	}
+}
+
+private static void	processType(Writer outWriter, CommandMap inCmdMap, String inType, DataHandler dh) throws IOException
+{
+	Object lBean;
+	Class lBeanClass;
+	
+	//	grab the preferred commands and enumerate them
+	outWriter.write("Preferred commands:\n");
+	CommandInfo[] lPreferredCmds = inCmdMap.getPreferredCommands(inType);
+	for(int lCmdIndex = 0; lCmdIndex < lPreferredCmds.length; ++lCmdIndex)
+	{
+		lBean = dh.getBean(lPreferredCmds[lCmdIndex]);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    outWriter.write("    " + lBeanClass.getName() + "\n");
+		}
+		else
+		{
+		    outWriter.write("No Bean for command " + lPreferredCmds[lCmdIndex].getCommandName());
+		}
+	}
+
+	//	grab all commands and enumerate them
+	outWriter.write("All commands:\n");
+	CommandInfo[] lAllCmds = inCmdMap.getAllCommands(inType);
+	for(int lCmdIndex = 0; lCmdIndex < lAllCmds.length; ++lCmdIndex)
+	{
+		lBean = dh.getBean(lAllCmds[lCmdIndex]);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    outWriter.write("    " + lBeanClass.getName() + "\n");
+		}
+		else
+		{
+		    outWriter.write("No Bean for command " + lAllCmds[lCmdIndex].getCommandName());
+		}
+	}
+	
+	//	grab the commands for the default three verbs view, edit & print
+	outWriter.write("View:\n");
+	CommandInfo lCmd = inCmdMap.getCommand(inType, "view");
+	if(lCmd != null)
+	{
+		lBean = dh.getBean(lCmd);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    outWriter.write("    " + lBeanClass.getName() + "\n");
+		}
+		else
+		{
+		    outWriter.write("No Bean for command " + lCmd.getCommandName());
+		}
+	}
+	else
+	{
+		outWriter.write("    None\n");
+	}
+	
+	outWriter.write("Edit:\n");
+	lCmd = inCmdMap.getCommand(inType, "edit");
+	if(lCmd != null)
+	{
+		lBean = dh.getBean(lCmd);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    outWriter.write("    " + lBeanClass.getName() + "\n");
+		}
+		else
+		{
+		    outWriter.write("No Bean for command " + lCmd.getCommandName());
+		}
+	}
+	else
+	{
+		outWriter.write("    None\n");
+	}
+	
+	outWriter.write("Print:\n");
+	lCmd = inCmdMap.getCommand(inType, "print");
+	if(lCmd != null)
+	{
+		lBean = dh.getBean(lCmd);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    outWriter.write("    " + lBeanClass.getName() + "\n");
+		}
+		else
+		{
+		    outWriter.write("No Bean for command " + lCmd.getCommandName());
+		}
+	}
+	else
+	{
+		outWriter.write("    None\n");
+	}
+}
+
+private void	doRelDSWriteTest(Writer outWriter, String[] inArguments) throws Exception, MalformedURLException, IOException
+{
+	if(inArguments.length >= 2)
+	{
+		if(inArguments[0].equals("file"))
+		{
+			for(int lFileIndex = 1; lFileIndex < inArguments.length; ++lFileIndex)
+			{
+				File lFile = new File(inArguments[lFileIndex]);
+				FileDataSource lFileSource = new FileDataSource(lFile);
+				
+				String lName = lFileSource.getName();
+				outWriter.write("Name: " + lName + "\n");
+				outWriter.write("Type: " + lFileSource.getContentType() + "\n");
+				
+				//	write some data
+				OutputStream lFileOStream = lFileSource.getOutputStream();
+				if(lFileOStream != null)
+				{
+					byte[] lFileBuffer = { 34, 35, 36, 37 };
+					lFileOStream.write(lFileBuffer);
+					lFileOStream.flush();
+					lFileOStream.close();
+					lFileOStream = null;
+					
+					//	read the same data
+					InputStream lFileIStream = lFileSource.getInputStream();
+					lFileIStream.read(lFileBuffer);
+					if((lFileBuffer[0] == 34) && (lFileBuffer[1] == 35) && (lFileBuffer[2] == 36) &&(lFileBuffer[3] == 37))
+					{
+						outWriter.write("Test Succeeded\n");
+					}
+					else
+					{
+						outWriter.write("Test Failed\n");
+					}
+					lFileIStream = null;
+					
+					if(!lFile.delete())
+					{
+						outWriter.write("couldn't delete " + lName + "\n");
+					}
+				}
+				else
+				{
+					outWriter.write("Test Failed because an OutputStream couldn't be created.\n");
+				}
+			}
+		}
+		else if(inArguments[0].equals("url")) {
+		   //  URL lDoc = getDocumentBase();
+// 		    for(int lURLIndex = 1; lURLIndex < inArguments.length; ++lURLIndex)
+// 			{
+// 			    URL lURL = new URL(lDoc, inArguments[lURLIndex]);
+			    
+// 			    outWriter.write("Name: " + lURL.getName() + "\n");
+// 			    outWriter.write("Type: " + lURL.getContentType() + "\n");
+			    
+// 				//	write some data
+// 			    OutputStream lURLOStream = lURL.getOutputStream();
+// 			    if(lURLOStream != null)	{
+// 				byte[] lURLBuffer = { 34, 35, 36, 37 };
+// 				lURLOStream.write(lURLBuffer);
+// 				lURLOStream.flush();
+// 				lURLOStream.close();
+				
+// 				//	read the same data
+// 				InputStream lURLIStream = lURL.getInputStream();
+// 				lURLIStream.read(lURLBuffer);
+// 				if((lURLBuffer[0] == 34) && (lURLBuffer[1] == 35) && (lURLBuffer[2] == 36) &&(lURLBuffer[3] == 37)) {
+// 				    outWriter.write("Test Succeeded\n");
+// 				}
+// 				else {
+// 				    outWriter.write("Test Failed\n");
+// 				}
+// 			    }
+// 			    else {
+// 				outWriter.write("Test Failed because an OutputStream couldn't be created.\n");
+// 			    }
+// 			}
+		}
+	}
+	else
+	{
+		outWriter.write("usage: DataSourceTest <kind of source> <name of source>\n");
+	}
+}
+
+private void	doDSWriteTest(Writer outWriter, String[] inArguments) throws Exception, MalformedURLException, IOException
+{
+	if(inArguments.length >= 2)
+	{
+		if(inArguments[0].equals("file"))
+		{
+			for(int lFileIndex = 1; lFileIndex < inArguments.length; ++lFileIndex)
+			{
+				File lFile = new File(inArguments[lFileIndex]);
+				FileDataSource lFileSource = new FileDataSource(lFile);
+				
+				String lName = lFileSource.getName();
+				outWriter.write("Name: " + lName + "\n");
+				outWriter.write("Type: " + lFileSource.getContentType() + "\n");
+				
+				//	write some data
+				OutputStream lFileOStream = lFileSource.getOutputStream();
+				if(lFileOStream != null)
+				{
+					byte[] lFileBuffer = { 34, 35, 36, 37 };
+					lFileOStream.write(lFileBuffer);
+					lFileOStream.flush();
+					lFileOStream.close();
+					lFileOStream = null;
+					
+					//	read the same data
+					InputStream lFileIStream = lFileSource.getInputStream();
+					lFileIStream.read(lFileBuffer);
+					if((lFileBuffer[0] == 34) && (lFileBuffer[1] == 35) && (lFileBuffer[2] == 36) &&(lFileBuffer[3] == 37))
+					{
+						outWriter.write("Test Succeeded\n");
+					}
+					else
+					{
+						outWriter.write("Test Failed\n");
+					}
+					lFileIStream = null;
+					
+					if(!lFile.delete())
+					{
+						outWriter.write("couldn't delete " + lName + "\n");
+					}
+				}
+				else
+				{
+					outWriter.write("Test Failed because an OutputStream couldn't be created.\n");
+				}
+			}
+		}
+		else if(inArguments[0].equals("url")) {
+		 //    for(int lURLIndex = 1; lURLIndex < inArguments.length; ++lURLIndex) {
+// 			URL lURL = new URL(inArguments[lURLIndex]);
+			
+// 			outWriter.write("Name: " + lURL.getName() + "\n");
+// 			outWriter.write("Type: " + lURL.getContentType() + "\n");
+			
+// 				//	write some data
+// 			OutputStream lURLOStream = lURL.getOutputStream();
+// 			if(lURLOStream != null)
+// 			    {
+// 				byte[] lURLBuffer = { 34, 35, 36, 37 };
+// 				lURLOStream.write(lURLBuffer);
+// 				lURLOStream.flush();
+// 				lURLOStream.close();
+				
+// 				//	read the same data
+// 				InputStream lURLIStream = lURL.getInputStream();
+// 				lURLIStream.read(lURLBuffer);
+// 				if((lURLBuffer[0] == 34) && (lURLBuffer[1] == 35) && (lURLBuffer[2] == 36) &&(lURLBuffer[3] == 37))
+// 				    {
+// 					outWriter.write("Test Succeeded\n");
+// 				    }
+// 				else
+// 				    {
+// 					outWriter.write("Test Failed\n");
+// 				    }
+// 			    }
+// 			else
+// 			    {
+// 				outWriter.write("Test Failed because an OutputStream couldn't be created.\n");
+// 			    }
+// 		    }
+ 		}
+	}
+	else
+	    {
+		outWriter.write("usage: DataSourceTest <kind of source> <name of source>\n");
+	    }
+}
+
+private TextArea	mTextArea;
+
+}
diff --git a/src/share/classes/test/CLTest.java b/src/share/classes/test/CLTest.java
new file mode 100644
index 0000000..0707a16
--- /dev/null
+++ b/src/share/classes/test/CLTest.java
@@ -0,0 +1,24 @@
+/**
+ * NOTE: This test only works on JDK 1.2!!
+ */
+package	test;
+
+import	java.net.*;
+
+class	CLTest
+{
+
+public static void	main(String[] inArgs)
+{
+	URL[] lURLs = ClassLoader.getSystemResources(inArgs[0]);
+	
+	System.out.println("Looking for resources named " + inArgs[0]);
+	System.out.println("Found:");
+	
+	for(int lIndex = 0; lIndex < lURLs.length; ++lIndex)
+	{
+		System.out.println("    " + lURLs[lIndex].toString());
+	}
+}
+
+}
diff --git a/src/share/classes/test/CommandMapTest.java b/src/share/classes/test/CommandMapTest.java
new file mode 100644
index 0000000..7dd5ecb
--- /dev/null
+++ b/src/share/classes/test/CommandMapTest.java
@@ -0,0 +1,144 @@
+package	test;
+
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+import  javax.activation.*;
+public class	CommandMapTest
+{
+
+public static void	main(String[] inArguments) throws MalformedURLException, IOException
+{
+	CommandMap lCommandMap = CommandMap.getDefaultCommandMap();
+	
+	if(inArguments.length >= 2)
+	{
+		if(inArguments[0].equals("file"))
+		{
+			for(int lIndex = 1; lIndex < inArguments.length; ++lIndex)
+			{
+				File lFile = new File(inArguments[lIndex]);
+				FileDataSource lFileSource = new FileDataSource(lFile);
+				DataHandler ldh = new DataHandler(lFileSource);
+				
+				System.out.println("Name: " + lFileSource.getName());
+				
+				String lMIMEType = lFileSource.getContentType();
+				System.out.println("Type: " + lFileSource.getContentType());
+				
+				processType(lCommandMap, lMIMEType, ldh);
+				
+				System.out.println("");
+			}
+		}
+		else if(inArguments[0].equals("url"))
+		{
+
+		    System.out.println("URL not supported...");
+// 			for(int lIndex = 1; lIndex < inArguments.length; ++lIndex)
+// 			{
+// 				URL lURL = new URL(inArguments[lIndex]);
+// 				URLConnection lURLSource = lURL.openConnection();
+				
+// 				lURLSource.connect();
+// 				System.out.println("Name: " + lURLSource.getName());
+				
+// 				String lMIMEType = lURLSource.getContentType();
+// 				System.out.println("Type: " + lURLSource.getContentType());
+				
+// 				processType(lCommandMap, lMIMEType);
+				
+// 				System.out.println("");
+// 			}
+		}
+	}
+	else
+	{
+		System.out.println("usage: CommandMapTest <sourcetype> <sources>");
+	}
+}
+
+// MH we now passed in a dh, currently there's no acccessor for CommandInfo.className. 
+// so use dh.getBean().getClass().getClassName().  if/when there is an accessor just do:
+// System.out.println("    " + lPreferredCmds[lCmdIndex].getClassName());
+private static void	processType(CommandMap inCmdMap, String inType, DataHandler dh)
+{
+	Object lBean;
+	Class lBeanClass;
+	
+	//	grab the preferred commands and enumerate them
+	System.out.println("Preferred commands:");
+	CommandInfo[] lPreferredCmds = inCmdMap.getPreferredCommands(inType);
+	for(int lCmdIndex = 0; lCmdIndex < lPreferredCmds.length; ++lCmdIndex)
+	{
+		lBean = dh.getBean(lPreferredCmds[lCmdIndex]);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    System.out.println("    " + lBeanClass.getName());
+		}
+		else
+		{
+		    System.out.print("No Bean for command " + lPreferredCmds[lCmdIndex].getCommandName());
+		}
+	}
+
+	//	grab all commands and enumerate them
+	System.out.println("All commands:");
+	CommandInfo[] lAllCmds = inCmdMap.getAllCommands(inType);
+	for(int lCmdIndex = 0; lCmdIndex < lAllCmds.length; ++lCmdIndex)
+	{
+		lBean = dh.getBean(lAllCmds[lCmdIndex]);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    System.out.println("    " + lBeanClass.getName());
+		}
+		else
+		{
+		    System.out.print("No Bean for command " + lAllCmds[lCmdIndex].getCommandName());
+		}
+	}
+	
+	//	grab the commands for the default three verbs view, edit & print
+	System.out.println("View:");
+	CommandInfo lCmd = inCmdMap.getCommand(inType, "view");
+	if(lCmd != null)
+	{
+		lBean = dh.getBean(lCmd);
+		lBeanClass = lBean.getClass();
+		System.out.println("    " + lBeanClass.getName());
+	}
+	else
+	{
+		System.out.println("    None");
+	}
+	
+	System.out.println("Edit:");
+	lCmd = inCmdMap.getCommand(inType, "edit");
+	if(lCmd != null)
+	{
+		lBean = dh.getBean(lCmd);
+		lBeanClass = lBean.getClass();
+		System.out.println("    " + lBeanClass.getName());
+	}
+	else
+	{
+		System.out.println("    None");
+	}
+	
+	System.out.println("Print:");
+	lCmd = inCmdMap.getCommand(inType, "print");
+	if(lCmd != null)
+	{
+		lBean = dh.getBean(lCmd);
+		lBeanClass = lBean.getClass();
+		System.out.println("    " + lBeanClass.getName());
+	}
+	else
+	{
+		System.out.println("    None");
+	}
+}
+
+}
diff --git a/src/share/classes/test/DHTransferableTest.java b/src/share/classes/test/DHTransferableTest.java
new file mode 100644
index 0000000..bf2b784
--- /dev/null
+++ b/src/share/classes/test/DHTransferableTest.java
@@ -0,0 +1,84 @@
+package	test;
+
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+import	java.awt.datatransfer.*;
+import  javax.activation.*;
+
+public class	DHTransferableTest
+{
+
+public static final DataFlavor	sImageJPEGFlavor = new DataFlavor("image/jpeg", "JPEG image");
+public static final DataFlavor	sImageGIFFlavor = new DataFlavor("image/gif", "GIF image");
+public static final DataFlavor	sTextFlavor = new DataFlavor("text/*", "text");
+public static final DataFlavor	sTextPlainFlavor = new DataFlavor("text/plain", "plain text");
+public static final DataFlavor	sTextHTMLFlavor = new DataFlavor("text/html", "HTML document");
+
+public static void	main(String[] inArguments) throws MalformedURLException, IOException
+{
+	DataHandler lDataHandler;
+	
+	if(inArguments.length >= 2)
+	{
+		if(inArguments[0].equals("file"))
+		{
+			for(int lIndex = 1; lIndex < inArguments.length; ++lIndex)
+			{
+				processDataHandler(new DataHandler(new FileDataSource(new File(inArguments[lIndex]))));
+			}
+		}
+		else if(inArguments[0].equals("url")) {
+		    System.out.println("URL not supported...");
+		    // 			for(int lIndex = 1; lIndex < inArguments.length; ++lIndex)
+		    // 			{
+		    // 				processDataHandler(new URL(inArguments[lIndex]));
+		    // 			}
+		}
+	}
+	else
+	{
+		System.out.println("usage: DataHandlerTest <sourcetype> <sources>");
+	}
+}
+
+private static void	processDataHandler(DataHandler inDataHandler) throws IOException
+{
+	System.out.println("Name: " + inDataHandler.getName());
+	System.out.println("Type: " + inDataHandler.getContentType());
+	
+	//	find out what flavors the handler thinks are supported
+	System.out.println("Says it supports:");
+	DataFlavor[] lFlavors = inDataHandler.getTransferDataFlavors();
+	for(int lIndex = 0; lIndex < lFlavors.length; ++lIndex)
+	{
+		System.out.println("    " + lFlavors[lIndex].getHumanPresentableName() + " (" + lFlavors[lIndex].getMimeType() + ")");
+	}
+	
+	//	now query to see what of our basic flavors are supported
+	queryFlavor(inDataHandler, DataFlavor.plainTextFlavor);
+	queryFlavor(inDataHandler, DataFlavor.stringFlavor);
+	queryFlavor(inDataHandler, sImageJPEGFlavor);
+	queryFlavor(inDataHandler, sImageGIFFlavor);
+	queryFlavor(inDataHandler, sTextFlavor);
+	queryFlavor(inDataHandler, sTextPlainFlavor);
+	queryFlavor(inDataHandler, sTextHTMLFlavor);
+	
+	System.out.println("");
+}
+
+private static void	queryFlavor(DataHandler inDataHandler, DataFlavor inFlavor)
+{
+	
+	if(inDataHandler.isDataFlavorSupported(inFlavor))
+	{
+		System.out.print("Supports ");
+	}
+	else
+	{
+		System.out.print("Doesn't support ");
+	}
+	System.out.println(inFlavor.getHumanPresentableName() + " (" + inFlavor.getMimeType() + ")");
+}
+
+}
diff --git a/src/share/classes/test/DSWriteTest.java b/src/share/classes/test/DSWriteTest.java
new file mode 100644
index 0000000..fac3a52
--- /dev/null
+++ b/src/share/classes/test/DSWriteTest.java
@@ -0,0 +1,104 @@
+package	test;
+
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+import  javax.activation.*;
+
+public class	DSWriteTest
+{
+
+public static void	main(String[] inArguments) throws Exception, MalformedURLException, IOException
+{
+	if(inArguments.length >= 2)
+	{
+		if(inArguments[0].equals("file"))
+		{
+			for(int lFileIndex = 1; lFileIndex < inArguments.length; ++lFileIndex)
+			{
+				File lFile = new File(inArguments[lFileIndex]);
+				FileDataSource lFileSource = new FileDataSource(lFile);
+				
+				String lName = lFileSource.getName();
+				System.out.println("Name: " + lName);
+				System.out.println("Type: " + lFileSource.getContentType());
+				
+				//	write some data
+				OutputStream lFileOStream = lFileSource.getOutputStream();
+				if(lFileOStream != null)
+				{
+					byte[] lFileBuffer = { 34, 35, 36, 37 };
+					lFileOStream.write(lFileBuffer);
+					lFileOStream.flush();
+					lFileOStream.close();
+					lFileOStream = null;
+					
+					//	read the same data
+					InputStream lFileIStream = lFileSource.getInputStream();
+					lFileIStream.read(lFileBuffer);
+					if((lFileBuffer[0] == 34) && (lFileBuffer[1] == 35) && (lFileBuffer[2] == 36) &&(lFileBuffer[3] == 37))
+					{
+						System.out.println("Test Succeeded");
+					}
+					else
+					{
+						System.out.println("Test Failed");
+					}
+					lFileIStream = null;
+					
+					if(!lFile.delete())
+					{
+						System.out.println("couldn't delete " + lName);
+					}
+				}
+				else
+				{
+					System.out.println("Test Failed because an OutputStream couldn't be created.");
+				}
+			}
+		}
+		else if(inArguments[0].equals("url"))
+		{
+		    System.out.println("URL not supported...");
+// 			for(int lURLIndex = 1; lURLIndex < inArguments.length; ++lURLIndex)
+// 			{
+// 				URL lURL = new URL(inArguments[lURLIndex]);
+				
+// 				System.out.println("Name: " + lURL.getName());
+// 				System.out.println("Type: " + lURL.getContentType());
+				
+// 				//	write some data
+// 				OutputStream lURLOStream = lURL.getOutputStream();
+// 				if(lURLOStream != null)
+// 				{
+// 					byte[] lURLBuffer = { 34, 35, 36, 37 };
+// 					lURLOStream.write(lURLBuffer);
+// 					lURLOStream.flush();
+// 					lURLOStream.close();
+					
+// 					//	read the same data
+// 					InputStream lURLIStream = lURL.getInputStream();
+// 					lURLIStream.read(lURLBuffer);
+// 					if((lURLBuffer[0] == 34) && (lURLBuffer[1] == 35) && (lURLBuffer[2] == 36) &&(lURLBuffer[3] == 37))
+// 					{
+// 						System.out.println("Test Succeeded");
+// 					}
+// 					else
+// 					{
+// 						System.out.println("Test Failed");
+// 					}
+// 				}
+// 				else
+// 				{
+// 					System.out.println("Test Failed because an OutputStream couldn't be created.");
+// 				}
+// 			}
+		}
+	}
+	else
+	{
+		System.out.println("usage: DataSourceTest <kind of source> <name of source>");
+	}
+}
+
+}
diff --git a/src/share/classes/test/DataHandlerTest.java b/src/share/classes/test/DataHandlerTest.java
new file mode 100644
index 0000000..e786cd3
--- /dev/null
+++ b/src/share/classes/test/DataHandlerTest.java
@@ -0,0 +1,163 @@
+package	test;
+
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+import  javax.activation.*;
+
+public class	DataHandlerTest
+{
+
+public static void	main(String[] inArguments) throws MalformedURLException, IOException
+{
+	DataHandler lDataHandler;
+	
+	if(inArguments.length >= 2)
+	{
+		if(inArguments[0].equals("file"))
+		{
+			for(int lIndex = 1; lIndex < inArguments.length; ++lIndex)
+			{
+				processDataHandler(new DataHandler(new FileDataSource(new File(inArguments[lIndex]))));
+			}
+		}
+		else if(inArguments[0].equals("url"))
+		{
+		    System.out.println("URL not supported...");
+// 			for(int lIndex = 1; lIndex < inArguments.length; ++lIndex)
+// 			{
+// 				processDataHandler(new URL(inArguments[lIndex]));
+// 			}
+		}
+	}
+	else
+	{
+		System.out.println("usage: DataHandlerTest <sourcetype> <sources>");
+	}
+}
+
+private static void	processDataHandler(DataHandler inDataHandler) throws IOException
+{
+	System.out.println("Name: " + inDataHandler.getName());
+	System.out.println("Type: " + inDataHandler.getContentType());
+				
+	Object lBean;
+	Class lBeanClass;
+	String lType = inDataHandler.getContentType();
+	
+	//	grab the preferred commands and enumerate them
+	System.out.println("Preferred commands:");
+	CommandInfo[] lPreferredCmds = inDataHandler.getPreferredCommands();
+	for(int lCmdIndex = 0; lCmdIndex < lPreferredCmds.length; ++lCmdIndex)
+	{
+		lBean = inDataHandler.getBean(lPreferredCmds[lCmdIndex]);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    System.out.println("    " + lBeanClass.getName());
+		}
+		else
+		{
+		    System.out.print("No Bean for command " + lPreferredCmds[lCmdIndex].getCommandName());
+		}
+	}
+
+	//	grab all commands and enumerate them
+	System.out.println("All commands:");
+	CommandInfo[] lAllCmds = inDataHandler.getAllCommands();
+	for(int lCmdIndex = 0; lCmdIndex < lAllCmds.length; ++lCmdIndex)
+	{
+		lBean = inDataHandler.getBean(lAllCmds[lCmdIndex]);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    System.out.println("    " + lBeanClass.getName());
+		}
+		else
+		{
+		    System.out.print("No Bean for command " + lAllCmds[lCmdIndex].getCommandName());
+		}
+	}
+	
+	//	grab the commands for the default three verbs view, edit & print
+	System.out.println("View:");
+	CommandInfo lCmd = inDataHandler.getCommand("view");
+	if(lCmd != null)
+	{
+		lBean = inDataHandler.getBean(lCmd);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    System.out.println("    " + lBeanClass.getName());
+		}
+		else
+		{
+		    System.out.print("No Bean for command " + lCmd.getCommandName());
+		}
+	}
+	else
+	{
+		System.out.println("    None");
+	}
+	
+	System.out.println("Edit:");
+	lCmd = inDataHandler.getCommand("edit");
+	if(lCmd != null)
+	{
+		lBean = inDataHandler.getBean(lCmd);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    System.out.println("    " + lBeanClass.getName());
+		}
+		else
+		{
+		    System.out.print("No Bean for command " + lCmd.getCommandName());
+		}
+	}
+	else
+	{
+		System.out.println("    None");
+	}
+	
+	System.out.println("Print:");
+	lCmd = inDataHandler.getCommand("print");
+	if(lCmd != null)
+	{
+		lBean = inDataHandler.getBean(lCmd);
+		if (lBean != null)
+		{
+		    lBeanClass = lBean.getClass();
+		    System.out.println("    " + lBeanClass.getName());
+		}
+		else
+		{
+		    System.out.print("No Bean for command " + lCmd.getCommandName());
+		}
+	}
+	else
+	{
+		System.out.println("    None");
+	}
+	
+	//	read some data
+
+	InputStream lInputStream = null;
+	try {
+	    lInputStream= inDataHandler.getInputStream();
+	} catch (Exception e) {
+	    System.out.println("ERROR: Caught an exception: " + e);
+	}
+	System.out.print("Byte 0: ");
+	System.out.println(lInputStream.read());
+	System.out.print("Byte 1: ");
+	System.out.println(lInputStream.read());
+	System.out.print("Byte 2: ");
+	System.out.println(lInputStream.read());
+	System.out.print("Byte 3: ");
+	System.out.println(lInputStream.read());
+	
+	System.out.println("");
+}
+
+}
diff --git a/src/share/classes/test/DataSourceTest.java b/src/share/classes/test/DataSourceTest.java
new file mode 100644
index 0000000..dd2ea8c
--- /dev/null
+++ b/src/share/classes/test/DataSourceTest.java
@@ -0,0 +1,52 @@
+package	test;
+
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+import  javax.activation.*;
+
+public class	DataSourceTest
+{
+
+    public static void	main(String[] inArguments) throws Exception, MalformedURLException, IOException {
+	if(inArguments.length >= 2) {
+	    if(inArguments[0].equals("file")){
+		for(int lIndex = 1; lIndex < inArguments.length; ++lIndex) {
+		    processSource(new FileDataSource(new File(inArguments[lIndex])));
+		}
+	    }
+	    else if(inArguments[0].equals("url"))
+		{
+		    System.out.println("URL is not supported...");
+		// 	for(int lIndex = 1; lIndex < inArguments.length; ++lIndex)
+// 			{
+// 				processSource((new URL(inArguments[lIndex])).openConnection());
+// 			}
+		}
+	}
+	else
+	{
+		System.out.println("usage: DataSourceTest <test> <sources>");
+	}
+}
+
+private static void	processSource(DataSource inSource) throws Exception, IOException
+{
+	System.out.println("Name: " + inSource.getName());
+	System.out.println("Type: " + inSource.getContentType());
+	
+	//	read some data
+	InputStream lInputStream = inSource.getInputStream();
+	System.out.print("Byte 0: ");
+	System.out.println(lInputStream.read());
+	System.out.print("Byte 1: ");
+	System.out.println(lInputStream.read());
+	System.out.print("Byte 2: ");
+	System.out.println(lInputStream.read());
+	System.out.print("Byte 3: ");
+	System.out.println(lInputStream.read());
+	
+	System.out.println("");
+}
+
+}
diff --git a/src/share/classes/test/SerMaker.java b/src/share/classes/test/SerMaker.java
new file mode 100644
index 0000000..a9de022
--- /dev/null
+++ b/src/share/classes/test/SerMaker.java
@@ -0,0 +1,35 @@
+package test;
+
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+
+class	SerMaker
+{
+
+public static void	main(String[] inArgs) throws IOException, MalformedURLException
+{
+	if(inArgs.length == 1)
+	{
+		//	first set up the output stream
+		File lFile = new File(inArgs[0]);
+		FileOutputStream lFileStream = new FileOutputStream(lFile);
+		ObjectOutputStream lObjectStream = new ObjectOutputStream(lFileStream);
+		
+		//	now create a URL
+		URL lURL = new URL("http://java.sun.com/");
+		
+		//	serialize it
+		lObjectStream.writeObject(lURL);
+		
+		//	clean up the stream
+		lObjectStream.flush();
+		lObjectStream.close();
+	}
+	else
+	{
+		System.out.println("usage: SerMaker <name of output file>");
+	}
+}
+
+}
diff --git a/src/share/classes/test/SerMaker11.java b/src/share/classes/test/SerMaker11.java
new file mode 100644
index 0000000..76b461c
--- /dev/null
+++ b/src/share/classes/test/SerMaker11.java
@@ -0,0 +1,35 @@
+package test;
+
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+
+class	SerMaker11
+{
+
+public static void	main(String[] inArgs) throws IOException, MalformedURLException
+{
+	if(inArgs.length == 1)
+	{
+		//	first set up the output stream
+		File lFile = new File(inArgs[0]);
+		FileOutputStream lFileStream = new FileOutputStream(lFile);
+		ObjectOutputStream lObjectStream = new ObjectOutputStream(lFileStream);
+		
+		//	now create a URL
+		URL lURL = new URL("http://java.sun.com/");
+		
+		//	serialize it
+		lObjectStream.writeObject(lURL);
+		
+		//	clean up the stream
+		lObjectStream.flush();
+		lObjectStream.close();
+	}
+	else
+	{
+		System.out.println("usage: SerMaker <name of output file>");
+	}
+}
+
+}
diff --git a/src/share/classes/test/SerReader.java b/src/share/classes/test/SerReader.java
new file mode 100644
index 0000000..8d6a83a
--- /dev/null
+++ b/src/share/classes/test/SerReader.java
@@ -0,0 +1,38 @@
+package test;
+
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+
+class	SerReader
+{
+
+public static void	main(String[] inArgs) throws FileNotFoundException, StreamCorruptedException, IOException, ClassNotFoundException, OptionalDataException
+{
+	if(inArgs.length == 1)
+	{
+		//	first set up the input stream
+		File lFile = new File(inArgs[0]);
+		FileInputStream lFileStream = new FileInputStream(lFile);
+		ObjectInputStream lObjectStream = new ObjectInputStream(lFileStream);
+		
+		//	now read a URL
+		URL lURL = (URL)lObjectStream.readObject();
+		
+		//	verify it is the correct url
+		if(lURL.toString().equals("http://java.sun.com/"))
+		{
+			System.out.println("Test succeeded");
+		}
+		else
+		{
+			System.out.println("Test failed");
+		}
+	}
+	else
+	{
+		System.out.println("usage: SerReader <name of input file>");
+	}
+}
+
+}
diff --git a/src/share/classes/test/SerReader11.java b/src/share/classes/test/SerReader11.java
new file mode 100644
index 0000000..d71b911
--- /dev/null
+++ b/src/share/classes/test/SerReader11.java
@@ -0,0 +1,38 @@
+package test;
+
+import	java.beans.*;
+import	java.io.*;
+import	java.net.*;
+
+class	SerReader11
+{
+
+public static void	main(String[] inArgs) throws FileNotFoundException, StreamCorruptedException, IOException, ClassNotFoundException, OptionalDataException
+{
+	if(inArgs.length == 1)
+	{
+		//	first set up the input stream
+		File lFile = new File(inArgs[0]);
+		FileInputStream lFileStream = new FileInputStream(lFile);
+		ObjectInputStream lObjectStream = new ObjectInputStream(lFileStream);
+		
+		//	now read a URL
+		URL lURL = (URL)lObjectStream.readObject();
+		
+		//	verify it is the correct url
+		if(lURL.toString().equals("http://java.sun.com/"))
+		{
+			System.out.println("Test succeeded");
+		}
+		else
+		{
+			System.out.println("Test failed");
+		}
+	}
+	else
+	{
+		System.out.println("usage: SerReader <name of input file>");
+	}
+}
+
+}
diff --git a/src/share/classes/test/UrlCheck.java b/src/share/classes/test/UrlCheck.java
new file mode 100644
index 0000000..3ab1705
--- /dev/null
+++ b/src/share/classes/test/UrlCheck.java
@@ -0,0 +1,130 @@
+/**
+ * This is an application built to check the URL additions to the JAF
+ */
+package	test;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.net.*;
+import java.beans.*;
+import java.io.IOException;
+import javax.activation.*;
+
+public class UrlCheck extends Frame implements WindowListener {
+    private URL url;
+    private Object command = null;
+
+    ////////////////////////////////////////////////////////////
+    //-- ctor
+    public UrlCheck(URL url) {
+	super("UrlCheck");
+	this.url = url;
+	
+	initMe();
+	
+	if(checkURLData()) { // if we can get a DS
+	    System.out.println("\n\n...Looking for a bean to display the content");
+
+	    CommandInfo ci[] = url.getPreferredCommands(url.getContentType());
+	    if(ci != null && (ci.length > 0)) {
+		System.out.println("\tfound a bean");
+		// i'm going to make an assumption about the semantics
+		// of the default cmd map for now, --bhc
+		// I'm also assuming all beans implement cmdobject
+		System.out.print("\tadding bean to frame...");
+		command =((DataHandler) url).getBean(ci[0]);
+		if(command instanceof Component) {
+		    this.add((Component)command);
+		    System.out.println("done.");
+		    this.setSize(((Container)command).getPreferredSize());
+		    this.doLayout();
+		}
+		else {
+		    System.out.println("*failed* not a Component!");
+		}
+		show();
+		
+	    }
+	    else {
+		System.out.println("\tcouldn't find a bean");
+	    }
+	}
+	
+    }
+    ////////////////////////////////////////////////////////////
+    // init me
+    private void initMe() {
+	setSize(400,400);
+	setLayout(new BorderLayout());
+	this.addWindowListener(this);
+    }
+    ////////////////////////////////////////////////////////////
+    // get url data
+    // Print all the DH stuff we know about the URL
+    private boolean checkURLData()
+	{
+	    DataSource ds = null;
+
+	    // Printout the content type
+	    System.out.println( "URL = " + url.toString() );
+	    System.out.println( "\tContent Type: " +  url.getContentType());
+	    System.out.println( "\tName: " + url.getName());
+	    System.out.print("\n...getting the DataSource...");
+	    
+	    try {
+		ds = url.getDataSource();
+	    } catch (IOException e) {
+		System.out.println("IOException caught in checkURL Data");
+		System.exit(1);
+	    }
+		
+	    if(ds == null) {
+		System.out.println("<failed>\n");
+		return false;
+	    }
+	    else {
+		System.out.println("done.\n");
+	    
+		System.out.println("\tDataSource.getName(): " + 
+				   ds.getName());
+		System.out.println("\tDataSource.getContentType(): " +
+				   ds.getContentType());
+		return true;
+	    }
+	    
+	}
+    ////////////////////////////////////////////////////////////
+    // mainline
+    public static void main(String args[]) {
+	URL new_url = null;
+	UrlCheck appFrame = null;
+
+	if(args.length == 0) {
+	    System.out.println("usage: UrlCheck <url>");
+	    System.exit(1);
+	}
+
+	try {
+	    new_url = new URL(args[0]);
+	} catch (MalformedURLException e) {
+	    System.out.println("ERROR: The syntax of the URL was incorrect!");
+	    System.out.println("Check it and try again!");
+	    System.exit(1);
+	}
+	    
+	appFrame = new UrlCheck( new_url );    
+	    
+    }
+
+    /////////////****WindowListener****//////////////////
+    public void windowOpened(WindowEvent e) {}
+    public void windowClosing(WindowEvent e) {
+	System.exit(0);
+    }
+    public void windowClosed(WindowEvent e) { }
+    public void windowIconified(WindowEvent e) {}
+    public void windowDeiconified(WindowEvent e) {}
+    public void windowActivated(WindowEvent e) {}
+    public void windowDeactivated(WindowEvent e) {}
+}
+
diff --git a/src/share/doc/release/LICENSE.txt b/src/share/doc/release/LICENSE.txt
new file mode 100644
index 0000000..e987412
--- /dev/null
+++ b/src/share/doc/release/LICENSE.txt
@@ -0,0 +1,306 @@
+A. Sun Microsystems, Inc. ("Sun") ENTITLEMENT for SOFTWARE
+
+Licensee/Company: Entity receiving Software.
+
+Effective Date: Date of delivery of the Software to You.
+
+Software: JavaBeans Activation Framework 1.1.1.
+
+License Term:  Perpetual (subject to termination under the SLA).
+
+Licensed Unit: Software Copy.
+
+Licensed unit Count: Unlimited.
+
+Permitted Uses:
+
+1. You may reproduce and use the Software for Individual, Commercial,
+or Research and Instructional Use for the purposes of designing,
+developing, testing, and running Your applets and
+application("Programs").
+
+2. Subject to the terms and conditions of this Agreement and
+restrictions and exceptions set forth in the Software's documentation,
+You may reproduce and distribute portions of Software identified as a
+redistributable in the documentation ("Redistributable"), provided
+that:
+
+(a) you distribute Redistributable complete and unmodified and only
+bundled as part of Your Programs,
+
+(b) your Programs add significant and primary functionality to the
+Redistributable,
+
+(c) you distribute Redistributable for the sole purpose of running your
+Programs,
+
+(d) you do not distribute additional software intended to replace any
+component(s) of the Redistributable,
+
+(e) you do not remove or alter any proprietary legends or notices
+contained in or on the Redistributable.
+
+(f) you only distribute the Redistributable subject to a license
+agreement that protects Sun's interests consistent with the terms
+contained in this Agreement, and
+
+(g) you agree to defend and indemnify Sun and its licensors from and
+against any damages, costs, liabilities, settlement amounts and/or
+expenses  (including attorneys' fees) incurred in connection with any
+claim, lawsuit or action by any third party that arises or results from
+the use or distribution of any and all Programs and/or
+Redistributable.
+
+3. Java Technology Restrictions.  You may not create, modify, or change
+the behavior of, or authorize your licensees to create, modify, or
+change the behavior of, classes, interfaces, or subpackages that are in
+any way identified as "java", "javax", "sun" or similar convention as
+specified by Sun in any naming convention designation.
+
+B. Sun Microsystems, Inc. ("Sun")
+SOFTWARE LICENSE AGREEMENT
+
+READ THE TERMS OF THIS AGREEMENT ("AGREEMENT") CAREFULLY BEFORE OPENING
+SOFTWARE MEDIA PACKAGE. BY OPENING SOFTWARE MEDIA PACKAGE, YOU AGREE TO
+THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCESSING SOFTWARE
+ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESE TERMS BY SELECTING
+THE "ACCEPT" BUTTON AT THE END OF THIS AGREEMENT. IF YOU DO NOT AGREE
+TO ALL OF THE TERMS, PROMPTLY RETURN THE UNUSED SOFTWARE TO YOUR PLACE
+OF PURCHASE FOR A REFUND OR, IF SOFTWARE IS ACCESSED ELECTRONICALLY,
+SELECT THE "DECLINE" (OR "EXIT") BUTTON AT THE END OF THIS AGREEMENT.
+IF YOU HAVE SEPARATELY AGREED TO LICENSE TERMS ("MASTER TERMS") FOR
+YOUR LICENSE TO THIS SOFTWARE, THEN SECTIONS 1-5 OF THIS AGREEMENT
+("SUPPLEMENTAL LICENSE TERMS") SHALL SUPPLEMENT AND SUPERSEDE THE
+MASTER TERMS IN RELATION TO THIS SOFTWARE.
+
+1.      Definitions.
+
+(a)     "Entitlement" means the collective set of applicable documents
+authorized by Sun evidencing your obligation to pay associated fees (if
+any) for the license, associated Services, and the authorized scope of
+use of Software under this Agreement.
+
+(b)     "Licensed Unit" means the unit of measure by which your use of
+Software and/or Service is licensed, as described in your Entitlement.
+
+(c)     "Permitted Use" means the licensed Software use(s) authorized
+in this Agreement as specified in your Entitlement. The Permitted Use
+for any bundled Sun software not specified in your Entitlement will be
+evaluation use as provided in Section 3.
+
+(d)     "Service" means the service(s) that Sun or its delegate will
+provide, if any, as selected in your Entitlement and as further
+described in the applicable service listings at
+www.sun.com/service/servicelist.
+
+(e)     "Software" means the Sun software described in your
+Entitlement. Also, certain software may be included for evaluation use
+under Section 3.
+
+(f)     "You" and "Your" means the individual or legal entity specified
+in the Entitlement, or for evaluation purposes, the entity performing
+the evaluation.
+
+2.      License Grant and Entitlement.
+
+Subject to the terms of your Entitlement, Sun grants you a
+nonexclusive, nontransferable limited license to use Software for its
+Permitted Use for the license term. Your Entitlement will specify (a)
+Software licensed, (b) the Permitted Use, (c) the license term, and (d)
+the Licensed Units.
+
+Additionally, if your Entitlement includes Services, then it will also
+specify the (e) Service and (f) service term.
+
+If your rights to Software or Services are limited in duration and the
+date such rights begin is other than the purchase date, your
+Entitlement will provide that beginning date(s).
+
+The Entitlement may be delivered to you in various ways depending on
+the manner in which you obtain Software and Services, for example, the
+Entitlement may be provided in your receipt, invoice or your contract
+with Sun or authorized Sun reseller. It may also be in electronic
+format if you download Software.
+
+3.      Permitted Use.
+
+As selected in your Entitlement, one or more of the following Permitted
+Uses will apply to your use of Software. Unless you have an Entitlement
+that expressly permits it, you may not use Software for any of the
+other Permitted Uses. If you don't have an Entitlement, or if your
+Entitlement doesn't cover additional software delivered to you, then
+such software is for your Evaluation Use.
+
+(a) Evaluation Use. You may evaluate Software internally for a period
+of 90 days from your first use.
+
+(b) Research and Instructional Use. You may use Software internally to
+design, develop and test, and also to provide instruction on such
+uses.
+
+(c) Individual Use. You may use Software internally for personal,
+individual use.
+
+(d) Commercial Use. You may use Software internally for your own
+commercial purposes.
+
+(e) Service Provider Use. You may make Software functionality
+accessible (but not by providing Software itself or through outsourcing
+services) to your end users in an extranet deployment, but not to your
+affiliated companies or to government agencies.
+
+4.      Licensed Units.
+
+Your Permitted Use is limited to the number of Licensed Units stated in
+your Entitlement. If you require additional Licensed Units, you will
+need additional Entitlement(s).
+
+5.	Restrictions.
+
+(a) The copies of Software provided to you under this Agreement are
+licensed, not sold, to you by Sun. Sun reserves all rights not
+expressly granted. (b) You may make a single archival copy of Software,
+but otherwise may not copy, modify, or distribute Software. However if
+the Sun documentation accompanying Software lists specific portions of
+Software, such as header files, class libraries, reference source code,
+and/or redistributable files, that may be handled differently, you may
+do so only as provided in the Sun documentation. (c) You may not rent,
+lease, lend or encumber Software. (d) Unless enforcement is prohibited
+by applicable law, you may not decompile, or reverse engineer
+Software.  (e) The terms and conditions of this Agreement will apply to
+any Software updates, provided to you at Sun's discretion, that replace
+and/or supplement the original Software, unless such update contains a
+separate license. (f) You may not publish or provide the results of any
+benchmark or comparison tests run on Software to any third party
+without the prior written consent of Sun. (g) Software is confidential
+and copyrighted. (h) Unless otherwise specified, if Software is
+delivered with embedded or bundled software that enables functionality
+of Software, you may not use such software on a stand-alone basis or
+use any portion of such software to interoperate with any program(s)
+other than Software.  (i) Software may contain programs that perform
+automated collection of system data and/or automated software updating
+services. System data collected through such programs may be used by
+Sun, its subcontractors, and its service delivery partners for the
+purpose of providing you with remote system services and/or improving
+Sun's software and systems. (j) Software is not designed, licensed or
+intended for use in the design, construction, operation or maintenance
+of any nuclear facility and Sun and its licensors disclaim any express
+or implied warranty of fitness for such uses. (k) No right, title or
+interest in or to any trademark, service mark, logo or trade name of
+Sun or its licensors is granted under this Agreement.
+
+6.	Term and Termination. 
+
+The license and service term are set forth in your Entitlement(s). Your
+rights under this Agreement will terminate immediately without notice
+from Sun if you materially breach it or take any action in derogation
+of Sun's and/or its licensors' rights to Software. Sun may terminate
+this Agreement should any Software become, or in Sun's reasonable
+opinion likely to become, the subject of a claim of intellectual
+property infringement or trade secret misappropriation. Upon
+termination, you will cease use of, and destroy, Software and confirm
+compliance in writing to Sun. Sections 1, 5, 6, 7, and 9-15 will
+survive termination of the Agreement.
+
+7.      Java Compatibility and Open Source.
+
+Software may contain Java technology. You may not create additional
+classes to, or modifications of, the Java technology, except under
+compatibility requirements available under a separate agreement
+available at www.java.net.
+
+Sun supports and benefits from the global community of open source
+developers, and thanks the community for its important contributions
+and open standards-based technology, which Sun has adopted into many of
+its products.
+
+Please note that portions of Software may be provided with notices and
+open source licenses from such communities and third parties that
+govern the use of those portions, and any licenses granted hereunder do
+not alter any rights and obligations you may have under such open
+source licenses, however, the disclaimer of warranty and limitation of
+liability provisions in this Agreement will apply to all Software in
+this distribution.
+
+8.      Limited Warranty.
+
+Sun warrants to you that for a period of 90 days from the date of
+purchase, as evidenced by a copy of the receipt, the media on which
+Software is furnished (if any) will be free of defects in materials and
+workmanship under normal use. Except for the foregoing, Software is
+provided "AS IS". Your exclusive remedy and Sun's entire liability
+under this limited warranty will be at Sun's option to replace Software
+media or refund the fee paid for Software. Some states do not allow
+limitations on certain implied warranties, so the above may not apply
+to you. This limited warranty gives you specific legal rights. You may
+have others, which vary from state to state.
+
+9.      Disclaimer of Warranty.
+
+UNLESS SPECIFIED IN THIS AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS,
+REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT
+ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO
+BE LEGALLY INVALID.
+
+10.     Limitation of Liability.
+
+TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL SUN OR ITS
+LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
+SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
+HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR
+RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
+BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event will Sun's
+liability to you, whether in contract, tort (including negligence), or
+otherwise, exceed the amount paid by you for Software under this
+Agreement. The foregoing limitations will apply even if the above
+stated warranty fails of its essential purpose. Some states do not
+allow the exclusion of incidental or consequential damages, so some of
+the terms above may not be applicable to you.
+
+11.     Export Regulations.
+
+All Software, documents, technical data, and any other materials
+delivered under this Agreement are subject to U.S. export control laws
+and may be subject to export or import regulations in other countries.
+You agree to comply strictly with these laws and regulations and
+acknowledge that you have the responsibility to obtain any licenses to
+export, re-export, or import as may be required after delivery to you.
+
+12.     U.S. Government Restricted Rights.
+
+If Software is being acquired by or on behalf of the U.S. Government or
+by a U.S. Government prime contractor or subcontractor (at any tier),
+then the Government's rights in Software and accompanying documentation
+will be only as set forth in this Agreement; this is in accordance with
+48 CFR 227.7201 through 227.7202-4 (for Department of Defense (DOD)
+acquisitions) and with 48 CFR 2.101 and 12.212 (for non-DOD
+acquisitions).
+
+13.     Governing Law.
+
+Any action related to this Agreement will be governed by California law
+and controlling U.S. federal law. No choice of law rules of any
+jurisdiction will apply.
+
+14.     Severability.
+
+If any provision of this Agreement is held to be unenforceable, this
+Agreement will remain in effect with the provision omitted, unless
+omission would frustrate the intent of the parties, in which case this
+Agreement will immediately terminate.
+
+15.     Integration.
+
+This Agreement, including any terms contained in your Entitlement, is
+the entire agreement between you and Sun relating to its subject
+matter. It supersedes all prior or contemporaneous oral or written
+communications, proposals, representations and warranties and prevails
+over any conflicting or additional terms of any quote, order,
+acknowledgment, or other communication between the parties relating to
+its subject matter during the term of this Agreement. No modification
+of this Agreement will be binding, unless in writing and signed by an
+authorized representative of each party.
+
+Please contact Sun Microsystems, Inc. 4150 Network Circle, Santa Clara,
+California 95054 if you have questions.
diff --git a/src/share/doc/release/README.txt b/src/share/doc/release/README.txt
new file mode 100644
index 0000000..9d89115
--- /dev/null
+++ b/src/share/doc/release/README.txt
@@ -0,0 +1,26 @@
+	  **JAVABEANS(tm) ACTIVATION FRAMEWORK 1.1.1 RELEASE**
+
+Thank you for downloading the release of the JavaBeans(tm) Activation
+Framework! We hope you find it useful.  Included in this release are
+the following files and directories:
+
+README.txt     : This file!
+
+RELNOTES.txt   : The release notes for this release including,
+                 installation instructions, system requirements, 
+                 known bugs, and open issues.
+
+LICENSE.txt    : The license covering this software.
+
+activation.jar : This JAR file contains the classes that
+                 make up JavaBeans(tm) Activation Framework.
+
+demos          : This directory contains some simple *unsupported*
+                 demos that make use of some of the JAF's features.
+
+docs           : This directory contains the Javadoc API descriptions
+                 for the public classes in the JAF.
+
+If you encounter any problems please contact us at:
+
+  activation-comments@sun.com
diff --git a/src/share/doc/release/RELNOTES.txt b/src/share/doc/release/RELNOTES.txt
new file mode 100644
index 0000000..f19b1a4
--- /dev/null
+++ b/src/share/doc/release/RELNOTES.txt
@@ -0,0 +1,78 @@
+	 JavaBeans(tm)Activation Framework 1.1.1 Release Notes
+
+Welcome to the JavaBeans(tm) Activation Framework! A great deal of time
+and effort was put into making this package functional and
+usable.  We are however, realistic in anticipating that there exist
+scenarios and applications where this implementation could be improved
+upon.  We welcome your feedback in this area to the email address
+listed below.
+
+System Requirements:
+--------------------
+
+The JavaBeans(tm) Activation Framework (JAF) was developed and tested
+against Sun's JDK 1.4.2 on the Solaris SPARC platform.  JAF is
+written in Java (with no native code). It will run on any JDK(tm) 1.4
+(or newer) compatible virtual machine so don't hesitate to try it and
+please report failures.
+
+Note that JAF is also included in Java SE 6 and later releases.
+
+Installation:
+-------------
+
+There is effectively *no* installation of the JAF. The classes that
+make up the JAF are contained in the included Java(tm) Archive (JAR) file,
+"activation.jar". This file can be placed anywhere accessible to the
+Java virtual machine running on your system. The only requirement is
+that the activation.jar be included in your system's class path so
+Java can find the JAF classes.
+
+Related Web Sites:
+------------------
+
+There are a number of web sites you might find useful if you haven't
+already run across them:
+
+http://java.sun.com  -- This is Sun's Java Software External Web Site.
+
+http://java.sun.com/beans -- This is the JavaBeans web site which is
+                             full of the latest beans information. The
+                             JAF spec is available in the 'Glasgow' area.
+
+http://java.sun.com/products/javamail -- The JavaMail(tm) API provides a set
+                             of abstract classes that model a mail system.
+                             It's implementation is dependent on the JAF.
+
+
+Bugs fixed in the 1.1.1 Release:
+--------------------------------
+
+6456395	DataHandler.writeTo should have built-in support for byte arrays
+	and Strings
+6538484	JAF fails in Turkish locale
+
+
+Bugs fixed in the 1.1 Release:
+------------------------------
+
+<no id>	use context class loader to load data content handlers
+<no id>	guard against possible NPE when parsing mailcap file
+<no id>	really make sure input stream gets closed in DataHandler.writeTo
+4134676	need way to find all known MIME types
+4786035	API doc: some bugs in javax/activation/MimeType.cmnt
+4848096	MailcapCommandMap should store *ALL* mailcap entries
+5090200	CommandMap needs file name to choose proper command on Windows
+6245613	fix ActivationDataFlavor normalize methods to match DataFlavor
+6252930	MailcapCommandMap needs support for "fallback" entries in mailcap file
+6357487	DataHandler.getBean should load class using application's class loader
+
+
+How to contact us:
+------------------
+
+We have created an email alias that will send all your questions and
+comments to the JAF 'team'. We cannot guarantee that we will respond
+to all of your email, but we do promise to read them. 
+
+activation-comments@sun.com
diff --git a/src/share/doc/release/distributionREADME.txt b/src/share/doc/release/distributionREADME.txt
new file mode 100644
index 0000000..90879f6
--- /dev/null
+++ b/src/share/doc/release/distributionREADME.txt
@@ -0,0 +1,37 @@
+DistributionREADME
+
+DISTRIBUTION BY DEVELOPERS.  Subject to the terms and conditions of the
+Software License Agreement and the obligations, restrictions, and
+exceptions set forth below, You may reproduce and distribute the
+portions of Software identified below (each a "Redistributable"),
+provided that:
+
+(a) you distribute the Redistributable complete and unmodified and only
+bundled as part of Your applets and applications ("Programs"),
+
+(b) your Programs add significant and primary functionality to the
+Software
+
+(c) you distribute Redistributable for the sole purpose of running your
+Programs,
+
+(d) you do not distribute additional software intended to replace any
+component(s) of the Redistributable,
+
+(e) you do not remove or alter any proprietary legends or notices
+contained in or on the Redistributable.
+
+(f) you only distribute the Redistributable subject to a license
+agreement that protects Sun's interests consistent with the terms
+contained in the Software License Agreement, and
+
+(g) you agree to defend and indemnify Sun and its licensors from and
+against any damages, costs, liabilities, settlement amounts and/or
+expenses  (including attorneys' fees) incurred in connection with any
+claim, lawsuit or action by any third party that arises or results from
+the use or distribution of any and all Programs and/or
+Redistributable.
+
+The following files are each a Redistributable:
+
+activation.jar
diff --git a/src/share/doc/spec/JAF-1.0.doc b/src/share/doc/spec/JAF-1.0.doc
new file mode 100644
index 0000000..71f05a9
--- /dev/null
+++ b/src/share/doc/spec/JAF-1.0.doc
Binary files differ
diff --git a/src/share/doc/spec/JAF-1.0.pdf b/src/share/doc/spec/JAF-1.0.pdf
new file mode 100644
index 0000000..4fe2dc8
--- /dev/null
+++ b/src/share/doc/spec/JAF-1.0.pdf
Binary files differ
diff --git a/src/share/doc/spec/JAF-1.0.ps b/src/share/doc/spec/JAF-1.0.ps
new file mode 100644
index 0000000..dfe5537
--- /dev/null
+++ b/src/share/doc/spec/JAF-1.0.ps
@@ -0,0 +1,12926 @@
+%!PS-Adobe-3.0
+%%BoundingBox: (atend)
+%%Pages: (atend)
+%%PageOrder: (atend)
+%%DocumentFonts: (atend)
+%%DocumentNeedsFonts: (atend)
+%%DocumentSuppliedFonts: (atend)
+%%Creator: Frame 5.5
+%%DocumentData: Clean7Bit
+%%EndComments
+%%BeginProlog
+%
+% Frame ps_prolog 5.5, for use with Adobe Unix Frame 5.5 products
+%
+% This ps_prolog file is Copyright (c) 1986-1996 Adobe Systems, Incoporated.
+% All rights reserved.  This ps_prolog file may be freely copied and 
+% distributed in conjunction with documents created using FrameMaker, 
+% FrameMaker+SGML, FrameReader, and FrameViewer as long as this 
+% copyright notice is preserved.
+/FMDocSave save def
+%
+% FrameMaker users specify the proper paper size for each print job in the
+% "Print" dialog's "Printer Paper Size" "Width" and "Height~ fields.  If the
+% printer that the PS file is sent to does not support the requested paper
+% size, or if there is no paper tray of the proper size currently installed, 
+% then the job will not be printed.  The following flag, if set to true, will
+% cause the job to print on the default paper in such cases.
+/FMAllowPaperSizeMismatch            false def
+%
+% Frame products normally print colors as their true color on a color printer
+% or as shades of gray, based on luminance, on a black-and white printer. The
+% following flag, if set to true, forces all non-white colors to print as pure
+% black. This has no effect on bitmap images.
+/FMPrintAllColorsAsBlack             false def
+%
+% Frame products can either set their own line screens or use a printer's 
+% default settings. Three flags below control this separately for no 
+% separations, spot separations and process separations. If a flag
+% is true, then the default printer settings will not be changed. If it is
+% false, Frame products will use their own settings from a table based on
+% the printer's resolution.
+/FMUseDefaultNoSeparationScreen      true  def
+/FMUseDefaultSpotSeparationScreen    true  def
+/FMUseDefaultProcessSeparationScreen false def
+%
+% For any given PostScript printer resolution, Frame products have two sets of 
+% screen angles and frequencies for printing process separations, which are 
+% recomended by Adobe. The following variable chooses the higher frequencies
+% when set to true or the lower frequencies when set to false. This is only
+% effective if the appropriate FMUseDefault...SeparationScreen flag is false.
+/FMUseHighFrequencyScreens true def
+%
+% The following is a set of predefined optimal frequencies and angles for various
+% common dpi settings. This is taken from "Advances in Color Separation Using
+% PostScript Software Technology," from Adobe Systems (3/13/89 P.N. LPS 0043)
+% and corrolated with information which is in various PPD (4.0) files.
+%
+% The "dpiranges" figure is the minimum dots per inch device resolution which
+% can support this setting. The "low" and "high" values are controlled by the
+% setting of the FMUseHighFrequencyScreens flag above. The "TDot" flags control
+% the use of the "Yellow Triple Dot" feature whereby the frequency id divided by
+% three, but the dot function is "trippled" giving a block of 3x3 dots per cell.
+%
+% PatFreq is a compromise pattern frequency for ps Level 2 printers which is close
+% to the ideal WYSIWYG pattern frequency of 9 repetitions/inch but does not beat
+% (too badly) against the screen frequencies of any separations for that DPI.
+/dpiranges   [  2540    2400    1693     1270    1200     635      600      0      ] def
+/CMLowFreqs  [ 100.402  94.8683 89.2289 100.402  94.8683  66.9349  63.2456 47.4342 ] def
+/YLowFreqs   [  95.25   90.0    84.65    95.25   90.0     70.5556  66.6667 50.0    ] def
+/KLowFreqs   [  89.8026 84.8528 79.8088  89.8026 84.8528  74.8355  70.7107 53.033  ] def
+/CLowAngles  [  71.5651 71.5651 71.5651 71.5651  71.5651  71.5651  71.5651 71.5651 ] def
+/MLowAngles  [  18.4349 18.4349 18.4349 18.4349  18.4349  18.4349  18.4349 18.4349 ] def
+/YLowTDot    [  true    true    false    true    true     false    false   false   ] def
+/CMHighFreqs [ 133.87  126.491 133.843  108.503 102.523  100.402   94.8683 63.2456 ] def
+/YHighFreqs  [ 127.0   120.0   126.975  115.455 109.091   95.25    90.0    60.0    ] def
+/KHighFreqs  [ 119.737 113.137 119.713  128.289 121.218   89.8026  84.8528 63.6395 ] def
+/CHighAngles [  71.5651 71.5651 71.5651  70.0169 70.0169  71.5651  71.5651 71.5651 ] def
+/MHighAngles [  18.4349 18.4349 18.4349  19.9831 19.9831  18.4349  18.4349 18.4349 ] def
+/YHighTDot   [  false   false   true     false   false    true     true    false   ] def
+/PatFreq     [	10.5833 10.0     9.4055  10.5833 10.0	  10.5833  10.0	   9.375   ] def
+%
+% PostScript Level 2 printers contain an "Accurate Screens" feature which can
+% improve process separation rendering at the expense of compute time. This 
+% flag is ignored by PostScript Level 1 printers.
+/FMUseAcccurateScreens true def
+%
+% The following PostScript procedure defines the spot function that Frame
+% products will use for process separations. You may un-comment-out one of
+% the alternative functions below, or use your own.
+%
+% Dot function
+/FMSpotFunction {abs exch abs 2 copy add 1 gt 
+		{1 sub dup mul exch 1 sub dup mul add 1 sub }
+		{dup mul exch dup mul add 1 exch sub }ifelse } def
+%
+% Line function
+% /FMSpotFunction { pop } def
+%
+% Elipse function
+% /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add 
+%		sqrt 1 exch sub } def
+%
+%
+/FMversion (5.5) def 
+/fMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def
+/FMPColor
+	fMLevel1 {
+		false
+		/colorimage where {pop pop true} if
+	} {
+		true
+	} ifelse
+def
+/FrameDict 400 dict def 
+systemdict /errordict known not {/errordict 10 dict def
+		errordict /rangecheck {stop} put} if
+% The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk
+FrameDict /tmprangecheck errordict /rangecheck get put 
+errordict /rangecheck {FrameDict /bug true put} put 
+FrameDict /bug false put 
+mark 
+% Some PS machines read past the CR, so keep the following 3 lines together!
+currentfile 5 string readline
+00
+0000000000
+cleartomark 
+errordict /rangecheck FrameDict /tmprangecheck get put 
+FrameDict /bug get { 
+	/readline {
+		/gstring exch def
+		/gfile exch def
+		/gindex 0 def
+		{
+			gfile read pop 
+			dup 10 eq {exit} if 
+			dup 13 eq {exit} if 
+			gstring exch gindex exch put 
+			/gindex gindex 1 add def 
+		} loop
+		pop 
+		gstring 0 gindex getinterval true 
+		} bind def
+	} if
+/FMshowpage /showpage load def
+/FMquit /quit load def
+/FMFAILURE { 
+	2 copy exch = = flush 
+	FMshowpage 
+	/Helvetica findfont 12 scalefont setfont
+	72 200 moveto show
+	72 220 moveto show
+	FMshowpage 
+	FMquit 
+	} def 
+/FMVERSION {
+	FMversion ne {
+		(Adobe Frame product version does not match ps_prolog!  Check installation;)
+		(also check ~/fminit and ./fminit for old versions) FMFAILURE
+		} if
+	} def 
+/fmConcatProcs
+	{
+	/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def
+	newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx
+}def
+FrameDict begin [
+	/ALDsave
+	/FMdicttop
+	/FMoptop
+	/FMpointsize
+	/FMsetsize
+	/FMsaveobject
+	/b
+	/bitmapsave
+	/blut
+	/bpside
+	/bs
+	/bstring
+	/bwidth
+	/c
+	/cf
+	/cs
+	/cynu
+	/depth
+	/edown
+	/fh
+	/fillvals
+	/fw
+	/fx
+	/fy
+	/g
+	/gfile
+	/gindex
+	/grnt
+	/gryt
+	/gstring
+	/height
+	/hh
+	/i
+	/im
+	/indx
+	/is
+	/k
+	/kk
+	/landscape
+	/lb
+	/len
+	/llx
+	/lly
+	/m
+	/magu
+	/manualfeed
+	/n
+	/offbits
+	/onbits
+	/organgle
+	/orgbangle
+	/orgbfreq
+	/orgbproc
+	/orgbxfer
+	/orgfreq
+	/orggangle
+	/orggfreq
+	/orggproc
+	/orggxfer
+	/orghalftone
+	/orgmatrix
+	/orgproc
+	/orgrangle
+	/orgrfreq
+	/orgrproc
+	/orgrxfer
+	/orgxfer
+	/pagesave
+	/paperheight
+	/papersizedict
+	/paperwidth
+	/pos
+	/pwid
+	/r
+	/rad
+	/redt
+	/sl
+	/str
+	/tran
+	/u
+	/urx
+	/ury
+	/val
+	/width
+	/width
+	/ws
+	/ww
+	/x
+	/x1
+	/x2
+	/xindex
+	/xpoint
+	/xscale
+	/xx
+	/y
+	/y1
+	/y2
+	/yelu
+	/yindex
+	/ypoint
+	/yscale
+	/yy
+	/tintGray
+] { 0 def } forall
+/FmBD {bind def} bind def
+systemdict /pdfmark known systemdict /currentdistillerparams known and {
+	/fMAcrobat true def
+	
+	/FmPD /pdfmark load def
+	
+	
+	/FmPT /show load def
+	
+	
+	currentdistillerparams /CoreDistVersion get 2000 ge {
+	
+		
+		/FmPD2 /pdfmark load def
+		
+		
+		
+		
+		
+		/FmPA { mark exch /Dest exch 5 3 roll 
+				/View [ /XYZ null 6 -2 roll FmDC exch pop null] /DEST FmPD 
+		}FmBD
+	} {
+		
+		/FmPD2 /cleartomark load def
+		/FmPA {pop pop pop}FmBD
+	} ifelse
+} {
+	
+	/fMAcrobat false def
+	/FmPD /cleartomark load def
+	/FmPD2 /cleartomark load def
+	/FmPT /pop load def
+	/FmPA {pop pop pop}FmBD
+} ifelse
+/FmDC {
+	transform fMDefaultMatrix defaultmatrix itransform cvi exch cvi exch
+}FmBD
+/FmBx {
+	dup 3 index lt {3 1 roll exch} if 
+	1 index 4 index lt {4 -1 roll 3 1 roll exch 4 1 roll} if
+}FmBD
+/FMnone 0 def
+/FMcyan 1 def
+/FMmagenta 2 def
+/FMyellow 3 def
+/FMblack 4 def
+/FMcustom 5 def
+/fMNegative false def 
+/FrameSepIs FMnone def 
+/FrameSepBlack 0 def
+/FrameSepYellow 0 def
+/FrameSepMagenta 0 def
+/FrameSepCyan 0 def
+/FrameSepRed 1 def
+/FrameSepGreen 1 def
+/FrameSepBlue 1 def
+/FrameCurGray 1 def
+/FrameCurPat null def
+/FrameCurColors [ 0 0 0 1 0 0 0 1] def 
+/FrameColorEpsilon .001 def	
+/eqepsilon {		
+	sub dup 0 lt {neg} if
+	FrameColorEpsilon le
+} bind def
+/FrameCmpColorsCMYK { 
+	2 copy 0 get exch 0 get eqepsilon {
+		2 copy 1 get exch 1 get eqepsilon {
+			2 copy 2 get exch 2 get eqepsilon {
+				3 get exch 3 get eqepsilon
+			} {pop pop false} ifelse
+		}{pop pop false} ifelse
+	} {pop pop false} ifelse
+} bind def
+/FrameCmpColorsRGB { 
+	2 copy 4 get exch 0 get eqepsilon {
+		2 copy 5 get exch 1 get eqepsilon {
+			6 get exch 2 get eqepsilon
+		}{pop pop false} ifelse
+	} {pop pop false} ifelse
+} bind def
+/RGBtoCMYK { 
+	1 exch sub 
+	3 1 roll 
+	1 exch sub 
+	3 1 roll 
+	1 exch sub 
+	3 1 roll 
+	3 copy 
+	2 copy 
+	le { pop } { exch pop } ifelse 
+	2 copy 
+	le { pop } { exch pop } ifelse 
+	dup dup dup 
+	6 1 roll 
+	4 1 roll 
+	7 1 roll 
+	sub 
+	6 1 roll 
+	sub 
+	5 1 roll 
+	sub 
+	4 1 roll 
+} bind def
+/CMYKtoRGB { 
+	dup dup 4 -1 roll add 						  
+	5 1 roll 3 -1 roll add 						  
+	4 1 roll add 								  
+	1 exch sub dup 0 lt {pop 0} if 3 1 roll 	  
+	1 exch sub dup 0 lt {pop 0} if exch 	      
+	1 exch sub dup 0 lt {pop 0} if exch	  		  
+} bind def
+/FrameSepInit {
+	1.0 RealSetgray
+} bind def
+/FrameSetSepColor { 
+	/FrameSepBlue exch def
+	/FrameSepGreen exch def
+	/FrameSepRed exch def
+	/FrameSepBlack exch def
+	/FrameSepYellow exch def
+	/FrameSepMagenta exch def
+	/FrameSepCyan exch def
+	/FrameSepIs FMcustom def
+	setCurrentScreen	
+} bind def
+/FrameSetCyan {
+	/FrameSepBlue 1.0 def
+	/FrameSepGreen 1.0 def
+	/FrameSepRed 0.0 def
+	/FrameSepBlack 0.0 def
+	/FrameSepYellow 0.0 def
+	/FrameSepMagenta 0.0 def
+	/FrameSepCyan 1.0 def
+	/FrameSepIs FMcyan def
+	setCurrentScreen	
+} bind def
+ 
+/FrameSetMagenta {
+	/FrameSepBlue 1.0 def
+	/FrameSepGreen 0.0 def
+	/FrameSepRed 1.0 def
+	/FrameSepBlack 0.0 def
+	/FrameSepYellow 0.0 def
+	/FrameSepMagenta 1.0 def
+	/FrameSepCyan 0.0 def
+	/FrameSepIs FMmagenta def
+	setCurrentScreen
+} bind def
+ 
+/FrameSetYellow {
+	/FrameSepBlue 0.0 def
+	/FrameSepGreen 1.0 def
+	/FrameSepRed 1.0 def
+	/FrameSepBlack 0.0 def
+	/FrameSepYellow 1.0 def
+	/FrameSepMagenta 0.0 def
+	/FrameSepCyan 0.0 def
+	/FrameSepIs FMyellow def
+	setCurrentScreen
+} bind def
+ 
+/FrameSetBlack {
+	/FrameSepBlue 0.0 def
+	/FrameSepGreen 0.0 def
+	/FrameSepRed 0.0 def
+	/FrameSepBlack 1.0 def
+	/FrameSepYellow 0.0 def
+	/FrameSepMagenta 0.0 def
+	/FrameSepCyan 0.0 def
+	/FrameSepIs FMblack def
+	setCurrentScreen
+} bind def
+ 
+/FrameNoSep { 
+	/FrameSepIs FMnone def
+	setCurrentScreen
+} bind def
+/FrameSetSepColors { 
+	FrameDict begin
+	[ exch 1 add 1 roll ]
+	/FrameSepColors  
+	exch def end
+	} bind def
+/FrameColorInSepListCMYK { 
+	FrameSepColors {  
+       		exch dup 3 -1 roll 
+       		FrameCmpColorsCMYK 
+       		{ pop true exit } if
+    	} forall 
+	dup true ne {pop false} if
+	} bind def
+/FrameColorInSepListRGB { 
+	FrameSepColors {  
+       		exch dup 3 -1 roll 
+       		FrameCmpColorsRGB 
+       		{ pop true exit } if
+    	} forall 
+	dup true ne {pop false} if
+	} bind def
+/RealSetgray /setgray load def
+/RealSetrgbcolor /setrgbcolor load def
+/RealSethsbcolor /sethsbcolor load def
+end 
+/setgray { 
+	FrameDict begin
+	FrameSepIs FMnone eq
+		{ RealSetgray } 
+		{ 
+		FrameSepIs FMblack eq 
+			{ RealSetgray } 
+			{ FrameSepIs FMcustom eq 
+			  FrameSepRed 0 eq and
+			  FrameSepGreen 0 eq and
+			  FrameSepBlue 0 eq and {
+			  	RealSetgray
+			  } {
+				1 RealSetgray pop 
+			  } ifelse
+			} ifelse
+		} ifelse
+	end
+} bind def
+/setrgbcolor { 
+	FrameDict begin
+	FrameSepIs FMnone eq
+	{  RealSetrgbcolor }
+	{
+		3 copy [ 4 1 roll ] 
+		FrameColorInSepListRGB
+		{
+				FrameSepBlue eq exch 
+			 	FrameSepGreen eq and exch 
+			 	FrameSepRed eq and
+			 	{ 0 } { 1 } ifelse
+		}
+		{
+			FMPColor {
+				RealSetrgbcolor
+				currentcmykcolor
+			} {
+				RGBtoCMYK
+			} ifelse
+			FrameSepIs FMblack eq
+			{1.0 exch sub 4 1 roll pop pop pop} {
+			FrameSepIs FMyellow eq
+			{pop 1.0 exch sub 3 1 roll pop pop} {
+			FrameSepIs FMmagenta eq
+			{pop pop 1.0 exch sub exch pop } {
+			FrameSepIs FMcyan eq
+			{pop pop pop 1.0 exch sub } 
+			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
+		} ifelse
+		RealSetgray
+	} 
+	ifelse
+	end
+} bind def
+/sethsbcolor {
+	FrameDict begin
+	FrameSepIs FMnone eq 
+	{ RealSethsbcolor } 
+	{
+		RealSethsbcolor 
+		currentrgbcolor  
+		setrgbcolor 
+	} 
+	ifelse
+	end
+} bind def
+FrameDict begin
+/setcmykcolor where {
+	pop /RealSetcmykcolor /setcmykcolor load def
+} {
+	/RealSetcmykcolor {
+		4 1 roll
+		3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat 
+		RealSetrgbcolor pop
+	} bind def
+} ifelse
+userdict /setcmykcolor { 
+		FrameDict begin
+		FrameSepIs FMnone eq
+		{ RealSetcmykcolor } 
+		{
+			4 copy [ 5 1 roll ]
+			FrameColorInSepListCMYK
+			{
+				FrameSepBlack eq exch 
+				FrameSepYellow eq and exch 
+				FrameSepMagenta eq and exch 
+				FrameSepCyan eq and 
+				{ 0 } { 1 } ifelse
+			}
+			{
+				FrameSepIs FMblack eq
+				{1.0 exch sub 4 1 roll pop pop pop} {
+				FrameSepIs FMyellow eq
+				{pop 1.0 exch sub 3 1 roll pop pop} {
+				FrameSepIs FMmagenta eq
+				{pop pop 1.0 exch sub exch pop } {
+				FrameSepIs FMcyan eq
+				{pop pop pop 1.0 exch sub } 
+				{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
+			} ifelse
+			RealSetgray
+		}
+		ifelse
+		end
+	} bind put
+fMLevel1 { 
+	
+	
+	
+	/patScreenDict 7 dict dup begin
+		<0f1e3c78f0e1c387> [ 45  { pop } {exch pop} 		.5   2 sqrt] FmBD
+		<0f87c3e1f0783c1e> [ 135 { pop } {exch pop}			.5   2 sqrt] FmBD
+		<cccccccccccccccc> [ 0   { pop } dup				.5   2	   ] FmBD
+		<ffff0000ffff0000> [ 90  { pop } dup				.5   2	   ] FmBD
+		<8142241818244281> [ 45  { 2 copy lt {exch} if pop}	dup .75  2 sqrt] FmBD
+		<03060c183060c081> [ 45  { pop } {exch pop}			.875 2 sqrt] FmBD
+		<8040201008040201> [ 135 { pop } {exch pop}			.875 2 sqrt] FmBD
+	end def
+} { 
+	
+	/patProcDict 5 dict dup begin
+		<0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 
+											4 -4 moveto 12 4 lineto stroke
+											-4 4 moveto 4 12 lineto stroke} bind def
+		<0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke 
+											-4 4 moveto 4 -4 lineto stroke
+											4 12 moveto 12 4 lineto stroke} bind def
+		<8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke
+											-1 -1 moveto 9 9 lineto stroke } bind def
+		<03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 
+											4 -4 moveto 12 4 lineto stroke
+											-4 4 moveto 4 12 lineto stroke} bind def
+		<8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke 
+											-4 4 moveto 4 -4 lineto stroke
+											4 12 moveto 12 4 lineto stroke} bind def
+	end def
+	/patDict 15 dict dup begin
+		/PatternType 1 def		
+		/PaintType 2 def		
+		/TilingType 3 def		
+		/BBox [ 0 0 8 8 ] def 	
+		/XStep 8 def			
+		/YStep 8 def			
+		/PaintProc {
+			begin
+			patProcDict bstring known {
+				patProcDict bstring get exec
+			} {
+				8 8 true [1 0 0 -1 0 8] bstring imagemask
+			} ifelse
+			end
+		} bind def
+	end def
+} ifelse
+/tintCMYK {
+	1 tintGray sub FrameCurColors 0 4 getinterval aload pop 	
+	4 index mul 5 1 roll										
+	3 index mul 5 1 roll										
+	2 index mul 5 1 roll										
+	mul 4 1 roll												
+}bind def
+/tintRGB {
+	1 tintGray sub FrameCurColors 4 3 getinterval aload pop 	
+	1 exch sub 3 index mul 1 exch sub 4 1 roll					
+	1 exch sub 2 index mul 1 exch sub 4 1 roll					
+	1 exch sub mul 1 exch sub 3 1 roll							
+}bind def
+/combineColor {
+	/tintGray 1 1 FrameCurGray sub FrameCurColors 7 get mul sub def
+    FrameSepIs FMnone eq
+	{
+		graymode fMLevel1 or not {
+			
+			[/Pattern [/DeviceCMYK]] setcolorspace
+			tintCMYK FrameCurPat setcolor
+		} {
+			FrameCurColors 3 get 1.0 ge {
+				tintGray RealSetgray
+			} {
+				fMAcrobat not FMPColor graymode and and {
+					tintCMYK
+					RealSetcmykcolor
+				} {
+					tintRGB
+					RealSetrgbcolor
+				} ifelse
+			} ifelse
+		} ifelse
+	} { 
+		FrameCurColors 0 4 getinterval aload
+		FrameColorInSepListCMYK {
+			FrameSepBlack eq exch 
+			FrameSepYellow eq and exch 
+			FrameSepMagenta eq and exch 
+			FrameSepCyan eq and
+			FrameSepIs FMcustom eq and
+			{ tintGray } { 1 } ifelse
+		} {
+			FrameSepIs FMblack eq
+			{tintGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} {
+			FrameSepIs FMyellow eq
+			{pop tintGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} {
+			FrameSepIs FMmagenta eq
+			{pop pop tintGray 1.0 exch sub mul 1.0 exch sub exch pop } {
+			FrameSepIs FMcyan eq
+			{pop pop pop tintGray 1.0 exch sub mul 1.0 exch sub } 
+			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
+		} ifelse
+		graymode fMLevel1 or not {
+			
+			[/Pattern [/DeviceGray]] setcolorspace
+			FrameCurPat setcolor
+		} { 
+			graymode not fMLevel1 and {
+				
+				dup 1 lt {pop FrameCurGray} if
+			} if
+			RealSetgray
+		} ifelse
+	} ifelse
+} bind def
+/savematrix {
+	orgmatrix currentmatrix pop
+	} bind def
+/restorematrix {
+	orgmatrix setmatrix
+	} bind def
+/fMDefaultMatrix matrix def
+/fMatrix2 matrix def
+/dpi    72 0 fMDefaultMatrix defaultmatrix dtransform
+    dup mul exch   dup mul add   sqrt def
+	
+/freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def
+/sangle 1 0 fMDefaultMatrix defaultmatrix dtransform exch atan def
+	sangle fMatrix2 rotate 
+	fMDefaultMatrix defaultmatrix fMatrix2 concatmatrix 
+	dup 0 get /sflipx exch def
+	    3 get /sflipy exch def
+/screenIndex {
+	0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for
+} bind def
+/getCyanScreen {
+	FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse
+		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
+} bind def
+/getMagentaScreen {
+	FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse
+		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
+} bind def
+/getYellowScreen {
+	FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse
+		screenIndex dup 3 1 roll get 3 1 roll get { 3 div
+			{2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat
+			FMSpotFunction } } {/FMSpotFunction load } ifelse
+			0.0 exch
+} bind def
+/getBlackScreen  {
+	FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse
+		screenIndex get 45.0 /FMSpotFunction load 
+} bind def
+/getSpotScreen {
+	getBlackScreen
+} bind def
+/getCompositeScreen {
+	getBlackScreen
+} bind def
+/FMSetScreen 
+	fMLevel1 { /setscreen load 
+	}{ {
+		8 dict begin
+		/HalftoneType 1 def
+		/SpotFunction exch def
+		/Angle exch def
+		/Frequency exch def
+		/AccurateScreens FMUseAcccurateScreens def
+		currentdict end sethalftone
+	} bind } ifelse
+def
+/setDefaultScreen {
+	fMLevel1 {
+		FMPColor {
+			orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer
+		}
+		{
+			orgxfer cvx settransfer
+		} ifelse
+		orgfreq organgle orgproc cvx setscreen
+	} {
+		orghalftone sethalftone
+	}ifelse
+} bind def
+/setCurrentScreen {
+	FrameSepIs FMnone eq {
+		FMUseDefaultNoSeparationScreen {
+			setDefaultScreen
+		} {
+			getCompositeScreen FMSetScreen
+		} ifelse
+	} {
+		FrameSepIs FMcustom eq {
+			FMUseDefaultSpotSeparationScreen {
+				setDefaultScreen
+			} {
+				getSpotScreen FMSetScreen
+			} ifelse
+		} {
+			FMUseDefaultProcessSeparationScreen {
+				setDefaultScreen
+			} {
+				FrameSepIs FMcyan eq {
+					getCyanScreen FMSetScreen
+				} {
+					FrameSepIs FMmagenta eq {
+						getMagentaScreen FMSetScreen
+					} {
+						FrameSepIs FMyellow eq {
+							getYellowScreen FMSetScreen
+						} {
+							getBlackScreen FMSetScreen
+						} ifelse
+					} ifelse
+				} ifelse
+			} ifelse
+		} ifelse
+	} ifelse 
+} bind def
+end
+	
+/FMDOCUMENT { 
+	array /FMfonts exch def 
+	dup 1 gt {/#copies exch def} {pop} ifelse
+	FrameDict begin
+	0 ne /manualfeed exch def
+	/paperheight exch def
+	/paperwidth exch def
+	0 ne /fMNegative exch def 
+	0 ne /edown exch def 
+	/yscale exch def
+	/xscale exch def
+	fMLevel1 {
+		manualfeed {setmanualfeed} if
+		/FMdicttop countdictstack 1 add def 
+		/FMoptop count def 
+		setpapername 
+		manualfeed {true} {papersize} ifelse 
+		{manualpapersize} {false} ifelse 
+		{desperatepapersize} {false} ifelse 
+		{papersizefailure} if
+		count -1 FMoptop {pop pop} for
+		countdictstack -1 FMdicttop {pop end} for 
+		}
+		{2 dict
+		 dup /PageSize [paperwidth paperheight] put
+		 manualfeed {dup /ManualFeed manualfeed put} if
+		 {setpagedevice} stopped {papersizefailure} if
+		}
+	ifelse 
+	
+	fMLevel1 not {
+		/orghalftone currenthalftone def
+	}if 
+	
+	FMPColor {
+		currentcolorscreen
+			cvlit /orgproc exch def
+				  /organgle exch def 
+				  /orgfreq exch def
+			cvlit /orgbproc exch def
+				  /orgbangle exch def 
+				  /orgbfreq exch def
+			cvlit /orggproc exch def
+				  /orggangle exch def 
+				  /orggfreq exch def
+			cvlit /orgrproc exch def
+				  /orgrangle exch def 
+				  /orgrfreq exch def
+			currentcolortransfer 
+			fMNegative {
+				1 1 4 { 
+					pop { 1 exch sub } fmConcatProcs 4 1 roll
+				} for
+				4 copy
+				setcolortransfer
+			} if
+			cvlit /orgxfer exch def
+			cvlit /orgbxfer exch def
+			cvlit /orggxfer exch def
+			cvlit /orgrxfer exch def
+	} {
+		currentscreen 
+			cvlit /orgproc exch def
+				  /organgle exch def 
+				  /orgfreq exch def
+				  
+		currenttransfer 
+		fMNegative {
+			{ 1 exch sub } fmConcatProcs
+			dup settransfer
+		} if 
+		cvlit /orgxfer exch def
+	} ifelse
+	end 
+} def 
+/FMENDDOCUMENT {
+	FMDocSave restore	
+} def
+/FMBEGINPAGE { 
+	FrameDict begin 
+	/pagesave save def
+	3.86 setmiterlimit
+	0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 
+	0 paperheight lineto 0 0 lineto 1 setgray fill
+	/landscape exch 0 ne def
+	landscape { 
+		90 rotate 0 exch dup /pwid exch def neg translate pop 
+	}{
+		pop /pwid exch def
+	} ifelse
+	edown { [-1 0 0 1 pwid 0] concat } if
+	xscale yscale scale
+	/orgmatrix matrix def
+	gsave 
+} def 
+/FMENDPAGE {
+	grestore 
+	pagesave restore
+	end 
+	showpage
+	} def 
+/FMFONTDEFINE { 
+	FrameDict begin
+	findfont 
+	ReEncode 
+	1 index exch 
+	definefont 
+	FMfonts 3 1 roll 
+	put
+	end 
+	} def 
+/FMFILLS {
+	FrameDict begin dup
+	array /fillvals exch def
+	dict /patCache exch def
+	end 
+	} def 
+/FMFILL {
+	FrameDict begin
+	 fillvals 3 1 roll put
+	end 
+	} def 
+/FMNORMALIZEGRAPHICS { 
+	newpath
+	1 setlinewidth
+	0 setlinecap
+	0 0 0 sethsbcolor
+	0 setgray 
+	} bind def
+/FMBEGINEPSF { 
+	end 
+	/FMEPSF save def 
+	/showpage {} def 
+	FMNORMALIZEGRAPHICS 
+	[/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
+	fx fw 2 div add fy fh 2 div add  translate
+	rotate
+	fw 2 div neg fh 2 div neg translate
+	fw urx llx sub div fh ury lly sub div scale 
+	llx neg lly neg translate 
+	/FMdicttop countdictstack 1 add def 
+	/FMoptop count def 
+	} bind def
+/FMENDEPSF {
+	count -1 FMoptop {pop pop} for 
+	countdictstack -1 FMdicttop {pop end} for 
+	FMEPSF restore
+	FrameDict begin 
+	} bind def
+FrameDict begin 
+/setmanualfeed {
+%%BeginFeature: *ManualFeed True
+	 statusdict /manualfeed true put
+%%EndFeature
+	} bind def
+/max {2 copy lt {exch} if pop} bind def
+/min {2 copy gt {exch} if pop} bind def
+/inch {72 mul} def
+/pagedimen { 
+	paperheight sub abs 16 lt exch 
+	paperwidth sub abs 16 lt and
+	{/papername exch def} {pop} ifelse
+	} bind def
+/setpapername { 
+	/papersizedict 14 dict def 
+	papersizedict begin
+	/papername /unknown def 
+		/Letter 8.5 inch 11.0 inch pagedimen
+		/LetterSmall 7.68 inch 10.16 inch pagedimen
+		/Tabloid 11.0 inch 17.0 inch pagedimen
+		/Ledger 17.0 inch 11.0 inch pagedimen
+		/Legal 8.5 inch 14.0 inch pagedimen
+		/Statement 5.5 inch 8.5 inch pagedimen
+		/Executive 7.5 inch 10.0 inch pagedimen
+		/A3 11.69 inch 16.5 inch pagedimen
+		/A4 8.26 inch 11.69 inch pagedimen
+		/A4Small 7.47 inch 10.85 inch pagedimen
+		/B4 10.125 inch 14.33 inch pagedimen
+		/B5 7.16 inch 10.125 inch pagedimen
+	end
+	} bind def
+/papersize {
+	papersizedict begin
+		/Letter {lettertray letter} def
+		/LetterSmall {lettertray lettersmall} def
+		/Tabloid {11x17tray 11x17} def
+		/Ledger {ledgertray ledger} def
+		/Legal {legaltray legal} def
+		/Statement {statementtray statement} def
+		/Executive {executivetray executive} def
+		/A3 {a3tray a3} def
+		/A4 {a4tray a4} def
+		/A4Small {a4tray a4small} def
+		/B4 {b4tray b4} def
+		/B5 {b5tray b5} def
+		/unknown {unknown} def
+	papersizedict dup papername known {papername} {/unknown} ifelse get
+	end
+	statusdict begin stopped end 
+	} bind def
+/manualpapersize {
+	papersizedict begin
+		/Letter {letter} def
+		/LetterSmall {lettersmall} def
+		/Tabloid {11x17} def
+		/Ledger {ledger} def
+		/Legal {legal} def
+		/Statement {statement} def
+		/Executive {executive} def
+		/A3 {a3} def
+		/A4 {a4} def
+		/A4Small {a4small} def
+		/B4 {b4} def
+		/B5 {b5} def
+		/unknown {unknown} def
+	papersizedict dup papername known {papername} {/unknown} ifelse get
+	end
+	stopped 
+	} bind def
+/desperatepapersize {
+	
+	mark
+	statusdict begin 
+		/setpageparams where {
+			pop
+			paperwidth paperheight 0 1 
+			{setpageparams} stopped 
+		} { 
+			true 
+		} ifelse
+		
+		{
+			
+			/setpagedevice where {
+				pop 
+				1 dict dup begin
+					/PageSize [ paperwidth paperheight ] def
+				end 
+				{setpagedevice} stopped
+			} {
+				true	
+			} ifelse
+		} {
+			false		
+		} ifelse 
+	end
+	{cleartomark true}{cleartomark false}ifelse
+} bind def
+/papersizefailure {
+	FMAllowPaperSizeMismatch not
+		{
+(The requested paper size is not available in any currently-installed tray)
+(Edit the PS file to "FMAllowPaperSizeMismatch true" to use default tray)
+		 FMFAILURE } if
+	} def
+/DiacriticEncoding [
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
+/numbersign /dollar /percent /ampersand /quotesingle /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon
+/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
+/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
+/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
+/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
+/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
+/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
+/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
+/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
+/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
+/udieresis /dagger /.notdef /cent /sterling /section /bullet
+/paragraph /germandbls /registered /copyright /trademark /acute
+/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
+/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
+/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
+/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
+/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
+/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
+/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
+/periodcentered /quotesinglbase /quotedblbase /perthousand
+/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
+/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
+/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
+/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
+] def
+/ReEncode { 
+	dup 
+	length 
+	dict begin 
+	{
+	1 index /FID ne 
+		{def} 
+		{pop pop} ifelse 
+	} forall 
+	0 eq {/Encoding DiacriticEncoding def} if 
+	currentdict 
+	end 
+	} bind def
+FMPColor 
+	
+	{
+	/BEGINBITMAPCOLOR { 
+		BITMAPCOLOR} def
+	/BEGINBITMAPCOLORc { 
+		BITMAPCOLORc} def
+	/BEGINBITMAPTRUECOLOR { 
+		BITMAPTRUECOLOR } def
+	/BEGINBITMAPTRUECOLORc { 
+		BITMAPTRUECOLORc } def
+	/BEGINBITMAPCMYK { 
+		BITMAPCMYK } def
+	/BEGINBITMAPCMYKc { 
+		BITMAPCMYKc } def
+	}
+	
+	{
+	/BEGINBITMAPCOLOR { 
+		BITMAPGRAY} def
+	/BEGINBITMAPCOLORc { 
+		BITMAPGRAYc} def
+	/BEGINBITMAPTRUECOLOR { 
+		BITMAPTRUEGRAY } def
+	/BEGINBITMAPTRUECOLORc { 
+		BITMAPTRUEGRAYc } def
+	/BEGINBITMAPCMYK { 
+		BITMAPCMYKGRAY } def
+	/BEGINBITMAPCMYKc { 
+		BITMAPCMYKGRAYc } def
+	}
+ifelse
+/K { 
+	FMPrintAllColorsAsBlack {
+		8 1 roll
+		dup 1 eq 2 index 1 eq and 3 index 1 eq and not
+			{7 {pop} repeat 0 0 0 1 0 0 0} if
+		8 -1 roll
+	} if 
+	FrameCurColors astore 
+	pop combineColor
+} bind def
+/graymode true def
+fMLevel1 {
+	/fmGetFlip {
+		fMatrix2 exch get mul 0 lt { -1 } { 1 } ifelse
+	} FmBD
+} if
+/setPatternMode {
+	fMLevel1 {
+		2 index patScreenDict exch known {
+			pop pop
+			patScreenDict exch get aload pop 
+			freq 								
+			mul									
+			5 2 roll							
+			fMatrix2 currentmatrix 1 get 0 ne {
+				3 -1 roll 90 add 3 1 roll 		
+				sflipx 1 fmGetFlip sflipy 2 fmGetFlip neg mul
+			} {  								
+				sflipx 0 fmGetFlip sflipy 3 fmGetFlip mul 
+			} ifelse
+			0 lt {exch pop} {pop} ifelse 		
+			fMNegative { 
+				{neg} fmConcatProcs 			
+			} if
+			bind
+			
+			
+			
+			systemdict /setscreen get exec		
+			/FrameCurGray exch def
+		} {
+			/bwidth  exch def
+			/bpside  exch def
+			/bstring exch def
+			/onbits 0 def  /offbits 0 def
+			freq sangle landscape {90 add} if 
+				{/ypoint exch def
+				 /xpoint exch def
+				 /xindex xpoint 1 add 2 div bpside mul cvi def
+				 /yindex ypoint 1 add 2 div bpside mul cvi def
+				 bstring yindex bwidth mul xindex 8 idiv add get
+				 1 7 xindex 8 mod sub bitshift and 0 ne fMNegative {not} if
+				 {/onbits  onbits  1 add def 1}
+				 {/offbits offbits 1 add def 0}
+				 ifelse
+				}
+				setscreen
+			offbits offbits onbits add dup 0 ne {div} {pop pop .5} ifelse fMNegative {1.0 exch sub} if
+			/FrameCurGray exch def
+		} ifelse
+	} { 
+		pop pop
+		dup patCache exch known {
+			patCache exch get
+		} { 
+			dup
+			patDict /bstring 3 -1 roll put
+			patDict 
+			9 PatFreq screenIndex get div dup matrix scale
+			makepattern
+			dup 
+			patCache 4 -1 roll 3 -1 roll put
+		} ifelse
+		/FrameCurGray 0 def
+		/FrameCurPat exch def
+	} ifelse
+	/graymode false def
+	combineColor
+} bind def
+/setGrayScaleMode {
+	graymode not {
+		/graymode true def
+		fMLevel1 {
+			setCurrentScreen
+		} if
+	} if
+	/FrameCurGray exch def
+	combineColor
+} bind def
+/normalize {
+	transform round exch round exch itransform
+	} bind def
+/dnormalize {
+	dtransform round exch round exch idtransform
+	} bind def
+/lnormalize { 
+	0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
+	} bind def
+/H { 
+	lnormalize setlinewidth
+	} bind def
+/Z {
+	setlinecap
+	} bind def
+	
+/PFill {
+	graymode fMLevel1 or not {
+		gsave 1 setgray eofill grestore
+	} if
+} bind def
+/PStroke {
+	graymode fMLevel1 or not {
+		gsave 1 setgray stroke grestore
+	} if
+	stroke
+} bind def
+/X { 
+	fillvals exch get
+	dup type /stringtype eq
+	{8 1 setPatternMode} 
+	{setGrayScaleMode}
+	ifelse
+	} bind def
+/V { 
+	PFill gsave eofill grestore
+	} bind def
+/Vclip {
+	clip
+	} bind def
+/Vstrk {
+	currentlinewidth exch setlinewidth PStroke setlinewidth
+	} bind def
+/N { 
+	PStroke
+	} bind def
+/Nclip {
+	strokepath clip newpath
+	} bind def
+/Nstrk {
+	currentlinewidth exch setlinewidth PStroke setlinewidth
+	} bind def
+/M {newpath moveto} bind def
+/E {lineto} bind def
+/D {curveto} bind def
+/O {closepath} bind def
+/L { 
+ 	/n exch def
+	newpath
+	normalize
+	moveto 
+	2 1 n {pop normalize lineto} for
+	} bind def
+/Y { 
+	L 
+	closepath
+	} bind def
+/R { 
+	/y2 exch def
+	/x2 exch def
+	/y1 exch def
+	/x1 exch def
+	x1 y1
+	x2 y1
+	x2 y2
+	x1 y2
+	4 Y 
+	} bind def
+/rarc 
+	{rad 
+	 arcto
+	} bind def
+/RR { 
+	/rad exch def
+	normalize
+	/y2 exch def
+	/x2 exch def
+	normalize
+	/y1 exch def
+	/x1 exch def
+	mark
+	newpath
+	{
+	x1 y1 rad add moveto
+	x1 y2 x2 y2 rarc
+	x2 y2 x2 y1 rarc
+	x2 y1 x1 y1 rarc
+	x1 y1 x1 y2 rarc
+	closepath
+	} stopped {x1 y1 x2 y2 R} if 
+	cleartomark
+	} bind def
+/RRR { 
+	/rad exch def
+	normalize /y4 exch def /x4 exch def
+	normalize /y3 exch def /x3 exch def
+	normalize /y2 exch def /x2 exch def
+	normalize /y1 exch def /x1 exch def
+	newpath
+	normalize moveto 
+	mark
+	{
+	x2 y2 x3 y3 rarc
+	x3 y3 x4 y4 rarc
+	x4 y4 x1 y1 rarc
+	x1 y1 x2 y2 rarc
+	closepath
+	} stopped
+	 {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if
+	cleartomark
+	} bind def
+/C { 
+	grestore
+	gsave
+	R 
+	clip
+	setCurrentScreen
+} bind def
+/CP { 
+	grestore
+	gsave
+	Y 
+	clip
+	setCurrentScreen
+} bind def
+/F { 
+	FMfonts exch get
+	[FMsetsize 0 0 FMpointsize 0 0] makefont
+	setfont
+	} bind def
+/Q { 
+	/FMpointsize exch def
+	/FMsetsize FMpointsize def
+	F 
+	} bind def
+/QQ { 
+	/FMsetsize exch def
+	/FMpointsize exch def
+	F 
+	} bind def
+/T { 
+	moveto show
+	} bind def
+/RF { 
+	rotate
+	0 ne {-1 1 scale} if
+	} bind def
+/TF { 
+	gsave
+	moveto 
+	RF
+	show
+	grestore
+	} bind def
+/P { 
+	moveto
+	0 32 3 2 roll widthshow
+	} bind def
+/PF { 
+	gsave
+	moveto 
+	RF
+	0 32 3 2 roll widthshow
+	grestore
+	} bind def
+/S { 
+	moveto
+	0 exch ashow
+	} bind def
+/SF { 
+	gsave
+	moveto
+	RF
+	0 exch ashow
+	grestore
+	} bind def
+/B { 
+	moveto
+	0 32 4 2 roll 0 exch awidthshow
+	} bind def
+/BF { 
+	gsave
+	moveto
+	RF
+	0 32 4 2 roll 0 exch awidthshow
+	grestore
+	} bind def
+/G { 
+	gsave
+	newpath
+	normalize translate 0.0 0.0 moveto 
+	dnormalize scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	closepath 
+	PFill fill
+	grestore
+	} bind def
+/Gstrk {
+	savematrix
+    newpath
+    2 index 2 div add exch 3 index 2 div sub exch 
+    normalize 2 index 2 div sub exch 3 index 2 div add exch 
+    translate
+    scale 
+    0.0 0.0 1.0 5 3 roll arc 
+    restorematrix
+    currentlinewidth exch setlinewidth PStroke setlinewidth
+    } bind def
+/Gclip { 
+	newpath
+	savematrix
+	normalize translate 0.0 0.0 moveto 
+	dnormalize scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	closepath 
+	clip newpath
+	restorematrix
+	} bind def
+/GG { 
+	gsave
+	newpath
+	normalize translate 0.0 0.0 moveto 
+	rotate 
+	dnormalize scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	closepath
+	PFill
+	fill
+	grestore
+	} bind def
+/GGclip { 
+	savematrix
+	newpath
+    normalize translate 0.0 0.0 moveto 
+    rotate 
+    dnormalize scale 
+    0.0 0.0 1.0 5 3 roll arc 
+    closepath
+	clip newpath
+	restorematrix
+	} bind def
+/GGstrk { 
+	savematrix
+    newpath
+    normalize translate 0.0 0.0 moveto 
+    rotate 
+    dnormalize scale 
+    0.0 0.0 1.0 5 3 roll arc 
+    closepath 
+	restorematrix
+    currentlinewidth exch setlinewidth PStroke setlinewidth
+	} bind def
+/A { 
+	gsave
+	savematrix
+	newpath
+	2 index 2 div add exch 3 index 2 div sub exch 
+	normalize 2 index 2 div sub exch 3 index 2 div add exch 
+	translate 
+	scale 
+	2 copy 0.0 0.0 1.0 5 3 roll arc 
+	round cvi 360 mod exch round cvi 360 mod eq {closepath} if 
+	restorematrix
+	PStroke
+	grestore
+	} bind def
+/Aclip {
+	newpath
+	savematrix
+	normalize translate 0.0 0.0 moveto 
+	dnormalize scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	closepath 
+	strokepath clip newpath
+	restorematrix
+} bind def
+/Astrk {
+	Gstrk
+} bind def
+/AA { 
+	gsave
+	savematrix
+	newpath
+	
+	3 index 2 div add exch 4 index 2 div sub exch 
+	
+	normalize 3 index 2 div sub exch 4 index 2 div add exch
+	translate 
+	rotate 
+	scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	restorematrix
+	PStroke
+	grestore
+	} bind def
+/AAclip {
+	savematrix
+	newpath
+    normalize translate 0.0 0.0 moveto 
+    rotate 
+    dnormalize scale 
+    0.0 0.0 1.0 5 3 roll arc 
+    closepath
+	strokepath clip newpath
+	restorematrix
+} bind def
+/AAstrk {
+	GGstrk
+} bind def
+/BEGINPRINTCODE { 
+	/FMdicttop countdictstack 1 add def 
+	/FMoptop count 7 sub def 
+	/FMsaveobject save def
+	userdict begin 
+	/showpage {} def 
+	FMNORMALIZEGRAPHICS 
+	3 index neg 3 index neg translate
+	} bind def
+/ENDPRINTCODE {
+	count -1 FMoptop {pop pop} for 
+	countdictstack -1 FMdicttop {pop end} for 
+	FMsaveobject restore 
+	} bind def
+/gn { 
+	0 
+	{	46 mul 
+		cf read pop 
+		32 sub 
+		dup 46 lt {exit} if 
+		46 sub add 
+		} loop
+	add 
+	} bind def
+/cfs { 
+	/str sl string def 
+	0 1 sl 1 sub {str exch val put} for 
+	str def 
+	} bind def
+/ic [ 
+	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
+	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
+	0
+	{0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
+	{10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
+	{19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
+	{13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
+	{4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
+	{13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
+	{7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
+	{0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
+	{10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
+	] def
+/ms { 
+	/sl exch def 
+	/val 255 def 
+	/ws cfs 
+	/im cfs 
+	/val 0 def 
+	/bs cfs 
+	/cs cfs 
+	} bind def
+400 ms 
+/ip { 
+	is 
+	0 
+	cf cs readline pop 
+	{	ic exch get exec 
+		add 
+		} forall 
+	pop 
+	
+	} bind def
+/rip { 
+	   
+	  
+	  bis ris copy pop 
+      is
+      0
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop 
+	  ris gis copy pop 
+	  dup is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop
+	  gis bis copy pop 
+	  dup add is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+      pop 
+      
+      } bind def
+/rip4 { 
+	   
+	  
+	  kis cis copy pop 
+      is
+      0
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop 
+	  cis mis copy pop 
+	  dup is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop
+	  mis yis copy pop 
+	  dup dup add is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop
+	  yis kis copy pop 
+	  3 mul is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+      pop 
+      
+      } bind def
+/wh { 
+	/len exch def 
+	/pos exch def 
+	ws 0 len getinterval im pos len getinterval copy pop
+	pos len 
+	} bind def
+/bl { 
+	/len exch def 
+	/pos exch def 
+	bs 0 len getinterval im pos len getinterval copy pop
+	pos len 
+	} bind def
+/s1 1 string def
+/fl { 
+	/len exch def 
+	/pos exch def 
+	/val cf s1 readhexstring pop 0 get def
+	pos 1 pos len add 1 sub {im exch val put} for
+	pos len 
+	} bind def
+/hx { 
+	3 copy getinterval 
+	cf exch readhexstring pop pop 
+	} bind def
+/wbytes { 
+      dup dup
+      8 gt { pop 8 idiv mul }
+      { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse
+	} bind def
+/BEGINBITMAPBWc { 
+	1 {} COMMONBITMAPc
+	} bind def
+/BEGINBITMAPGRAYc { 
+	8 {} COMMONBITMAPc
+	} bind def
+/BEGINBITMAP2BITc { 
+	2 {} COMMONBITMAPc
+	} bind def
+/COMMONBITMAPc { 
+		 
+	/cvtProc exch def
+	/depth exch def
+	gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+	/bitmapsave save def 
+	cvtProc                
+	/is im 0 lb getinterval def 
+	ws 0 lb getinterval is copy pop 
+	/cf currentfile def 
+	width height depth [width 0 0 height neg 0 height] 
+	{ip} image 
+	bitmapsave restore 
+	grestore
+	} bind def
+/BEGINBITMAPBW { 
+	1 {} COMMONBITMAP
+	} bind def
+/BEGINBITMAPGRAY { 
+	8 {} COMMONBITMAP
+	} bind def
+/BEGINBITMAP2BIT { 
+	2 {} COMMONBITMAP
+	} bind def
+/COMMONBITMAP { 
+	/cvtProc exch def
+	/depth exch def
+	gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/bitmapsave save def 
+	cvtProc              
+	/is width depth wbytes string def
+	/cf currentfile def 
+	width height depth [width 0 0 height neg 0 height] 
+	{cf is readhexstring pop} image
+	bitmapsave restore 
+	grestore
+	} bind def
+/ngrayt 256 array def
+/nredt 256 array def
+/nbluet 256 array def
+/ngreent 256 array def
+fMLevel1 {
+/colorsetup {
+	currentcolortransfer
+	/gryt exch def
+	/blut exch def
+	/grnt exch def
+	/redt exch def
+	0 1 255 {
+		/indx exch def
+		/cynu 1 red indx get 255 div sub def
+		/magu 1 green indx get 255 div sub def
+		/yelu 1 blue indx get 255 div sub def
+		/kk cynu magu min yelu min def
+		/u kk currentundercolorremoval exec def
+%		/u 0 def
+		nredt indx 1 0 cynu u sub max sub redt exec put
+		ngreent indx 1 0 magu u sub max sub grnt exec put
+		nbluet indx 1 0 yelu u sub max sub blut exec put
+		ngrayt indx 1 kk currentblackgeneration exec sub gryt exec put
+	} for
+	{255 mul cvi nredt exch get}
+	{255 mul cvi ngreent exch get}
+	{255 mul cvi nbluet exch get}
+	{255 mul cvi ngrayt exch get}
+	setcolortransfer
+	{pop 0} setundercolorremoval
+	{} setblackgeneration
+	} bind def
+}
+{
+/colorSetup2 {
+	[ /Indexed /DeviceRGB 255 
+		{dup red exch get 255 div 
+		 exch dup green exch get 255 div 
+		 exch blue exch get 255 div}
+	] setcolorspace
+} bind def
+} ifelse
+/fakecolorsetup {
+	/tran 256 string def
+	0 1 255 {/indx exch def 
+		tran indx
+		red indx get 77 mul
+		green indx get 151 mul
+		blue indx get 28 mul
+		add add 256 idiv put} for
+	currenttransfer
+	{255 mul cvi tran exch get 255.0 div}
+	exch fmConcatProcs settransfer
+} bind def
+/BITMAPCOLOR { 
+	/depth 8 def
+	gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/bitmapsave save def
+	fMLevel1 {	
+		colorsetup
+		/is width depth wbytes string def
+		/cf currentfile def 
+		width height depth [width 0 0 height neg 0 height] 
+		{cf is readhexstring pop} {is} {is} true 3 colorimage 
+	} {
+		colorSetup2
+		/is width depth wbytes string def
+		/cf currentfile def 
+		7 dict dup begin
+			/ImageType 1 def
+			/Width width def
+			/Height height def
+			/ImageMatrix [width 0 0 height neg 0 height] def
+			/DataSource {cf is readhexstring pop} bind def
+			/BitsPerComponent depth def
+			/Decode [0 255] def
+		end image	
+	} ifelse
+	bitmapsave restore 
+	grestore
+	} bind def
+/BITMAPCOLORc { 
+	/depth 8 def
+	gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+	/bitmapsave save def 
+	fMLevel1 {	
+		colorsetup
+		/is im 0 lb getinterval def 
+		ws 0 lb getinterval is copy pop 
+		/cf currentfile def 
+		width height depth [width 0 0 height neg 0 height] 
+		{ip} {is} {is} true 3 colorimage
+	} {
+		colorSetup2
+		/is im 0 lb getinterval def 
+		ws 0 lb getinterval is copy pop 
+		/cf currentfile def 
+		7 dict dup begin
+			/ImageType 1 def
+			/Width width def
+			/Height height def
+			/ImageMatrix [width 0 0 height neg 0 height] def
+			/DataSource {ip} bind def
+			/BitsPerComponent depth def
+			/Decode [0 255] def
+		end image	
+	} ifelse
+	bitmapsave restore 
+	grestore
+	} bind def
+/BITMAPTRUECOLORc { 
+	/depth 24 def
+        gsave
+ 	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+	/bitmapsave save def 
+        
+	/is im 0 lb getinterval def	
+	/ris im 0 width getinterval def	
+	/gis im width width getinterval def	
+	/bis im width 2 mul width getinterval def 
+        
+	ws 0 lb getinterval is copy pop 
+	/cf currentfile def 
+	width height 8 [width 0 0 height neg 0 height] 
+	{width rip pop ris} {gis} {bis} true 3 colorimage
+	bitmapsave restore 
+	grestore
+	} bind def
+/BITMAPCMYKc { 
+	/depth 32 def
+        gsave
+ 	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+	/bitmapsave save def 
+        
+	/is im 0 lb getinterval def	
+	/cis im 0 width getinterval def	
+	/mis im width width getinterval def	
+	/yis im width 2 mul width getinterval def 
+	/kis im width 3 mul width getinterval def 
+        
+	ws 0 lb getinterval is copy pop 
+	/cf currentfile def 
+	width height 8 [width 0 0 height neg 0 height] 
+	{width rip4 pop cis} {mis} {yis} {kis} true 4 colorimage
+	bitmapsave restore 
+	grestore
+	} bind def
+/BITMAPTRUECOLOR { 
+        gsave
+		
+		3 index 2 div add exch	
+		4 index 2 div add exch	
+		translate		
+		rotate			
+		1 index 2 div neg	
+		1 index 2 div neg	
+		translate		
+		scale			
+		/height exch def /width exch def
+        /bitmapsave save def 
+        /is width string def
+        /gis width string def
+        /bis width string def
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        { cf is readhexstring pop } 
+        { cf gis readhexstring pop } 
+        { cf bis readhexstring pop } 
+        true 3 colorimage 
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPCMYK { 
+        gsave
+		
+		3 index 2 div add exch	
+		4 index 2 div add exch	
+		translate		
+		rotate			
+		1 index 2 div neg	
+		1 index 2 div neg	
+		translate		
+		scale			
+		/height exch def /width exch def
+        /bitmapsave save def 
+        /is width string def
+        /mis width string def
+        /yis width string def
+        /kis width string def
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        { cf is readhexstring pop } 
+        { cf mis readhexstring pop } 
+        { cf yis readhexstring pop } 
+        { cf kis readhexstring pop } 
+        true 4 colorimage 
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPTRUEGRAYc { 
+	/depth 24 def
+        gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+        /bitmapsave save def 
+        
+	/is im 0 lb getinterval def	
+	/ris im 0 width getinterval def	
+	/gis im width width getinterval def	
+	/bis im width 2 mul width getinterval def 
+        ws 0 lb getinterval is copy pop 
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        {width rip pop ris gis bis width gray} image
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPCMYKGRAYc { 
+	/depth 32 def
+        gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+        /bitmapsave save def 
+        
+	/is im 0 lb getinterval def	
+	/cis im 0 width getinterval def	
+	/mis im width width getinterval def	
+	/yis im width 2 mul width getinterval def 
+	/kis im width 3 mul width getinterval def 
+        ws 0 lb getinterval is copy pop 
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        {width rip pop cis mis yis kis width cgray} image
+        bitmapsave restore 
+        grestore
+        } bind def
+/cgray { 
+        /ww exch def
+        /k exch def
+        /y exch def
+        /m exch def
+        /c exch def
+        0 1 ww 1 sub { /i exch def c i get m i get y i get k i get CMYKtoRGB
+				.144 mul 3 1 roll .587 mul 3 1 roll .299 mul add add
+				c i 3 -1 roll floor cvi put } for
+        c
+ 		} bind def
+/gray { 
+        /ww exch def
+        /b exch def
+        /g exch def
+        /r exch def
+        0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
+			b i get .114 mul add add r i 3 -1 roll floor cvi put } for
+        r
+        } bind def
+/BITMAPTRUEGRAY { 
+        gsave
+		
+		3 index 2 div add exch	
+		4 index 2 div add exch	
+		translate		
+		rotate			
+		1 index 2 div neg	
+		1 index 2 div neg	
+		translate		
+		scale			
+		/height exch def /width exch def
+        /bitmapsave save def 
+        /is width string def
+        /gis width string def
+        /bis width string def
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        { cf is readhexstring pop 
+          cf gis readhexstring pop 
+          cf bis readhexstring pop width gray}  image
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPCMYKGRAY { 
+        gsave
+		
+		3 index 2 div add exch	
+		4 index 2 div add exch	
+		translate		
+		rotate			
+		1 index 2 div neg	
+		1 index 2 div neg	
+		translate		
+		scale			
+		/height exch def /width exch def
+        /bitmapsave save def 
+        /is width string def
+        /yis width string def
+        /mis width string def
+        /kis width string def
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        { cf is readhexstring pop 
+          cf mis readhexstring pop 
+          cf yis readhexstring pop 
+          cf kis readhexstring pop width cgray}  image
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPGRAY { 
+	8 {fakecolorsetup} COMMONBITMAP
+	} bind def
+/BITMAPGRAYc { 
+	8 {fakecolorsetup} COMMONBITMAPc
+	} bind def
+/ENDBITMAP {
+	} bind def
+end 
+	/ALDmatrix matrix def ALDmatrix currentmatrix pop
+/StartALD {
+	/ALDsave save def
+	 savematrix
+	 ALDmatrix setmatrix
+	} bind def
+/InALD {
+	 restorematrix
+	} bind def
+/DoneALD {
+	 ALDsave restore
+	} bind def
+/I { setdash } bind def
+/J { [] 0 setdash } bind def
+%%EndProlog
+%%BeginSetup
+(5.5) FMVERSION
+1 1 0 0 612 792 0 1 18 FMDOCUMENT
+%%IncludeFont: Helvetica-Bold
+0 0 /Helvetica-Bold FMFONTDEFINE
+%%IncludeFont: Times-Roman
+1 0 /Times-Roman FMFONTDEFINE
+%%IncludeFont: Times-Italic
+2 0 /Times-Italic FMFONTDEFINE
+%%IncludeFont: Times-Bold
+3 0 /Times-Bold FMFONTDEFINE
+%%IncludeFont: Palatino-Roman
+4 0 /Palatino-Roman FMFONTDEFINE
+%%IncludeFont: Courier-Bold
+5 0 /Courier-Bold FMFONTDEFINE
+%%IncludeFont: Helvetica
+6 0 /Helvetica FMFONTDEFINE
+%%IncludeFont: Courier
+7 0 /Courier FMFONTDEFINE
+32 FMFILLS
+0 0 FMFILL
+1 0.1 FMFILL
+2 0.3 FMFILL
+3 0.5 FMFILL
+4 0.7 FMFILL
+5 0.9 FMFILL
+6 0.97 FMFILL
+7 1 FMFILL
+8 <0f1e3c78f0e1c387> FMFILL
+9 <0f87c3e1f0783c1e> FMFILL
+10 <cccccccccccccccc> FMFILL
+11 <ffff0000ffff0000> FMFILL
+12 <8142241818244281> FMFILL
+13 <03060c183060c081> FMFILL
+14 <8040201008040201> FMFILL
+16 1 FMFILL
+17 0.9 FMFILL
+18 0.7 FMFILL
+19 0.5 FMFILL
+20 0.3 FMFILL
+21 0.1 FMFILL
+22 0.03 FMFILL
+23 0 FMFILL
+24 <f0e1c3870f1e3c78> FMFILL
+25 <f0783c1e0f87c3e1> FMFILL
+26 <3333333333333333> FMFILL
+27 <0000ffff0000ffff> FMFILL
+28 <7ebddbe7e7dbbd7e> FMFILL
+29 <fcf9f3e7cf9f3f7e> FMFILL
+30 <7fbfdfeff7fbfdfe> FMFILL
+%%EndSetup
+%%Page: "1" 1
+%%BeginPaperSize: Letter
+%%EndPaperSize
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+J
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Ma) 72 737.98 T
+(y 11, 1999) 84.32 737.98 T
+72 882/G30237 FmPA
+72 444.68 558 444.68 2 L
+2 Z
+N
+72 75.33 558 75.33 2 L
+0.25 H
+N
+0 10 Q
+(1) 527.82 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+72 204/G30239 FmPA
+0 102 708 194 748 102.77 44.68 72.71 659.17 FMBEGINEPSF
+%%BeginDocument: <inline>
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: /home/ichiban/jwasan/sun_black.epsi
+%%Creator: IslandDraw for jwasan
+%%CreationDate: Thu Sep 19 15:11:28 1996
+%%Pages: 1
+%%BoundingBox: 102 708 194 748
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%EndComments
+save /d_sv_obj exch def
+
+userdict /IslandDrawDict 300 dict dup begin put
+
+/bdef	{bind def} bind def
+/E	{exch} bdef
+/FF	{findfont} bdef
+/MF	{makefont} bdef
+/RO	{rotate} bdef
+/SC	{scale} bdef
+/SF	{setfont} bdef
+/SG	{setgray} bdef
+/TR	{translate} bdef
+/bp	{lj lw rgb} bdef
+/bpbw	{lj lw setgray} bdef
+/c	{curveto} bdef
+/cl	{closepath} bdef
+/fi	{eofill} bdef
+/g	{setgray} bdef
+/gr	{grestore} bdef
+/gs	{gsave} bdef
+/l	{lineto} bdef
+/lj	{setlinejoin} bdef
+/lw	{setlinewidth} bdef
+/m	{moveto} bdef
+/n	{newpath} bdef
+/nx	{/x E def} bdef
+/r	{rmoveto} bdef
+/rl	{rlineto} bdef
+/rgb	{setrgbcolor} bdef
+/s	{show} bdef
+/sd	{setdash} bdef
+/sp	{x 0 rmoveto} bdef
+/ss	{currentpoint pop E m} bdef
+/st	{stroke} bdef
+%% pattern stuff
+/BPSIDE	32 def	%% pixels per pattern side
+/PATFREQ 3.0 def	%% pattern pixels per mm
+/dp_mat [PATFREQ 0 0 PATFREQ 0 0] def
+/dp_pw	BPSIDE def	%% pattern pixel width
+/dp_ph	BPSIDE def	%% pattern pixel height
+/dp_w	dp_pw PATFREQ div def	%% pattern mm width
+/dp_h	dp_ph PATFREQ div def	%% pattern mm height
+/savemat matrix def
+/topmat matrix def
+/patmat matrix def
+
+%%	catch nocurrentpoint error for:		pathbbox
+/ncpoint errordict /nocurrentpoint get def
+errordict begin
+/nocurrentpoint	{
+	dup /pathbbox load eq
+	{pop 0 0 1 1}
+	{ncpoint}
+	ifelse
+} bdef
+end
+/ar	{ %% sa ea sx sy rot tx ty
+	matrix currentmatrix 8 1 roll TR RO SC
+	n 0 0 1 5 3 roll arc setmatrix
+} bdef
+/arn	{ %% sa ea sx sy rot tx ty
+ TR RO SC
+	matrix currentmatrix 8 1 roll
+	n 0 0 1 5 3 roll arcn setmatrix
+} bdef
+/el	{ %% sx sy rot tx ty
+	matrix currentmatrix 6 1 roll TR RO SC
+	n 0 0 1 0 360 arc setmatrix cl
+} bdef
+/image_raster	{ %% sw sh sd dw dh xs ys
+	TR SC /sd E def /sh E def /sw E def
+	/imagebuf sw sd mul 7 add 8 idiv string def
+	sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop}
+	image
+} bdef
+/imagemask_raster	{
+	TR SC /sh E def /sw E def
+	/imagebuf sw 7 add 8 idiv string def
+	sw sh false [sw 0 0 sh 0 0]
+	{currentfile imagebuf readhexstring pop}
+	imagemask
+} bdef
+/dither_color_raster    { % bool sw sh sd dw dh xs ys
+	TR SC /sd E def /sh E def /sw E def
+	sd 8 eq and
+	{
+	  /imagebuf 3 string def
+	  /grayval 1 string def
+	  sw sh sd [sw 0 0 sh 0 0]
+	  {
+	    currentfile imagebuf readhexstring pop pop
+	    imagebuf 0 get 0.299 mul
+	    imagebuf 1 get 0.587 mul add
+	    imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval
+	  }
+	  image
+	}
+	{
+	  /imagebuf sw 3 mul sd mul 7 add 8 idiv string def
+	  sh { currentfile imagebuf readhexstring pop pop } repeat
+	} ifelse
+} bdef
+/image_color_raster	{ % bool sw sh sd dw dh xs ys
+	/colorimage where not
+	{ dither_color_raster }
+	{
+	  pop
+	  TR SC /sd E def /sh E def /sw E def pop
+	  /imagebuf sw 3 mul sd mul 7 add 8 idiv string def
+	  sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop}
+	  false 3 colorimage
+	} ifelse
+} bdef
+/patpath	{
+	/inv E def
+	topmat setmatrix
+	pathbbox	%% get lo - hi indecies
+	/hy E dp_h div floor cvi def
+	/hx E dp_w div floor cvi def
+	/ly E dp_h div floor cvi def
+	/lx E dp_w div floor cvi def
+	lx 1 hx	{
+	    dp_w mul
+	    ly 1 hy {
+		dp_h mul
+		E dup 3 1 roll E
+		patmat currentmatrix pop
+		TR
+		dp_pw dp_ph inv
+		dp_mat dp_proc imagemask
+		patmat setmatrix
+	    } for
+	    pop
+	} for
+} bdef
+% setpattern brush of patterns instead of gray
+/setpattern	{
+	/blue E def /green E def /red E def
+	/freq E def /bwidth E def /bpside E def
+	/bstring E def
+	/onbits 0 def /offbits 0 def
+	freq 0 {/y E def /x E def
+		/xindex x 1 add 2 div bpside mul cvi def
+		/yindex y 1 add 2 div bpside mul cvi def
+		bstring yindex bwidth mul xindex 8 idiv add get not
+		1 7 xindex 8 mod sub bitshift and 0 ne
+		{/onbits onbits 1 add def 1}
+		{/offbits offbits 1 add def 0}
+		ifelse
+	} setscreen {} settransfer
+	systemdict /setcmykcolor known
+	{ /fact 1 onbits offbits onbits add div sub def
+	1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0
+		setcmykcolor
+	}
+	{ offbits offbits onbits add div setgray}
+	ifelse
+} bdef
+/dmatrix matrix def
+/dpi 72 0 dmatrix defaultmatrix dtransform
+	dup mul E dup mul add sqrt
+def
+
+/B	{gs bp st gr} bdef %% brush: gr lw lj
+/Bbw	{gs bpbw st gr} bdef %% brush: gr lw lj
+/F	{gs rgb eofill gr} bdef %% fill: gr
+/Fbw	{gs setgray eofill gr} bdef %% fill: gr
+/PB	{gs lj lw setpattern st gr} bdef
+/PF	{gs eoclip patpath gr} bdef
+/BB	{gs rgb lj lw strokepath clip patpath gr} bdef
+/xdef {exch def} bdef
+/clip_region {
+  /ht xdef
+  /wd xdef
+  /bm xdef
+  /lm xdef
+  newpath
+      lm bm moveto
+      0 ht rlineto
+      wd 0 rlineto
+      0 ht neg rlineto
+  closepath clip
+} bdef
+%! Island text prolog Version 3.1
+%%
+%%BeginProlog
+/reencode_small_dict 12 dict def
+/ReencodeSmall {
+reencode_small_dict begin
+/new_codes_and_names exch def
+/new_font_name exch def
+/base_font_name exch def
+/base_font_dict base_font_name findfont def
+/newfont base_font_dict maxlength dict def
+base_font_dict {
+exch dup /FID ne
+{ dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put }
+ifelse
+}
+{ pop pop }
+ifelse
+} forall
+newfont /FontName new_font_name put
+new_codes_and_names aload pop
+new_codes_and_names length 2 idiv
+{ newfont /Encoding get 3 1 roll put }
+repeat
+new_font_name newfont definefont pop
+end     %reencode_small_dict
+} def
+/extended_Zapf [
+8#223 /a89
+8#224 /a90
+8#225 /a93
+8#226 /a94
+8#227 /a91
+8#230 /a92
+8#231 /a205
+8#232 /a85
+8#233 /a206
+8#234 /a86
+8#235 /a87
+8#236 /a88
+8#237 /a95
+8#240 /a96
+] def
+/extended_Standard [
+29 /thorn
+30 /yacute
+31 /divide
+128 /Acircumflex
+129 /Adieresis
+130 /Agrave
+131 /Aring
+132 /Atilde
+133 /Ccedilla
+134 /Eacute
+135 /Ecircumflex
+136 /Edieresis
+137 /Egrave
+138 /Iacute
+139 /Icircumflex
+140 /Idieresis
+141 /Igrave
+142 /Ntilde
+143 /Oacute
+144 /Ocircumflex
+145 /Odieresis
+146 /Ograve
+147 /Otilde
+148 /Scaron
+149 /Uacute
+150 /Ucircumflex
+151 /Udieresis
+152 /Ugrave
+153 /Ydieresis
+154 /Zcaron
+155 /aacute
+156 /acircumflex
+157 /adieresis
+158 /agrave
+159 /aring
+160 /atilde
+161 /exclamdown
+162 /cent
+163 /sterling
+164 /fraction
+165 /yen
+166 /florin
+167 /section
+168 /currency
+169 /quotesingle
+170 /quotedblleft
+171 /guillemotleft
+172 /guilsinglleft
+173 /guilsinglright
+174 /fi
+175 /fl
+176 /plusminus
+177 /endash
+178 /dagger
+179 /daggerdbl
+180 /periodcentered
+181 /twosuperior
+182 /paragraph
+183 /bullet
+184 /quotesinglbase
+185 /quotedblbase
+186 /quotedblright
+187 /guillemotright
+188 /ellipsis
+189 /perthousand
+190 /threesuperior
+191 /questiondown
+192 /mu
+193 /grave
+194 /acute
+195 /circumflex
+196 /tilde
+197 /macron
+198 /breve
+199 /dotaccent
+200 /dieresis
+201 /onesuperior
+202 /ring
+203 /cedilla
+204 /onequarter
+205 /hungarumlaut
+206 /ogonek
+207 /caron
+208 /emdash
+209 /ccedilla
+210 /copyright
+211 /eacute
+212 /ecircumflex
+213 /edieresis
+214 /egrave
+215 /iacute
+216 /icircumflex
+217 /idieresis
+218 /igrave
+219 /logicalnot
+220 /minus
+221 /ntilde
+222 /oacute
+223 /ocircumflex
+224 /odieresis
+225 /AE
+226 /onehalf
+227 /ordfeminine
+228 /ograve
+229 /otilde
+230 /registered
+231 /scaron
+232 /Lslash
+233 /Oslash
+234 /OE
+235 /ordmasculine
+236 /trademark
+237 /uacute
+238 /ucircumflex
+239 /udieresis
+240 /ugrave
+241 /ae
+242 /ydieresis
+243 /zcaron
+244 /Aacute
+245 /dotlessi
+246 /threequarters
+247 /Eth
+248 /lslash
+249 /oslash
+250 /oe
+251 /germandbls
+252 /multiply
+253 /Yacute
+254 /Thorn
+255 /eth
+] def
+/extended_Symbol [
+] def
+/extend_font {  % stack: fontname newfontname
+exch dup (ZapfDingbats) eq
+{ cvn exch cvn extended_Zapf ReencodeSmall }
+{ dup (Symbol) eq
+{ cvn exch cvn extended_Symbol ReencodeSmall }
+{ cvn exch cvn extended_Standard ReencodeSmall }
+ifelse
+}
+ifelse
+} bind def
+/extend_font_name { % stack: font_name_string
+dup length 1 add string /extended_font_name exch def
+extended_font_name 0 (_) putinterval
+extended_font_name 1 3 -1 roll putinterval
+extended_font_name
+} bind def
+/gf {
+/f exch def f cvn where
+{ f exch begin cvn load exec setfont end }
+{ f 0 f length 8 sub getinterval dup
+/localfont exch extend_font_name def
+localfont extend_font
+localfont findfont
+/xsz f f length 4 sub 4 getinterval cvi def
+/ysz f f length 8 sub 4 getinterval cvi def
+[ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def
+setfont
+}
+ifelse
+} bind def
+/gfns {
+/f exch def f cvn where
+{ f exch begin cvn load exec setfont end }
+{ f 0 f length 8 sub getinterval cvn findfont
+/xsz f f length 4 sub 4 getinterval cvi def
+/ysz f f length 8 sub 4 getinterval cvi def
+[ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def
+setfont
+}
+ifelse
+} bind def
+/ul { % space drop thickness
+gs currentpoint currentlinewidth 
+currentpoint n m 6 -3 roll 
+lw 0 exch r
+0 rl st lw m
+gr 
+} bind def
+/nxtab { currentpoint pop 1000.0 mul cvi tab mod
+	tab exch sub 1000.0 div 0 rmoveto } bind def
+/nx { /x exch def } bind def
+0. nx
+%%EndProlog
+gsave
+2.83465 -2.83465 scale 0 -279.4 translate
+topmat currentmatrix pop
+n 50.579 18.898 m 50.538 21.026 52.929 22.027 52.888 23.89 c
+52.888 24.404 52.499 25.739 51.136 25.712 c
+50.454 25.698 49.801 25.239 49.815 24.057 c
+49.815 23.222 l
+49.801 23.153 49.801 23.07 49.745 23 c
+49.703 22.958 49.62 22.93 49.551 22.958 c
+49.425 23.028 49.397 23.167 49.342 23.278 c
+49.273 23.64 49.189 24.015 49.119 24.377 c
+49.105 24.404 49.147 24.404 49.119 24.404 c
+49.064 24.669 49.022 24.947 49.008 25.211 c
+48.994 25.378 49.105 25.517 49.245 25.6 c
+49.759 25.878 50.413 26.073 51.136 26.087 c
+52.902 26.115 54.348 24.571 54.376 23.07 c
+54.389 21.86 53.708 21.164 52.957 20.261 c
+52.582 19.788 51.831 19.134 51.859 18.272 c
+51.859 17.577 52.429 16.798 53.472 16.812 c
+54.876 16.84 54.654 18.328 54.681 19.009 c
+54.681 19.079 54.681 19.148 54.737 19.176 c
+54.793 19.232 54.876 19.246 54.946 19.218 c
+54.987 19.176 55.015 19.148 55.029 19.106 c
+55.377 17.8 l
+55.433 17.563 55.544 17.327 55.544 17.049 c
+55.544 16.979 55.488 16.91 55.419 16.854 c
+54.681 16.465 54.237 16.409 53.555 16.395 c
+51.831 16.367 50.593 17.591 50.579 18.898 c
+cl 54.782 21.484 m 54.782 21.554 54.837 21.624 54.921 21.624 c
+55.101 21.624 55.199 21.262 55.644 20.664 c
+55.894 20.288 56.214 19.996 56.381 19.996 c
+56.506 19.996 56.52 20.094 56.52 20.177 c
+56.52 20.594 54.935 23.932 54.935 25.239 c
+54.935 25.642 55.101 26.031 55.616 26.031 c
+56.839 26.031 58.161 24.488 59.106 23.097 c
+59.148 23.056 59.176 23.056 59.162 23.125 c
+58.967 23.695 58.689 24.78 58.689 25.447 c
+58.689 25.726 58.745 26.059 59.189 26.059 c
+60.274 26.059 61.679 23.932 61.679 23.431 c
+61.679 23.348 61.651 23.264 61.553 23.264 c
+61.387 23.264 61.331 23.542 61.15 23.848 c
+60.816 24.377 60.274 25.072 60.01 25.072 c
+59.913 25.072 59.913 24.961 59.913 24.877 c
+59.913 24.168 61.609 19.538 61.609 19.399 c
+61.609 19.287 61.595 19.218 61.428 19.218 c
+61.317 19.218 61.136 19.204 60.886 19.204 c
+60.427 19.204 60.399 19.274 60.357 19.357 c
+60.135 19.788 59.801 21.164 59.134 22.374 c
+58.23 23.946 57.006 25.183 56.492 25.183 c
+56.311 25.183 56.2 25.044 56.2 24.836 c
+56.2 24.14 57.883 20.539 57.883 19.663 c
+57.883 19.454 57.771 19.037 57.271 19.037 c
+55.922 19.037 54.782 21.234 54.782 21.484 c
+cl 67.509 19.051 m 66.16 19.051 64.727 21.192 64.241 21.916 c
+64.213 21.985 64.199 21.957 64.213 21.902 c
+64.449 21.039 64.727 20.275 64.727 19.704 c
+64.727 19.357 64.561 19.009 64.116 19.009 c
+63.17 19.009 61.793 20.872 61.793 21.331 c
+61.793 21.429 61.821 21.498 61.891 21.498 c
+62.058 21.498 62.197 21.178 62.447 20.845 c
+62.767 20.455 63.156 19.955 63.393 19.955 c
+63.434 19.955 63.476 19.983 63.476 20.122 c
+63.476 20.706 62.28 24.001 61.78 25.642 c
+61.724 25.823 61.835 25.864 62.364 25.864 c
+62.739 25.864 62.92 25.92 62.989 25.628 c
+63.295 24.53 63.865 23.306 64.491 22.235 c
+65.061 21.234 66.285 19.788 66.966 19.788 c
+67.119 19.788 67.217 19.899 67.217 20.136 c
+67.217 20.831 65.437 24.154 65.492 25.42 c
+65.506 25.781 65.631 26.045 66.09 26.045 c
+67.147 26.045 68.079 24.571 68.51 23.793 c
+68.579 23.668 68.691 23.528 68.593 23.376 c
+68.565 23.32 68.51 23.292 68.44 23.292 c
+68.399 23.292 68.357 23.334 68.329 23.376 c
+68.037 23.89 67.397 25.016 66.966 25.044 c
+66.883 25.044 66.841 24.961 66.841 24.891 c
+66.841 24.39 68.399 21.151 68.399 20.052 c
+68.399 19.315 67.995 19.051 67.509 19.051 c
+cl 0 0 0 F
+n 37.927 22.069 m 37.526 22.47 36.877 22.469 36.476 22.069 c
+36.076 21.668 36.075 21.018 36.476 20.618 c
+38.852 18.242 l
+39.488 18.877 l
+37.095 21.27 l
+37.275 21.45 l
+39.667 19.057 l
+40.303 19.692 l
+37.927 22.069 l
+cl 0 0 0 F
+n 39.777 20.592 m 40.178 20.191 40.827 20.191 41.228 20.592 c
+41.629 20.992 41.629 21.642 41.228 22.043 c
+38.852 24.419 l
+38.217 23.784 l
+40.609 21.391 l
+40.43 21.211 l
+38.037 23.604 l
+37.401 22.968 l
+39.777 20.592 l
+cl 0 0 0 F
+n 42.858 25.522 m 43.259 25.922 43.259 26.572 42.858 26.972 c
+42.457 27.373 41.807 27.373 41.407 26.972 c
+39.031 24.596 l
+39.666 23.961 l
+42.059 26.354 l
+42.239 26.174 l
+39.846 23.781 l
+40.482 23.145 l
+42.858 25.522 l
+cl 0 0 0 F
+n 41.381 23.671 m 40.98 23.271 40.98 22.621 41.381 22.221 c
+41.781 21.82 42.431 21.82 42.832 22.221 c
+45.208 24.597 l
+44.573 25.232 l
+42.18 22.84 l
+42 23.019 l
+44.393 25.412 l
+43.757 26.048 l
+41.381 23.671 l
+cl 0 0 0 F
+n 44.462 22.068 m 44.062 22.469 43.412 22.468 43.012 22.068 c
+42.611 21.667 42.611 21.017 43.012 20.616 c
+45.388 18.241 l
+46.023 18.876 l
+43.631 21.269 l
+43.81 21.448 l
+46.203 19.056 l
+46.839 19.692 l
+44.462 22.068 l
+cl 0 0 0 F
+n 46.313 20.591 m 46.713 20.19 47.363 20.19 47.763 20.591 c
+48.164 20.992 48.164 21.642 47.763 22.042 c
+45.387 24.418 l
+44.752 23.782 l
+47.145 21.39 l
+46.965 21.21 l
+44.572 23.603 l
+43.936 22.967 l
+46.313 20.591 l
+cl 0 0 0 F
+n 42.858 18.987 m 43.259 19.388 43.259 20.037 42.858 20.438 c
+42.457 20.839 41.807 20.839 41.407 20.438 c
+39.031 18.062 l
+39.666 17.426 l
+42.059 19.819 l
+42.239 19.64 l
+39.846 17.247 l
+40.482 16.611 l
+42.858 18.987 l
+cl 0 0 0 F
+n 41.381 17.137 m 40.98 16.736 40.98 16.087 41.381 15.686 c
+41.781 15.286 42.431 15.286 42.832 15.686 c
+45.208 18.062 l
+44.573 18.698 l
+42.18 16.305 l
+42 16.484 l
+44.393 18.877 l
+43.757 19.513 l
+41.381 17.137 l
+cl 0 0 0 F
+n 51.433 28.821 m 51.433 27.9 l
+51.433 27.7 51.386 27.573 51.193 27.573 c
+50.981 27.573 50.779 27.79 50.779 28.136 c
+50.779 28.821 l
+50.514 28.821 l
+50.514 27.897 l
+50.514 27.718 50.475 27.573 50.273 27.573 c
+50.047 27.573 49.859 27.807 49.859 28.136 c
+49.859 28.821 l
+49.592 28.821 l
+49.592 27.386 l
+49.851 27.386 l
+49.851 27.469 49.845 27.599 49.827 27.686 c
+49.833 27.689 l
+49.919 27.487 50.109 27.357 50.347 27.357 c
+50.66 27.357 50.743 27.568 50.755 27.683 c
+50.817 27.547 50.975 27.357 51.261 27.357 c
+51.541 27.357 51.701 27.504 51.701 27.828 c
+51.701 28.821 l
+51.433 28.821 l
+cl 0 0 0 F
+n 53.723 28.841 m 53.369 28.841 53.075 28.68 53.075 28.151 c
+53.075 27.689 53.319 27.362 53.813 27.362 c
+53.929 27.362 54.045 27.38 54.149 27.409 c
+54.119 27.637 l
+54.027 27.602 53.917 27.576 53.801 27.576 c
+53.503 27.576 53.357 27.79 53.357 28.116 c
+53.357 28.396 53.453 28.619 53.78 28.619 c
+53.905 28.619 54.036 28.59 54.131 28.541 c
+54.152 28.766 l
+54.054 28.804 53.896 28.841 53.723 28.841 c
+cl 0 0 0 F
+n 55.286 27.614 m 54.973 27.562 54.825 27.784 54.825 28.244 c
+54.825 28.821 l
+54.557 28.821 l
+54.557 27.386 l
+54.816 27.386 l
+54.816 27.475 54.807 27.608 54.783 27.726 c
+54.789 27.726 l
+54.851 27.527 55.003 27.328 55.298 27.36 c
+55.286 27.614 l
+cl 0 0 0 F
+n 56.195 28.847 m 55.794 28.847 55.532 28.622 55.532 28.116 c
+55.532 27.694 55.806 27.36 56.252 27.36 c
+56.63 27.36 56.919 27.562 56.919 28.079 c
+56.919 28.512 56.633 28.847 56.195 28.847 c
+cl 56.228 27.576 m 56.014 27.576 55.811 27.735 55.811 28.09 c
+55.811 28.437 55.957 28.628 56.228 28.628 c
+56.448 28.628 56.639 28.46 56.639 28.093 c
+56.639 27.767 56.502 27.576 56.228 27.576 c
+cl 0 0 0 F
+n 57.611 28.847 m 57.501 28.847 57.391 28.838 57.299 28.821 c
+57.308 28.59 l
+57.4 28.619 57.519 28.639 57.632 28.639 c
+57.829 28.639 57.963 28.552 57.963 28.42 c
+57.963 28.099 57.275 28.296 57.275 27.79 c
+57.275 27.547 57.481 27.36 57.867 27.36 c
+57.957 27.36 58.061 27.371 58.15 27.388 c
+58.144 27.605 l
+58.052 27.576 57.945 27.559 57.847 27.559 c
+57.65 27.559 57.552 27.64 57.552 27.764 c
+57.552 28.079 58.242 27.908 58.242 28.391 c
+58.242 28.651 58.004 28.847 57.611 28.847 c
+cl 0 0 0 F
+n 59.235 28.966 m 59.063 29.41 58.923 29.555 58.596 29.555 c
+58.539 29.555 58.462 29.546 58.402 29.538 c
+58.426 29.304 l
+58.489 29.324 58.548 29.332 58.617 29.332 c
+58.78 29.332 58.867 29.26 58.971 28.983 c
+59.033 28.821 l
+58.474 27.386 l
+58.777 27.386 l
+59.057 28.131 l
+59.105 28.261 59.137 28.374 59.17 28.486 c
+59.176 28.486 l
+59.203 28.385 59.265 28.203 59.322 28.044 c
+59.56 27.386 l
+59.851 27.386 l
+59.235 28.966 l
+cl 0 0 0 F
+n 60.402 28.847 m 60.291 28.847 60.181 28.838 60.089 28.821 c
+60.098 28.59 l
+60.191 28.619 60.309 28.639 60.423 28.639 c
+60.619 28.639 60.753 28.552 60.753 28.42 c
+60.753 28.099 60.065 28.296 60.065 27.79 c
+60.065 27.547 60.271 27.36 60.657 27.36 c
+60.747 27.36 60.851 27.371 60.94 27.388 c
+60.934 27.605 l
+60.842 27.576 60.735 27.559 60.637 27.559 c
+60.44 27.559 60.342 27.64 60.342 27.764 c
+60.342 28.079 61.033 27.908 61.033 28.391 c
+61.033 28.651 60.795 28.847 60.402 28.847 c
+cl 0 0 0 F
+n 61.981 28.844 m 61.677 28.844 61.585 28.723 61.585 28.414 c
+61.585 27.588 l
+61.282 27.588 l
+61.282 27.386 l
+61.585 27.386 l
+61.585 26.92 l
+61.853 26.848 l
+61.853 27.386 l
+62.267 27.386 l
+62.267 27.588 l
+61.853 27.588 l
+61.853 28.322 l
+61.853 28.558 61.898 28.622 62.064 28.622 c
+62.133 28.622 62.207 28.61 62.267 28.596 c
+62.267 28.815 l
+62.183 28.833 62.076 28.844 61.981 28.844 c
+cl 0 0 0 F
+n 63.809 28.088 m 62.842 28.088 l
+62.83 28.472 62.994 28.636 63.309 28.636 c
+63.461 28.636 63.621 28.602 63.741 28.547 c
+63.764 28.758 l
+63.621 28.815 63.449 28.847 63.265 28.847 c
+62.809 28.847 62.565 28.616 62.565 28.11 c
+62.565 27.68 62.806 27.36 63.226 27.36 c
+63.642 27.36 63.818 27.634 63.818 27.963 c
+63.818 27.998 63.815 28.038 63.809 28.088 c
+cl 63.214 27.55 m 63.021 27.55 62.883 27.692 62.854 27.902 c
+63.544 27.902 l
+63.55 27.692 63.422 27.55 63.214 27.55 c
+cl 0 0 0 F
+n 66.085 28.821 m 66.085 27.9 l
+66.085 27.7 66.037 27.573 65.844 27.573 c
+65.633 27.573 65.431 27.79 65.431 28.136 c
+65.431 28.821 l
+65.166 28.821 l
+65.166 27.897 l
+65.166 27.718 65.127 27.573 64.925 27.573 c
+64.699 27.573 64.511 27.807 64.511 28.136 c
+64.511 28.821 l
+64.243 28.821 l
+64.243 27.386 l
+64.502 27.386 l
+64.502 27.469 64.496 27.599 64.478 27.686 c
+64.484 27.689 l
+64.571 27.487 64.761 27.357 64.999 27.357 c
+65.311 27.357 65.395 27.568 65.407 27.683 c
+65.469 27.547 65.627 27.357 65.913 27.357 c
+66.192 27.357 66.353 27.504 66.353 27.828 c
+66.353 28.821 l
+66.085 28.821 l
+cl 0 0 0 F
+n 67.116 28.847 m 67.006 28.847 66.896 28.838 66.804 28.821 c
+66.813 28.59 l
+66.905 28.619 67.024 28.639 67.137 28.639 c
+67.333 28.639 67.467 28.552 67.467 28.42 c
+67.467 28.099 66.78 28.296 66.78 27.79 c
+66.78 27.547 66.985 27.36 67.372 27.36 c
+67.461 27.36 67.565 27.371 67.655 27.388 c
+67.649 27.605 l
+67.557 27.576 67.449 27.559 67.351 27.559 c
+67.155 27.559 67.057 27.64 67.057 27.764 c
+67.057 28.079 67.747 27.908 67.747 28.391 c
+67.747 28.651 67.509 28.847 67.116 28.847 c
+cl 0 0 0 F
+n 52.454 27.149 m 52.552 27.149 52.632 27.071 52.632 26.978 c
+52.632 26.883 52.552 26.811 52.454 26.811 c
+52.355 26.811 52.275 26.886 52.275 26.978 c
+52.275 27.074 52.355 27.149 52.454 27.149 c
+cl 0 0 0 F
+n 52.103 27.382 m 52.103 27.585 l
+52.32 27.585 l
+52.32 28.821 l
+52.588 28.821 l
+52.588 27.386 l
+52.103 27.382 l
+cl 0 0 0 F
+userdict /#copies 1 put
+grestore
+
+%%Trailer
+%%DocumentNeededResources: font
+%%DocumentSuppliedResources: 
+end d_sv_obj restore
+
+
+%%EndDocument
+FMENDEPSF
+1 24 Q
+-0.17 (Ja) 207 676.2 S
+-0.17 (v) 226.18 676.2 S
+-0.17 (aBeans) 237.42 676.2 S
+1 14.4 Q
+(\252) 305.74 683.4 T
+1 24 Q
+-0.17 ( Acti) 319.85 676.2 S
+-0.17 (v) 365.75 676.2 S
+-0.17 (ation) 376.99 676.2 S
+207 820/G268103 FmPA
+-0.17 (Frame) 207 646.2 S
+-0.17 (w) 266.89 646.2 S
+-0.17 (ork) 283.82 646.2 S
+-0.17 (Specif) 321.07 646.2 S
+-0.17 (ication) 380.08 646.2 S
+207 598.2 558 608.2 C
+0 0 0 1 0 0 0 1 K
+207 599.2 459 599.2 2 L
+0.25 H
+0 Z
+0 X
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+2 24 Q
+0 X
+-0.17 (V) 207 616.2 S
+-0.17 (er) 218.84 616.2 S
+-0.17 (sion 1.0a) 238.26 616.2 S
+3 12 Q
+(Bart Calder) 207 574.2 T
+(, Bill Shannon) 267.55 574.2 T
+207 718/G267530 FmPA
+0 9 Q
+(This is  the Ja) 207 531.8 T
+(v) 266.39 531.8 T
+(aBeans) 271.21 531.8 T
+4 7.2 Q
+(\252) 303.23 535.4 T
+0 9 Q
+( Activ) 310.28 531.8 T
+(ation) 334.6 531.8 T
+207 676/G269523 FmPA
+(Frame) 207 519.8 T
+(w) 233.87 519.8 T
+(ork) 240.7 519.8 T
+(Speci\336cation,) 257.02 519.8 T
+(a) 317.87 519.8 T
+(data) 327.52 519.8 T
+(typing) 348.35 519.8 T
+(and) 377.67 519.8 T
+(registr) 207 507.8 T
+(y tec) 235.1 507.8 T
+(hnology that is a Standar) 255.52 507.8 T
+(d) 362.86 507.8 T
+(Extension to the Ja) 207 495.13 T
+(v) 289.39 495.13 T
+(a) 294.21 495.13 T
+1 10 Q
+(\252) 299.21 495.13 T
+0 9 Q
+( Platf) 309.01 495.13 T
+(orm.) 330.84 495.13 T
+72 417 558 420 C
+0 0 0 1 0 0 0 1 K
+207 419.15 558 419.15 2 L
+0.25 H
+2 Z
+0 X
+N
+72 419.15 198 419.15 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(1.0) 181.32 424 T
+(Over) 207 424 T
+(vie) 234.47 424 T
+(w) 250.97 424 T
+72 568/G269524 FmPA
+1 10 Q
+(Ja) 207 394.6 T
+(v) 215.13 394.6 T
+(aBeans) 219.88 394.6 T
+1 7.2 Q
+(\252) 248.76 398.2 T
+1 10 Q
+(is) 262.53 394.6 T
+(pro) 275.92 394.6 T
+(ving) 289.1 394.6 T
+(to) 313.59 394.6 T
+(be) 328.09 394.6 T
+(a) 344.24 394.6 T
+(popular) 355.39 394.6 T
+(technology) 392.66 394.6 T
+(.) 436.45 394.6 T
+(As) 445.67 394.6 T
+(more) 463.49 394.6 T
+(people) 490.76 394.6 T
+(embrace) 524.13 394.6 T
+72 539/G269500 FmPA
+(Ja) 207 382.6 T
+(v) 215.13 382.6 T
+(aBeans\252) 219.88 382.6 T
+(and) 262.97 382.6 T
+(the) 281.83 382.6 T
+(Ja) 298.46 382.6 T
+(v) 306.59 382.6 T
+(a\252) 311.34 382.6 T
+(platform,) 330 382.6 T
+(some) 371.35 382.6 T
+(of) 396.87 382.6 T
+(the) 409.62 382.6 T
+(en) 426.25 382.6 T
+(vironment\325) 435.29 382.6 T
+(s) 479.18 382.6 T
+(shortcomings) 487.49 382.6 T
+(are) 545.79 382.6 T
+(brought) 207 370.6 T
+(to) 241.57 370.6 T
+(light.) 252.82 370.6 T
+(Ja) 277.12 370.6 T
+(v) 285.25 370.6 T
+(aBeans\252) 290 370.6 T
+(w) 332.14 370.6 T
+(as) 339.26 370.6 T
+(meant) 351.05 370.6 T
+(to) 378.95 370.6 T
+(satisfy) 390.2 370.6 T
+(needs) 419.77 370.6 T
+(in) 446 370.6 T
+(b) 457.24 370.6 T
+(uilder) 462.05 370.6 T
+(and) 488.84 370.6 T
+(de) 506.74 370.6 T
+(v) 515.93 370.6 T
+(elopment) 520.78 370.6 T
+(en) 207 358.6 T
+(vironments) 216.04 358.6 T
+(b) 266.1 358.6 T
+(ut) 270.9 358.6 T
+(its) 283.74 358.6 T
+(capabilities) 298.25 358.6 T
+(f) 348.86 358.6 T
+(all) 352.09 358.6 T
+(short) 367.15 358.6 T
+(of) 392.21 358.6 T
+(those) 405.6 358.6 T
+(needed) 431.77 358.6 T
+(to) 465.15 358.6 T
+(deplo) 477.99 358.6 T
+(y) 500.11 358.6 T
+(stand) 510.17 358.6 T
+(alone) 536.34 358.6 T
+(components as content editing and creating entities.) 207 346.6 T
+(Neither) 207 322.6 T
+(Ja) 241.06 322.6 T
+(v) 249.19 322.6 T
+(aBeans\252) 253.94 322.6 T
+(nor) 296.68 322.6 T
+(the) 314.08 322.6 T
+(Ja) 330.36 322.6 T
+(v) 338.49 322.6 T
+(a\252) 343.24 322.6 T
+(platform) 361.55 322.6 T
+(de\336ne) 400.06 322.6 T
+(a) 428.56 322.6 T
+(consistent) 437.07 322.6 T
+(strate) 481.14 322.6 T
+(gy) 502.65 322.6 T
+(for) 516.71 322.6 T
+(typing) 532.44 322.6 T
+72 467/G264808 FmPA
+(data,) 207 310.6 T
+(a) 229.97 310.6 T
+(method) 238.21 310.6 T
+(for) 272.02 310.6 T
+(determining) 287.49 310.6 T
+(the) 339.63 310.6 T
+(supported) 355.66 310.6 T
+(data) 398.9 310.6 T
+(types) 419.37 310.6 T
+(of) 444.29 310.6 T
+(a) 456.43 310.6 T
+(softw) 464.67 310.6 T
+(are) 486.8 310.6 T
+(component,) 502.81 310.6 T
+(a) 553.56 310.6 T
+(method) 207 298.6 T
+(for) 240.21 298.6 T
+(binding) 255.09 298.6 T
+(typed) 288.86 298.6 T
+(data) 314.29 298.6 T
+(to) 334.16 298.6 T
+(a) 345.15 298.6 T
+(component,) 352.81 298.6 T
+(or) 402.96 298.6 T
+(an) 414.5 298.6 T
+(architecture) 427.15 298.6 T
+(and) 477.57 298.6 T
+(implementation) 495.22 298.6 T
+(that supports these features.) 207 286.6 T
+(Presumably) 207 262.6 T
+(with) 258.59 262.6 T
+(these) 280.73 262.6 T
+(pieces) 305.65 262.6 T
+(in) 335.01 262.6 T
+(place,) 347.16 262.6 T
+(a) 375.12 262.6 T
+(de) 383.93 262.6 T
+(v) 393.12 262.6 T
+(eloper) 397.97 262.6 T
+(can) 427.33 262.6 T
+(write) 445.58 262.6 T
+(a) 470.49 262.6 T
+(Ja) 479.3 262.6 T
+(v) 487.43 262.6 T
+(aBeans\252) 492.18 262.6 T
+(based) 535.23 262.6 T
+72 407/G264809 FmPA
+(component) 207 250.6 T
+(that) 254.62 250.6 T
+(pro) 272.8 250.6 T
+(vides) 285.98 250.6 T
+(helper) 310.28 250.6 T
+(application) 338.45 250.6 T
+(lik) 386.07 250.6 T
+(e) 396.53 250.6 T
+(functionality) 404.16 250.6 T
+(in) 458.45 250.6 T
+(a) 469.41 250.6 T
+(web) 477.04 250.6 T
+(bro) 496.88 250.6 T
+(wser) 509.96 250.6 T
+(,) 528.44 250.6 T
+(added) 534.12 250.6 T
+(functionality to an of) 207 238.6 T
+(\336ce suite, or a content vie) 290.91 238.6 T
+(wer in a Ja) 393.42 238.6 T
+(v) 436.26 238.6 T
+(a Station\252 en) 441.01 238.6 T
+(vironment.) 497.63 238.6 T
+72 195.27 558 198.27 C
+0 0 0 1 0 0 0 1 K
+207 197.42 558 197.42 2 L
+0.25 H
+2 Z
+0 X
+N
+72 197.42 198 197.42 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(2.0) 181.32 202.27 T
+(Goals) 207 202.27 T
+72 346/G264811 FmPA
+1 10 Q
+(This) 207 174.6 T
+(document) 230.17 174.6 T
+(describes) 274.99 174.6 T
+(the) 317.59 174.6 T
+(Ja) 335.19 174.6 T
+(v) 343.32 174.6 T
+(aBeans\252) 348.07 174.6 T
+(Acti) 392.14 174.6 T
+(v) 409.11 174.6 T
+(ation) 413.86 174.6 T
+(Frame) 439.24 174.6 T
+(w) 464.54 174.6 T
+(ork) 471.66 174.6 T
+(\050J) 490.38 174.6 T
+(AF\051.) 497 174.6 T
+(The) 520.99 174.6 T
+(J) 541.93 174.6 T
+(AF) 545.22 174.6 T
+72 319/G265024 FmPA
+(implements the follo) 207 162.6 T
+(wing services:) 289.53 162.6 T
+5 11 Q
+(\245) 207 143.93 T
+1 10 Q
+(It determines the type of arbitrary data.) 220.74 143.93 T
+72 288/G269277 FmPA
+5 11 Q
+(\245) 207 127.93 T
+1 10 Q
+(It encapsulates access to data.) 220.74 127.93 T
+72 272/G269278 FmPA
+5 11 Q
+(\245) 207 111.93 T
+1 10 Q
+(It disco) 220.74 111.93 T
+(v) 250.32 111.93 T
+(ers the operations a) 255.16 111.93 T
+(v) 332.44 111.93 T
+(ailable on a particular type of data.) 337.19 111.93 T
+72 256/G269279 FmPA
+[/Creator(FrameMaker xm5.5.3L15a)/DOCINFO FmPD2
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.1/DEST FmPD2
+[/Dest/F/DEST FmPD2
+[/Title(A)/Rect[198 459 567 702]/ARTICLE FmPD2
+[/Title(A)/Rect[63 79 567 441]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "1" 1
+%%Page: "2" 2
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Ar) 189 739.85 T
+(c) 198.82 739.85 T
+(hitectural Over) 203.73 739.85 T
+(vie) 267.35 739.85 T
+(w) 279.72 739.85 T
+54 884/G30230 FmPA
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(2) 54 60.29 T
+0 9 Q
+( of) 59.56 60.29 T
+0 10 Q
+( 36) 70.56 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+54 204/G30232 FmPA
+5 11 Q
+(\245) 189 679.99 T
+1 10 Q
+(It) 202.74 679.99 T
+(instantiates) 211.22 679.99 T
+(the) 258.58 679.99 T
+(softw) 273.17 679.99 T
+(are) 295.29 679.99 T
+(component) 309.86 679.99 T
+(that) 356.67 679.99 T
+(corresponds) 374.04 679.99 T
+(to) 424.72 679.99 T
+(the) 434.86 679.99 T
+(desired) 449.45 679.99 T
+(operation) 480.7 679.99 T
+(on) 520.83 679.99 T
+(a) 533.2 679.99 T
+54 824/G265761 FmPA
+(particular piece of data.) 202.74 667.66 T
+(The J) 189 643.66 T
+(AF is packaged as a Standard Extension to the Ja) 210.34 643.66 T
+(v) 406.5 643.66 T
+(a\252 platform.) 411.25 643.66 T
+54 788/G269283 FmPA
+54 600.33 540 603.33 C
+0 0 0 1 0 0 0 1 K
+189 602.48 540 602.48 2 L
+0.25 H
+2 Z
+0 X
+N
+54 602.48 180 602.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(3.0) 163.32 607.33 T
+(Ar) 189 607.33 T
+(c) 202.09 607.33 T
+(hitectural Over) 208.64 607.33 T
+(vie) 293.46 607.33 T
+(w) 309.96 607.33 T
+54 751/G264813 FmPA
+1 10 Q
+(JDK\252) 189 579.66 T
+(1.1) 222.59 579.66 T
+(\050including) 240.54 579.66 T
+(Ja) 287.11 579.66 T
+(v) 295.23 579.66 T
+(aBeans\252\051) 299.98 579.66 T
+(already) 347.45 579.66 T
+(pro) 382.33 579.66 T
+(vides) 395.52 579.66 T
+(some) 422.08 579.66 T
+(support) 448.64 579.66 T
+(for) 484.1 579.66 T
+(a) 501.21 579.66 T
+(modest) 511.11 579.66 T
+54 724/G265027 FmPA
+(acti) 189 567.66 T
+(v) 203.19 567.66 T
+(ation) 207.94 567.66 T
+(frame) 233.29 567.66 T
+(w) 256.36 567.66 T
+(ork.) 263.48 567.66 T
+(The) 284.67 567.66 T
+(J) 305.57 567.66 T
+(AF) 308.86 567.66 T
+(le) 326.99 567.66 T
+(v) 333.96 567.66 T
+(erages) 338.81 567.66 T
+(as) 369.71 567.66 T
+(much) 383.39 567.66 T
+(of) 410.96 567.66 T
+(that) 424.65 567.66 T
+(e) 445 567.66 T
+(xisting) 449.29 567.66 T
+(technology) 481.88 567.66 T
+(as) 531.67 567.66 T
+(possible. The J) 189 555.66 T
+(AF inte) 248.12 555.66 T
+(grates these mechanisms.) 278.25 555.66 T
+54 676/G268523 FmPA
+(This) 189 363.14 T
+(diagram) 209.69 363.14 T
+(sho) 245.38 363.14 T
+(ws) 259.02 363.14 T
+(the) 273.04 363.14 T
+(major) 288.17 363.14 T
+(elements) 314.41 363.14 T
+(comprising) 352.88 363.14 T
+(the) 400.79 363.14 T
+(J) 415.92 363.14 T
+(AF) 419.21 363.14 T
+(architecture.) 434.9 363.14 T
+(Note) 487.52 363.14 T
+(that) 509.87 363.14 T
+(the) 527.78 363.14 T
+54 507/G268156 FmPA
+(frame) 189 351.14 T
+(w) 212.07 351.14 T
+(ork sho) 219.19 351.14 T
+(wn here is not bound to a particular application.) 248.66 351.14 T
+0 F
+(3.1) 166.1 321.14 T
+(The DataHandler Class) 189 321.14 T
+54 465/G264816 FmPA
+1 F
+(The) 189 297.14 T
+(DataHandler) 208.41 297.14 T
+(class) 263.36 297.14 T
+(\050sho) 286.65 297.14 T
+(wn) 303.62 297.14 T
+(in) 319.7 297.14 T
+(the) 331.34 297.14 T
+(diagram) 347.42 297.14 T
+(abo) 384.05 297.14 T
+(v) 398.34 297.14 T
+(e\051) 403.19 297.14 T
+(pro) 414.82 297.14 T
+(vides) 427.99 297.14 T
+(a) 452.96 297.14 T
+(consistent) 461.26 297.14 T
+(interf) 505.12 297.14 T
+(ace) 526.68 297.14 T
+54 441/G269287 FmPA
+(between J) 189 285.14 T
+(AF-a) 228.11 285.14 T
+(w) 248.51 285.14 T
+(are clients and other subsystems.) 255.63 285.14 T
+0 F
+(3.2) 166.1 255.14 T
+(The DataSour) 189 255.14 T
+(ce Interface) 253.81 255.14 T
+54 399/G265036 FmPA
+1 F
+(DataSource) 189 231.14 T
+(interf) 238.37 231.14 T
+(ace) 259.92 231.14 T
+(encapsulates) 275.96 231.14 T
+(an) 329.21 231.14 T
+(object) 341.37 231.14 T
+(that) 368.52 231.14 T
+(contains) 386.24 231.14 T
+(data,) 422.29 231.14 T
+(and) 444.16 231.14 T
+(that) 461.32 231.14 T
+(can) 479.03 231.14 T
+(return) 495.62 231.14 T
+(both) 522.22 231.14 T
+54 375/G269292 FmPA
+(a) 189 219.14 T
+(stream) 195.75 219.14 T
+(pro) 224.72 219.14 T
+(viding) 237.9 219.14 T
+(data) 265.77 219.14 T
+(access,) 284.73 219.14 T
+(and) 315.08 219.14 T
+(a) 331.83 219.14 T
+(string) 338.58 219.14 T
+(de\336ning) 363.67 219.14 T
+(the) 398.76 219.14 T
+(MIME) 413.29 219.14 T
+(type) 442.81 219.14 T
+(describing) 462.34 219.14 T
+(the) 506.31 219.14 T
+(data.) 520.84 219.14 T
+(Classes) 189 195.14 T
+(can) 223.09 195.14 T
+(be) 241.06 195.14 T
+(implemented) 254.6 195.14 T
+(for) 310.91 195.14 T
+(common) 326.66 195.14 T
+(data) 365.75 195.14 T
+(sources) 386.5 195.14 T
+(\050web,) 420.58 195.14 T
+(\336le) 447.17 195.14 T
+(system,) 464.04 195.14 T
+(IMAP) 498.41 195.14 T
+(,) 522.3 195.14 T
+(ftp) 528.89 195.14 T
+54 339/G269293 FmPA
+(etc.\051.) 189 183.14 T
+(The) 213.35 183.14 T
+(DataSource) 233.25 183.14 T
+(interf) 284.25 183.14 T
+(ace) 305.81 183.14 T
+(can) 323.49 183.14 T
+(also) 341.72 183.14 T
+(be) 362.19 183.14 T
+(e) 375.98 183.14 T
+(xtended) 380.27 183.14 T
+(to) 416.29 183.14 T
+(allo) 428.42 183.14 T
+(w) 443.17 183.14 T
+(per) 454.75 183.14 T
+(data) 471.87 183.14 T
+(source) 492.89 183.14 T
+(user) 523.34 183.14 T
+(customizations.) 189 171.14 T
+(Once) 253.94 171.14 T
+(the) 277.48 171.14 T
+(DataSource) 292.13 171.14 T
+(is) 341.22 171.14 T
+(set) 350.33 171.14 T
+(in) 363.88 171.14 T
+(the) 374.09 171.14 T
+(DataHandler) 388.75 171.14 T
+(,) 439.44 171.14 T
+(the) 444.38 171.14 T
+(client) 459.04 171.14 T
+(can) 483.69 171.14 T
+(determine) 500.01 171.14 T
+(the operations a) 189 159.14 T
+(v) 252.12 159.14 T
+(ailable on that data.) 256.87 159.14 T
+(The J) 189 135.14 T
+(AF includes tw) 210.34 135.14 T
+(o DataSource class implementations for con) 271.35 135.14 T
+(v) 447.31 135.14 T
+(enience:) 452.16 135.14 T
+54 279/G268181 FmPA
+5 11 Q
+(\245) 189 116.47 T
+1 10 Q
+(FileDataSource accesses data held in a \336le.) 202.74 116.47 T
+54 260/G268182 FmPA
+5 11 Q
+(\245) 189 100.47 T
+1 10 Q
+(URLDataSource accesses data held at a URL.) 202.74 100.47 T
+54 244/G268187 FmPA
+54 89.3 540 687.33 C
+89.32 383.8 504.68 528.33 C
+0 0 0 1 0 0 0 1 K
+89.32 383.8 504.68 528.33 R
+7 X
+V
+253.99 412.44 345.11 463.07 R
+V
+0.5 H
+2 Z
+0 X
+N
+6 12 Q
+(DataHandler) 269.52 435.95 T
+257.08 495.03 317.83 519.74 R
+N
+279.58 478.99 283.05 476.98 279.58 464.88 276.11 476.98 4 Y
+1 H
+0 Z
+N
+279.58 478.99 283.05 476.98 279.58 464.88 276.11 476.98 4 Y
+V
+279.58 494.52 279.58 477.48 2 L
+2 Z
+N
+90 450 1.5 1.5 233.52 439.16 G
+234.02 439.16 234.02 444.28 251.89 439.16 234.02 434.04 4 Y
+0 Z
+N
+234.02 439.16 234.02 444.28 251.89 439.16 234.02 434.04 4 Y
+V
+90 450 1.5 1.5 180 224.11 439.16 GG
+223.61 439.16 223.61 434.04 205.74 439.16 223.61 444.28 4 Y
+N
+223.61 439.16 223.61 434.04 205.74 439.16 223.61 444.28 4 Y
+V
+233.52 439.16 224.11 439.16 2 L
+3 H
+N
+356.8 438.6 356.8 435.77 346.92 438.6 356.8 441.43 4 Y
+1 H
+N
+356.8 438.6 356.8 435.77 346.92 438.6 356.8 441.43 4 Y
+V
+362.67 438.6 362.67 441.43 372.55 438.6 362.67 435.77 4 Y
+N
+362.67 438.6 362.67 441.43 372.55 438.6 362.67 435.77 4 Y
+V
+357.3 438.6 362.17 438.6 2 L
+N
+374.32 415.25 417.95 459.13 R
+0.5 H
+2 Z
+N
+6 9 Q
+(Command) 375.3 438.32 T
+(Map) 386.58 430.55 T
+424.53 438.32 426.54 441.79 438.64 438.32 426.54 434.85 4 Y
+1 H
+0 Z
+N
+424.53 438.32 426.54 441.79 438.64 438.32 426.54 434.85 4 Y
+V
+418.23 438.32 426.04 438.32 2 L
+2 Z
+N
+440.73 424.54 485.73 450.97 13.22 RR
+0.5 H
+N
+(Command) 441.71 437.76 T
+(Object) 450.17 429.99 T
+6 10 Q
+(DataSource) 261.12 504.61 T
+J
+348.44 471.92 350.33 470.07 341.98 465.35 346.56 473.78 4 Y
+1 H
+0 Z
+N
+348.44 471.92 350.33 470.07 341.98 465.35 346.56 473.78 4 Y
+V
+J
+360.62 484.31 358.74 486.17 367.09 490.89 362.51 482.46 4 Y
+N
+360.62 484.31 358.74 486.17 367.09 490.89 362.51 482.46 4 Y
+V
+J
+348.79 472.28 351.42 474.95 2 L
+0.5 H
+2 Z
+N
+[10.24 8.874] 10.24 I
+351.42 474.95 357.64 481.28 2 L
+N
+J
+357.64 481.28 360.27 483.96 2 L
+N
+J
+347.74 491.71 434.19 519.83 R
+0 Z
+N
+6 9 Q
+(DataContentHandler) 351.33 504.19 T
+J
+249.07 501.67 247.3 503.63 255.92 507.84 250.84 499.7 4 Y
+1 H
+N
+249.07 501.67 247.3 503.63 255.92 507.84 250.84 499.7 4 Y
+V
+J
+212.96 469.1 214.73 467.14 206.11 462.93 211.19 471.07 4 Y
+N
+212.96 469.1 214.73 467.14 206.11 462.93 211.19 471.07 4 Y
+V
+J
+248.7 501.33 247.4 500.16 2 L
+0.5 H
+2 Z
+N
+[3.47 4.462] 3.47 I
+247.4 500.16 214.63 470.61 2 L
+N
+J
+214.63 470.61 213.33 469.44 2 L
+N
+J
+204.77 498.74 204.77 392.73 2 L
+1 H
+N
+6 12 Q
+(F) 143.84 446.21 T
+(r) 150.63 446.21 T
+(ame) 154.51 446.21 T
+(w) 177.61 446.21 T
+(or) 186.15 446.21 T
+(k) 197 446.21 T
+(Client) 158.08 438.03 T
+54 89.3 540 687.33 C
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.2/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "2" 2
+%%Page: "3" 3
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Using The Frame) 207 739.85 T
+(w) 279.88 739.85 T
+(ork) 286.7 739.85 T
+72 884/G30234 FmPA
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(3) 527.82 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+72 204/G30235 FmPA
+(3.3) 184.1 680.66 T
+(The CommandMap Interface) 207 680.66 T
+72 825/G264820 FmPA
+1 F
+(The) 207 656.66 T
+(CommandMap) 228.04 656.66 T
+(pro) 293.54 656.66 T
+(vides) 306.72 656.66 T
+(a) 333.32 656.66 T
+(service) 343.26 656.66 T
+(that) 377.07 656.66 T
+(allo) 397.57 656.66 T
+(ws) 412.32 656.66 T
+(consumers) 428.92 656.66 T
+(of) 477.19 656.66 T
+(its) 491.01 656.66 T
+(interf) 505.95 656.66 T
+(aces) 527.52 656.66 T
+(to) 550.22 656.66 T
+72 801/G264821 FmPA
+(determine) 207 644.66 T
+(the) 249.7 644.66 T
+(\324commands\325) 264.63 644.66 T
+(a) 317.33 644.66 T
+(v) 321.57 644.66 T
+(ailable) 326.32 644.66 T
+(on) 355.69 644.66 T
+(a) 368.4 644.66 T
+(particular) 375.55 644.66 T
+(MIME) 416.57 644.66 T
+(T) 446.5 644.66 T
+(ype) 451.81 644.66 T
+(as) 468.96 644.66 T
+(well) 480 644.66 T
+(as) 499.93 644.66 T
+(an) 510.97 644.66 T
+(interf) 523.12 644.66 T
+(ace) 544.68 644.66 T
+(to) 207 632.66 T
+(retrie) 220.42 632.66 T
+(v) 241.27 632.66 T
+(e) 246.12 632.66 T
+(an) 256.2 632.66 T
+(object) 271.28 632.66 T
+(that) 301.36 632.66 T
+(can) 322 632.66 T
+(operate) 341.52 632.66 T
+(on) 376.58 632.66 T
+(an) 392.22 632.66 T
+(object) 407.3 632.66 T
+(of) 437.38 632.66 T
+(a) 451.35 632.66 T
+(particular) 461.43 632.66 T
+(MIME) 505.39 632.66 T
+(T) 538.25 632.66 T
+(ype) 543.56 632.66 T
+(\050ef) 207 620.66 T
+(fecti) 217.85 620.66 T
+(v) 235.37 620.66 T
+(ely) 240.22 620.66 T
+(a) 255.03 620.66 T
+(component) 262.05 620.66 T
+(re) 309.08 620.66 T
+(gistry\051.) 316.7 620.66 T
+(The) 347.9 620.66 T
+(Command) 366.03 620.66 T
+(Map) 410.29 620.66 T
+(can) 431.21 620.66 T
+(generate) 447.67 620.66 T
+(and) 484.13 620.66 T
+(maintain) 501.16 620.66 T
+(a) 538.74 620.66 T
+(list) 545.77 620.66 T
+(of) 207 608.66 T
+(a) 220.19 608.66 T
+(v) 224.43 608.66 T
+(ailable) 229.18 608.66 T
+(capabilities) 260.7 608.66 T
+(on) 311.11 608.66 T
+(a) 325.97 608.66 T
+(particular) 335.27 608.66 T
+(data) 378.45 608.66 T
+(type) 399.97 608.66 T
+(by) 422.05 608.66 T
+(a) 436.91 608.66 T
+(mechanism) 446.21 608.66 T
+(de\336ned) 496.62 608.66 T
+(by) 530.92 608.66 T
+(the) 545.78 608.66 T
+(implementation of the particular instance of the CommandMap.) 207 596.66 T
+(The) 207 572.66 T
+(Ja) 229.99 572.66 T
+(v) 238.12 572.66 T
+(aBeans\252) 242.87 572.66 T
+(package) 288.99 572.66 T
+(pro) 329.19 572.66 T
+(vides) 342.37 572.66 T
+(the) 370.92 572.66 T
+(programming) 390.58 572.66 T
+(model) 452.47 572.66 T
+(for) 484.91 572.66 T
+(the) 504.01 572.66 T
+(softw) 523.67 572.66 T
+(are) 545.79 572.66 T
+72 717/G269297 FmPA
+(components) 207 560.66 T
+(that) 259.13 560.66 T
+(implemented) 277.93 560.66 T
+(the) 333.95 560.66 T
+(commands.) 349.97 560.66 T
+(Each) 399.6 560.66 T
+(Ja) 423.39 560.66 T
+(v) 431.52 560.66 T
+(aBeans\252) 436.27 560.66 T
+(component) 478.75 560.66 T
+(can) 526.99 560.66 T
+(use) 544.67 560.66 T
+(e) 207 548.66 T
+(xternalization,) 211.29 548.66 T
+(or) 271.37 548.66 T
+(can) 282.29 548.66 T
+(implement) 298.77 548.66 T
+(the) 344.14 548.66 T
+2 F
+(CommandObject) 358.95 548.66 T
+1 F
+(interf) 429.31 548.66 T
+(ace) 450.87 548.66 T
+(to) 466.78 548.66 T
+(allo) 477.15 548.66 T
+(w) 491.9 548.66 T
+(the) 501.72 548.66 T
+(typed) 516.53 548.66 T
+(data) 541.34 548.66 T
+(to be passed to it.) 207 536.66 T
+(The) 207 512.66 T
+(J) 225.6 512.66 T
+(AF) 228.89 512.66 T
+(de\336nes) 244.73 512.66 T
+(the) 276.11 512.66 T
+(CommandMap) 291.39 512.66 T
+(interf) 354.44 512.66 T
+(ace,) 376 512.66 T
+(which) 394.87 512.66 T
+(pro) 422.36 512.66 T
+(vides) 435.55 512.66 T
+(a) 459.71 512.66 T
+(\337e) 467.2 512.66 T
+(xible) 477.05 512.66 T
+(and) 500.11 512.66 T
+(e) 517.6 512.66 T
+(xtensible) 521.89 512.66 T
+72 657/G264822 FmPA
+(frame) 207 500.66 T
+(w) 230.07 500.66 T
+(ork) 237.19 500.66 T
+(for) 254.31 500.66 T
+(the) 269.76 500.66 T
+(CommandMap.) 285.77 500.66 T
+(The) 352.06 500.66 T
+(CommandMap) 371.4 500.66 T
+(interf) 435.19 500.66 T
+(ace) 456.75 500.66 T
+(allo) 473.86 500.66 T
+(ws) 488.61 500.66 T
+(de) 503.51 500.66 T
+(v) 512.7 500.66 T
+(elopers) 517.55 500.66 T
+(to) 550.22 500.66 T
+(de) 207 488.66 T
+(v) 216.19 488.66 T
+(elop) 221.04 488.66 T
+(their) 243.03 488.66 T
+(o) 266.13 488.66 T
+(wn) 270.88 488.66 T
+(solutions) 287.86 488.66 T
+(for) 328.75 488.66 T
+(disco) 345.18 488.66 T
+(v) 366.14 488.66 T
+(ering) 370.99 488.66 T
+(which) 396.31 488.66 T
+(commands) 425.52 488.66 T
+(are) 473.61 488.66 T
+(a) 490.59 488.66 T
+(v) 494.83 488.66 T
+(ailable) 499.58 488.66 T
+(on) 531.01 488.66 T
+(the) 545.78 488.66 T
+(system.) 207 476.66 T
+(A) 239.57 476.66 T
+(possible) 249.09 476.66 T
+(implementation) 284.16 476.66 T
+(can) 349.23 476.66 T
+(access) 365.4 476.66 T
+(the) 393.24 476.66 T
+(\324types) 407.75 476.66 T
+(re) 434.48 476.66 T
+(gistry\325) 442.1 476.66 T
+(on) 470.51 476.66 T
+(the) 482.8 476.66 T
+(platform) 497.31 476.66 T
+(or) 534.05 476.66 T
+(use) 544.67 476.66 T
+(a) 207 464.66 T
+(serv) 213.98 464.66 T
+(er) 230.49 464.66 T
+(-based) 238.06 464.66 T
+(solution.) 266.71 464.66 T
+(The) 303.98 464.66 T
+(J) 322.07 464.66 T
+(AF) 325.36 464.66 T
+(pro) 340.68 464.66 T
+(vides) 353.86 464.66 T
+(a) 377.52 464.66 T
+(simple) 384.5 464.66 T
+(def) 413.71 464.66 T
+(ault) 426.38 464.66 T
+(solution) 443.93 464.66 T
+(based) 478.7 464.66 T
+(on) 504.01 464.66 T
+(RFC) 516.56 464.66 T
+(1524) 538 464.66 T
+(\050.mailcap\051 lik) 207 452.66 T
+(e functionality) 260.78 452.66 T
+(. See \322Deli) 318.18 452.66 T
+(v) 361.53 452.66 T
+(erables\323 belo) 366.38 452.66 T
+(w) 418.61 452.66 T
+(.) 425.18 452.66 T
+0 F
+(3.4) 184.1 422.66 T
+(The Command Object Interface) 207 422.66 T
+72 567/G264823 FmPA
+1 F
+(Beans) 207 398.66 T
+(e) 233.94 398.66 T
+(xtend) 238.23 398.66 T
+(the) 262.95 398.66 T
+(CommandObject) 277.67 398.66 T
+(interf) 348.5 398.66 T
+(ace) 370.06 398.66 T
+(in) 385.88 398.66 T
+(order) 396.17 398.66 T
+(to) 419.77 398.66 T
+(interact) 430.05 398.66 T
+(with) 462.54 398.66 T
+(J) 482.82 398.66 T
+(AF) 486.11 398.66 T
+(services.) 501.39 398.66 T
+(J) 538.6 398.66 T
+(AF-) 541.89 398.66 T
+72 543/G264824 FmPA
+(a) 207 386.66 T
+(w) 211.29 386.66 T
+(are) 218.41 386.66 T
+(Ja) 233.62 386.66 T
+(v) 241.75 386.66 T
+(aBeans\252) 246.5 386.66 T
+(components) 288.18 386.66 T
+(can) 339.51 386.66 T
+(directly) 356.39 386.66 T
+(access) 389.95 386.66 T
+(their) 418.49 386.66 T
+(DataSource) 439.82 386.66 T
+(and) 489.47 386.66 T
+(DataHandler) 506.91 386.66 T
+(objects in order to retrie) 207 374.66 T
+(v) 302.84 374.66 T
+(e the data type and to act on the data.) 307.69 374.66 T
+72 331.33 558 334.33 C
+0 0 0 1 0 0 0 1 K
+207 333.48 558 333.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 333.48 198 333.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(4.0) 181.32 338.33 T
+(Using The Frame) 207 338.33 T
+(w) 304.18 338.33 T
+(ork) 313.27 338.33 T
+72 482/G264825 FmPA
+1 10 Q
+(W) 207 310.66 T
+(e) 215.64 310.66 T
+(intend) 223.17 310.66 T
+(to) 251.26 310.66 T
+(mak) 262.14 310.66 T
+(e) 279.26 310.66 T
+(this) 286.79 310.66 T
+(infrastructure) 304.33 310.66 T
+(widely) 361.29 310.66 T
+(a) 391.6 310.66 T
+(v) 395.84 310.66 T
+(ailable) 400.59 310.66 T
+(for) 430.34 310.66 T
+(an) 445.1 310.66 T
+(y) 454.39 310.66 T
+(Ja) 462.48 310.66 T
+(v) 470.61 310.66 T
+(a\252) 475.36 310.66 T
+(Application) 492.69 310.66 T
+(that) 543 310.66 T
+72 455/G269303 FmPA
+(needs) 207 298.66 T
+(this) 235.34 298.66 T
+(functionality) 255.36 298.66 T
+(.) 305.82 298.66 T
+(The) 313.88 298.66 T
+(\324canonical\325) 335 298.66 T
+(consumer) 385.55 298.66 T
+(of) 430 298.66 T
+(this) 443.9 298.66 T
+(frame) 463.91 298.66 T
+(w) 486.98 298.66 T
+(ork) 494.1 298.66 T
+(accesses) 513 298.66 T
+(it) 552.44 298.66 T
+(through) 207 286.66 T
+(the) 241.39 286.66 T
+(DataHandler) 256.89 286.66 T
+(\050although) 311.25 286.66 T
+(the) 352.86 286.66 T
+(major) 368.36 286.66 T
+(subsystems) 394.97 286.66 T
+(are) 443.81 286.66 T
+(designed) 459.3 286.66 T
+(to) 498.12 286.66 T
+(also) 509.18 286.66 T
+(operate) 528.57 286.66 T
+(independently\051.) 207 274.66 T
+(An) 273.16 274.66 T
+(underlying) 289.05 274.66 T
+(DataSource) 336.04 274.66 T
+(object) 386.36 274.66 T
+(is) 414.47 274.66 T
+(associated) 424.81 274.66 T
+(with) 469.57 274.66 T
+(the) 491.02 274.66 T
+(DataHandler) 506.91 274.66 T
+(when the DataHandler class is constructed.) 207 262.66 T
+5 11 Q
+(\245) 207 243.99 T
+1 10 Q
+(The DataHandler retrie) 220.74 243.99 T
+(v) 313.23 243.99 T
+(es the data typing information from the DataSource or gets) 318.08 243.99 T
+72 388/G269304 FmPA
+(the data type directly from the constructor) 220.74 231.66 T
+(.) 388.49 231.66 T
+5 11 Q
+(\245) 207 215.99 T
+1 10 Q
+(Once this initialization step is complete, request a list of commands that can be) 220.74 215.99 T
+72 360/G269305 FmPA
+(performed on the data item can be accessed from the DataHandler) 220.74 203.66 T
+(.) 484.55 203.66 T
+(When) 207 179.66 T
+(an) 233.63 179.66 T
+(application) 245.83 179.66 T
+(issues) 293.02 179.66 T
+(a) 319.67 179.66 T
+(request) 326.86 179.66 T
+(for) 358.5 179.66 T
+(this) 372.91 179.66 T
+(list,) 390.11 179.66 T
+(the) 407.6 179.66 T
+(DataHandler) 422.57 179.66 T
+(uses) 476.42 179.66 T
+(the) 496.39 179.66 T
+(MIME) 511.36 179.66 T
+(data) 541.34 179.66 T
+72 324/G269309 FmPA
+(type) 207 167.66 T
+(speci\336er) 229.06 167.66 T
+(returned,) 267.78 167.66 T
+(in) 308.43 167.66 T
+(order) 321.05 167.66 T
+(to) 346.99 167.66 T
+(request) 359.61 167.66 T
+(a) 393.33 167.66 T
+(list) 402.61 167.66 T
+(of) 419.68 167.66 T
+(a) 432.85 167.66 T
+(v) 437.08 167.66 T
+(ailable) 441.83 167.66 T
+(commands) 473.33 167.66 T
+(from) 521.5 167.66 T
+(the) 545.78 167.66 T
+(CommandMap) 207 155.66 T
+(object.) 272.53 155.66 T
+(The) 305 155.66 T
+(CommandMap) 326.08 155.66 T
+(has) 391.61 155.66 T
+(kno) 410.47 155.66 T
+(wledge) 425.22 155.66 T
+(of) 459.63 155.66 T
+(a) 473.49 155.66 T
+(v) 477.73 155.66 T
+(ailable) 482.48 155.66 T
+(commands) 514.67 155.66 T
+(\050implemented) 207 143.66 T
+(as) 266.11 143.66 T
+(Beans\051) 277.99 143.66 T
+(and) 309.32 143.66 T
+(their) 327.31 143.66 T
+(supported) 349.2 143.66 T
+(data) 392.19 143.66 T
+(types.) 412.41 143.66 T
+(The) 439.57 143.66 T
+(CommandMap) 458.68 143.66 T
+(returns) 522.23 143.66 T
+(a) 553.56 143.66 T
+(subset) 207 131.66 T
+(of) 236.22 131.66 T
+(the) 248.76 131.66 T
+(full) 265.2 131.66 T
+(list) 283.31 131.66 T
+(of) 299.76 131.66 T
+(all) 312.3 131.66 T
+(commands) 326.52 131.66 T
+(based) 374.07 131.66 T
+(on) 401.06 131.66 T
+(the) 415.27 131.66 T
+(requested) 431.71 131.66 T
+(MIME) 474.25 131.66 T
+(type) 505.68 131.66 T
+(and) 527.12 131.66 T
+(the) 545.78 131.66 T
+(semantics of the CommandMap implementation, to the DataHandler) 207 119.66 T
+(.) 480.31 119.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.3/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "3" 3
+%%Page: "4" 4
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Usa) 189 739.85 T
+(g) 205.42 739.85 T
+(e Scenarios) 211.01 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(4) 54 60.29 T
+0 9 Q
+( of) 59.56 60.29 T
+0 10 Q
+( 36) 70.56 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+1 10 Q
+(Ultimately) 189 680.66 T
+(when) 237.05 680.66 T
+(the) 263.98 680.66 T
+(application) 281.47 680.66 T
+(wishes) 331.18 680.66 T
+(to) 363.67 680.66 T
+(apply) 376.72 680.66 T
+(a) 404.21 680.66 T
+(command) 413.93 680.66 T
+(to) 458.64 680.66 T
+(some) 471.69 680.66 T
+(data,) 498.07 680.66 T
+(it) 522.5 680.66 T
+(is) 533.33 680.66 T
+54 825/G269310 FmPA
+(accomplished) 189 668.66 T
+(through) 252.4 668.66 T
+(the) 291.92 668.66 T
+(appropriate) 312.55 668.66 T
+(DataHandler) 366.51 668.66 T
+(interf) 426.01 668.66 T
+(ace) 447.57 668.66 T
+(which) 469.3 668.66 T
+(uses) 502.15 668.66 T
+(the) 527.78 668.66 T
+(CommandMap) 189 656.66 T
+(to) 252.6 656.66 T
+(retrie) 263.97 656.66 T
+(v) 284.82 656.66 T
+(e) 289.67 656.66 T
+(the) 297.71 656.66 T
+(appropriate) 313.52 656.66 T
+(Bean) 362.66 656.66 T
+(which) 386.8 656.66 T
+(is) 414.84 656.66 T
+(used) 425.1 656.66 T
+(to) 447.03 656.66 T
+(operate) 458.4 656.66 T
+(on) 491.43 656.66 T
+(the) 505.02 656.66 T
+(data.) 520.84 656.66 T
+(The) 189 644.66 T
+(container) 207.62 644.66 T
+(\050user) 247.9 644.66 T
+(of) 270.95 644.66 T
+(the) 282.35 644.66 T
+(frame) 297.64 644.66 T
+(w) 320.71 644.66 T
+(ork\051) 327.83 644.66 T
+(mak) 347.56 644.66 T
+(es) 364.68 644.66 T
+(the) 376.07 644.66 T
+(association) 391.36 644.66 T
+(between) 438.87 644.66 T
+(the) 475.26 644.66 T
+(data) 490.54 644.66 T
+(and) 510.27 644.66 T
+(the) 527.78 644.66 T
+(Bean.) 189 632.66 T
+54 589.33 540 592.33 C
+0 0 0 1 0 0 0 1 K
+189 591.48 540 591.48 2 L
+0.25 H
+2 Z
+0 X
+N
+54 591.48 180 591.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(5.0) 163.32 596.33 T
+(Usa) 189 596.33 T
+(g) 210.89 596.33 T
+(e Scenarios) 218.34 596.33 T
+54 740/G265043 FmPA
+1 10 Q
+(This) 189 568.66 T
+(scenario) 210.91 568.66 T
+(uses) 248.37 568.66 T
+(the) 269.72 568.66 T
+(e) 286.07 568.66 T
+(xample) 290.36 568.66 T
+(of) 323.93 568.66 T
+(a) 336.4 568.66 T
+(h) 344.97 568.66 T
+(ypothetical) 349.92 568.66 T
+(\336le) 398.49 568.66 T
+(vie) 415.41 568.66 T
+(wer) 427.38 568.66 T
+(application) 446.5 568.66 T
+(in) 495.07 568.66 T
+(order) 506.99 568.66 T
+(to) 532.22 568.66 T
+54 713/G269314 FmPA
+(illustrate) 189 556.66 T
+(the) 226.53 556.66 T
+(normal) 241.27 556.66 T
+(\337o) 272.13 556.66 T
+(w) 282.44 556.66 T
+(of) 292.18 556.66 T
+(tasks) 303.04 556.66 T
+(in) 325.57 556.66 T
+(v) 332.95 556.66 T
+(olv) 337.75 556.66 T
+(ed) 350.38 556.66 T
+(when) 362.34 556.66 T
+(implementing) 386.53 556.66 T
+(the) 444.61 556.66 T
+(J) 459.36 556.66 T
+(AF) 462.65 556.66 T
+(.) 474.63 556.66 T
+(The) 479.66 556.66 T
+(\336le) 497.73 556.66 T
+(vie) 513.04 556.66 T
+(wer) 525.01 556.66 T
+(is) 189 544.66 T
+(similar) 199.12 544.66 T
+(to) 230.35 544.66 T
+(CDE\325) 241.58 544.66 T
+(s) 264.36 544.66 T
+(\324dt\336le,) 271.7 544.66 T
+(\325) 297.39 544.66 T
+(or) 304.17 544.66 T
+(to) 315.95 544.66 T
+(the) 327.17 544.66 T
+(W) 342.84 544.66 T
+(indo) 351.88 544.66 T
+(ws) 369.41 544.66 T
+(95) 383.97 544.66 T
+(Explorer) 397.42 544.66 T
+(utility) 435.86 544.66 T
+(.) 459.11 544.66 T
+(When) 465.06 544.66 T
+(launched,) 492.39 544.66 T
+(it) 534.44 544.66 T
+(presents) 189 532.66 T
+(the) 224.15 532.66 T
+(user) 238.76 532.66 T
+(with) 257.8 532.66 T
+(a) 277.96 532.66 T
+(display) 284.79 532.66 T
+(of) 316.06 532.66 T
+(a) 326.77 532.66 T
+(v) 331.01 532.66 T
+(ailable) 335.76 532.66 T
+(\336les.) 364.81 532.66 T
+(It) 386.36 532.66 T
+(includes) 394.85 532.66 T
+(a) 430.57 532.66 T
+(function) 437.39 532.66 T
+(lik) 473.1 532.66 T
+(e) 483.56 532.66 T
+(CDE\325) 490.39 532.66 T
+(s) 513.17 532.66 T
+(dt\336le) 519.44 532.66 T
+(or) 189 520.66 T
+(Explorer\325) 201.49 520.66 T
+(s) 239.26 520.66 T
+(\324right) 247.32 520.66 T
+(mouse\325) 273.7 520.66 T
+(menu,) 307.3 520.66 T
+(where) 336.19 520.66 T
+(all) 364.78 520.66 T
+(operations) 378.95 520.66 T
+(that) 424.77 520.66 T
+(can) 443.93 520.66 T
+(be) 461.98 520.66 T
+(performed) 475.58 520.66 T
+(on) 521.4 520.66 T
+(a) 535.56 520.66 T
+(selected data item are listed in a popup menu for that item.) 189 508.66 T
+(A) 189 484.66 T
+(typical) 200.38 484.66 T
+(user) 231.76 484.66 T
+(launches) 252.58 484.66 T
+(this) 291.73 484.66 T
+(application) 310.34 484.66 T
+(to) 358.94 484.66 T
+(vie) 370.89 484.66 T
+(w) 382.86 484.66 T
+(a) 394.24 484.66 T
+(directory) 402.84 484.66 T
+(of) 443.1 484.66 T
+(\336les.) 455.59 484.66 T
+(When) 478.92 484.66 T
+(the) 506.96 484.66 T
+(user) 523.34 484.66 T
+54 629/G269315 FmPA
+(speci\336es) 189 472.66 T
+(a) 226.45 472.66 T
+(\336le) 233.9 472.66 T
+(by) 249.7 472.66 T
+(clicking) 262.71 472.66 T
+(on) 297.94 472.66 T
+(it,) 310.95 472.66 T
+(the) 322.02 472.66 T
+(application) 337.26 472.66 T
+(displays) 384.71 472.66 T
+(a) 420.5 472.66 T
+(popup) 427.95 472.66 T
+(menu) 455.96 472.66 T
+(which) 481.2 472.66 T
+(lists) 508.65 472.66 T
+(the) 527.78 472.66 T
+(a) 189 460.66 T
+(v) 193.24 460.66 T
+(ailable) 197.99 460.66 T
+(operations) 228.66 460.66 T
+(on) 274.33 460.66 T
+(that) 288.33 460.66 T
+(\336le.) 307.34 460.66 T
+(File) 326.63 460.66 T
+(system) 346.2 460.66 T
+(vie) 377.99 460.66 T
+(wer) 389.96 460.66 T
+(utilities) 408.95 460.66 T
+(normally) 442.97 460.66 T
+(include) 483.09 460.66 T
+(\324edit,) 516.54 460.66 T
+(\325) 536.67 460.66 T
+(\324vie) 189 448.66 T
+(w) 204.3 448.66 T
+(,) 210.87 448.66 T
+(\325) 212.67 448.66 T
+(and) 220.46 448.66 T
+(\324print\325) 239.37 448.66 T
+(commands) 269.38 448.66 T
+(as) 317.17 448.66 T
+(a) 329.96 448.66 T
+(v) 334.2 448.66 T
+(ailable) 338.95 448.66 T
+(operations.) 370.08 448.66 T
+(F) 418.7 448.66 T
+(or) 424.11 448.66 T
+(instance) 436.9 448.66 T
+(selecting) 474.14 448.66 T
+(\324vie) 514.15 448.66 T
+(w\325) 529.45 448.66 T
+(causes) 189 436.66 T
+(the) 217.69 436.66 T
+(utility) 232.51 436.66 T
+(to) 259 436.66 T
+(open) 269.37 436.66 T
+(the) 291.41 436.66 T
+(selected) 306.22 436.66 T
+(\336le) 341.02 436.66 T
+(in) 356.4 436.66 T
+(a) 366.77 436.66 T
+(vie) 373.8 436.66 T
+(wer) 385.77 436.66 T
+(which) 403.36 436.66 T
+(can) 430.39 436.66 T
+(display) 446.87 436.66 T
+(data) 478.35 436.66 T
+(of) 497.6 436.66 T
+(the) 508.53 436.66 T
+(data) 523.34 436.66 T
+(type held in that \336le.) 189 424.66 T
+0 F
+(5.1) 166.1 394.66 T
+(Scenario Ar) 189 394.66 T
+(c) 244.93 394.66 T
+(hitecture) 250.39 394.66 T
+54 539/G264830 FmPA
+1 F
+(Description) 189 370.66 T
+(of) 239.39 370.66 T
+(tasks) 251.45 370.66 T
+(performed) 275.17 370.66 T
+(by) 320.55 370.66 T
+(the) 334.28 370.66 T
+(application) 350.23 370.66 T
+(is) 398.4 370.66 T
+(brok) 408.8 370.66 T
+(en) 427.03 370.66 T
+(do) 440.2 370.66 T
+(wn) 449.95 370.66 T
+(into) 465.89 370.66 T
+(three) 485.18 370.66 T
+(discrete) 508.9 370.66 T
+54 515/G269319 FmPA
+(steps, for clarity:) 189 358.66 T
+5 11 Q
+(\245) 189 339.99 T
+1 10 Q
+(Initialization: The application constructs a vie) 202.74 339.99 T
+(w of the \336le system.) 386.08 339.99 T
+54 484/G269320 FmPA
+5 11 Q
+(\245) 189 323.99 T
+1 10 Q
+(Getting) 202.74 323.99 T
+(the) 235.06 323.99 T
+(Command) 249.59 323.99 T
+(List:) 293.57 323.99 T
+(The) 314.23 323.99 T
+(application) 332.09 323.99 T
+(presents) 378.84 323.99 T
+(the) 413.92 323.99 T
+(command) 428.46 323.99 T
+(list) 470.21 323.99 T
+(for) 484.75 323.99 T
+(a) 498.72 323.99 T
+(selected) 505.48 323.99 T
+54 468/G269321 FmPA
+(data item.) 202.74 311.66 T
+5 11 Q
+(\245) 189 295.99 T
+1 10 Q
+(Performing the Command: The application performs a command on the selected) 202.74 295.99 T
+54 440/G269322 FmPA
+(data object.) 202.74 283.66 T
+0 F
+(5.2) 166.1 253.66 T
+(Initialization) 189 253.66 T
+54 398/G264833 FmPA
+1 F
+(One) 189 229.66 T
+(of) 210.38 229.66 T
+(the) 223.44 229.66 T
+(interf) 240.38 229.66 T
+(aces) 261.95 229.66 T
+(mentioned) 283.88 229.66 T
+(belo) 330.83 229.66 T
+(w) 347.8 229.66 T
+(is) 359.74 229.66 T
+(the) 371.14 229.66 T
+(\324DataSource\325) 388.08 229.66 T
+(object.) 446.11 229.66 T
+(Recall) 477.78 229.66 T
+(that) 508.05 229.66 T
+(the) 527.78 229.66 T
+54 374/G264834 FmPA
+(DataSource) 189 217.66 T
+(object) 238.89 217.66 T
+(encapsulates) 266.57 217.66 T
+(the) 320.34 217.66 T
+(underlying) 335.8 217.66 T
+(data) 382.37 217.66 T
+(object) 402.27 217.66 T
+(in) 429.94 217.66 T
+(a) 440.96 217.66 T
+(class) 448.64 217.66 T
+(that) 471.32 217.66 T
+(abstracts) 489.55 217.66 T
+(the) 527.78 217.66 T
+(underlying) 189 205.66 T
+(data) 236.04 205.66 T
+(storage) 256.4 205.66 T
+(mechanism,) 288.99 205.66 T
+(and) 340.74 205.66 T
+(presents) 358.89 205.66 T
+(its) 395.37 205.66 T
+(consumers) 408.52 205.66 T
+(with) 455 205.66 T
+(a) 476.49 205.66 T
+(common) 484.63 205.66 T
+(data) 523.34 205.66 T
+(access) 189 193.66 T
+(and) 218.05 193.66 T
+(typing) 235.99 193.66 T
+(interf) 265.06 193.66 T
+(ace.) 286.62 193.66 T
+(The) 305.95 193.66 T
+(\336le) 325 193.66 T
+(vie) 341.29 193.66 T
+(wer) 353.26 193.66 T
+(application) 371.75 193.66 T
+(queries) 419.7 193.66 T
+(the) 452.08 193.66 T
+(\336le) 467.81 193.66 T
+(system) 484.1 193.66 T
+(for) 515.38 193.66 T
+(its) 530.55 193.66 T
+(contents.) 189 181.66 T
+(The) 189 157.66 T
+(vie) 209.25 157.66 T
+(wer) 221.22 157.66 T
+(instantiates) 240.92 157.66 T
+(a) 290.62 157.66 T
+(DataSource) 299.76 157.66 T
+(object) 351.11 157.66 T
+(for) 380.26 157.66 T
+(each) 396.62 157.66 T
+(\336le) 419.64 157.66 T
+(in) 437.13 157.66 T
+(the) 449.61 157.66 T
+(directory) 466.53 157.66 T
+(.) 501.98 157.66 T
+(Then) 509.19 157.66 T
+(it) 534.44 157.66 T
+54 302/G268682 FmPA
+(instantiates) 189 145.66 T
+(a) 239.39 145.66 T
+(a) 249.22 145.66 T
+(DataHandler) 259.05 145.66 T
+(with) 315.53 145.66 T
+(the) 338.7 145.66 T
+(DataSource) 356.32 145.66 T
+(as) 408.36 145.66 T
+(its) 422.08 145.66 T
+(constructor) 436.92 145.66 T
+(ar) 487.3 145.66 T
+(gument.) 494.89 145.66 T
+(A) 532.78 145.66 T
+(DataHandler) 189 133.66 T
+(can) 244.34 133.66 T
+(not) 262.46 133.66 T
+(be) 279.49 133.66 T
+(instantiated) 293.18 133.66 T
+(without) 343.54 133.66 T
+(a) 378.34 133.66 T
+(DataSource.) 387.03 133.66 T
+(The) 440.43 133.66 T
+(DataHandler) 460.22 133.66 T
+(object) 515.56 133.66 T
+(pro) 189 121.66 T
+(vides) 202.18 121.66 T
+(the) 227.73 121.66 T
+(client) 244.39 121.66 T
+(application) 271.05 121.66 T
+(with) 319.93 121.66 T
+(access) 342.15 121.66 T
+(to) 372.13 121.66 T
+(the) 384.35 121.66 T
+(CommandMap,) 401.01 121.66 T
+(which) 467.95 121.66 T
+(pro) 496.83 121.66 T
+(vides) 510.01 121.66 T
+(a) 535.56 121.66 T
+(service) 189 109.66 T
+(that) 220.5 109.66 T
+(enables) 238.68 109.66 T
+(access) 271.85 109.66 T
+(to) 300.58 109.66 T
+(commands) 311.54 109.66 T
+(that) 358.05 109.66 T
+(can) 376.23 109.66 T
+(operate) 393.29 109.66 T
+(on) 425.9 109.66 T
+(the) 439.08 109.66 T
+(data.) 454.49 109.66 T
+(The) 476.83 109.66 T
+(application) 495.56 109.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.4/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "4" 4
+%%Page: "5" 5
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Usa) 207 739.85 T
+(g) 223.42 739.85 T
+(e Scenarios) 229.01 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(5) 527.82 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+1 F
+(maintains) 207 680.66 T
+(a) 249.12 680.66 T
+(list) 256.79 680.66 T
+(of) 272.25 680.66 T
+(the) 283.81 680.66 T
+(DataHandler) 299.26 680.66 T
+(objects,) 353.58 680.66 T
+(queries) 387.64 680.66 T
+(them) 419.75 680.66 T
+(for) 442.98 680.66 T
+(their) 457.87 680.66 T
+(names) 479.43 680.66 T
+(and) 508.21 680.66 T
+(icons) 525.88 680.66 T
+(to) 550.22 680.66 T
+(generate its display) 207 668.66 T
+(.) 283.56 668.66 T
+7 9 Q
+(// for each file in the directory:) 216 651.33 T
+72 795/G265095 FmPA
+(File file = new File\050file_name\051;) 216 640.33 T
+72 784/G265096 FmPA
+(DataSource ds = new FileDataSource\050file\051;) 216 629.33 T
+72 773/G266552 FmPA
+(DataHandler dh = new DataHandler\050ds\051;) 216 618.33 T
+72 762/G266553 FmPA
+0 10 Q
+(5.3) 184.1 588.66 T
+(Getting the Command List) 207 588.66 T
+72 733/G266554 FmPA
+1 F
+(Once) 207 564.66 T
+(the) 230.74 564.66 T
+(application) 245.61 564.66 T
+(has) 292.69 564.66 T
+(been) 308.66 564.66 T
+(initialized) 330.19 564.66 T
+(and) 372.83 564.66 T
+(has) 389.91 564.66 T
+(presented) 405.89 564.66 T
+(a) 446.85 564.66 T
+(list) 453.93 564.66 T
+(of) 468.8 564.66 T
+(\336les) 479.78 564.66 T
+(to) 499.09 564.66 T
+(the) 509.51 564.66 T
+(user) 524.38 564.66 T
+(,) 540.64 564.66 T
+(the) 545.78 564.66 T
+72 709/G264836 FmPA
+(user) 207 552.66 T
+(can) 226.63 552.66 T
+(select) 243.48 552.66 T
+(a) 269.22 552.66 T
+(\336le) 276.63 552.66 T
+(on) 292.38 552.66 T
+(the) 305.35 552.66 T
+(list.) 320.54 552.66 T
+(When) 338.24 552.66 T
+(the) 365.1 552.66 T
+(user) 380.29 552.66 T
+(selects) 399.92 552.66 T
+(a) 429.55 552.66 T
+(\336le,) 436.96 552.66 T
+(the) 455.21 552.66 T
+(application) 470.4 552.66 T
+(displays) 517.81 552.66 T
+(a) 553.56 552.66 T
+(popup menu that lists the a) 207 540.66 T
+(v) 314.3 540.66 T
+(ailable operations on that \336le.) 319.05 540.66 T
+(The) 207 516.66 T
+(application) 228.42 516.66 T
+(implements) 278.73 516.66 T
+(this) 331.27 516.66 T
+(functionality) 351.59 516.66 T
+(by) 408.57 516.66 T
+(requesting) 424.43 516.66 T
+(the) 471.96 516.66 T
+(list) 490.05 516.66 T
+(of) 508.15 516.66 T
+(a) 522.35 516.66 T
+(v) 526.59 516.66 T
+(ailable) 531.34 516.66 T
+72 661/G269326 FmPA
+(commands) 207 504.66 T
+(from) 255.85 504.66 T
+(the) 280.82 504.66 T
+(DataHandler) 298.56 504.66 T
+(object) 355.18 504.66 T
+(associated) 385.14 504.66 T
+(with) 431.76 504.66 T
+(a) 455.07 504.66 T
+(\336le.) 465.03 504.66 T
+(The) 485.84 504.66 T
+(DataHandler) 506.91 504.66 T
+(retrie) 207 492.66 T
+(v) 227.85 492.66 T
+(es) 232.7 492.66 T
+(the) 245.82 492.66 T
+(MIME) 262.83 492.66 T
+(T) 294.84 492.66 T
+(ype) 300.15 492.66 T
+(of) 319.38 492.66 T
+(the) 332.5 492.66 T
+(data) 349.51 492.66 T
+(from) 370.96 492.66 T
+(the) 395.2 492.66 T
+(DataSource) 412.21 492.66 T
+(object) 463.65 492.66 T
+(and) 492.88 492.66 T
+(queries) 512.11 492.66 T
+(the) 545.78 492.66 T
+(CommandMap) 207 480.66 T
+(for) 269.94 480.66 T
+(operations) 284.54 480.66 T
+(that) 329.14 480.66 T
+(are) 347.08 480.66 T
+(a) 362.23 480.66 T
+(v) 366.47 480.66 T
+(ailable) 371.22 480.66 T
+(on) 400.82 480.66 T
+(that) 413.76 480.66 T
+(type.) 431.7 480.66 T
+(The) 454.36 480.66 T
+(application) 472.85 480.66 T
+(interprets) 520.23 480.66 T
+(the) 207 468.66 T
+(list) 222.66 468.66 T
+(and) 238.33 468.66 T
+(presents) 256.2 468.66 T
+(it) 292.41 468.66 T
+(to) 301.41 468.66 T
+(the) 312.63 468.66 T
+(user) 328.28 468.66 T
+(on) 348.38 468.66 T
+(a) 361.82 468.66 T
+(popup) 369.7 468.66 T
+(menu.) 398.14 468.66 T
+(The) 426.29 468.66 T
+(user) 445.28 468.66 T
+(then) 465.38 468.66 T
+(selects) 486.04 468.66 T
+(one) 516.13 468.66 T
+(of) 534.01 468.66 T
+(the) 545.78 468.66 T
+(operations from that list.) 207 456.66 T
+7 9 Q
+(// get the command list for an object) 216 439.33 T
+72 583/G264837 FmPA
+(CommandInfo cmdInfo[] = dh.getPreferredCommands\050\051;) 216 428.33 T
+72 572/G265100 FmPA
+72 561/G265549 FmPA
+(PopupMenu popup = new PopupMenu\050\322Item Menu\323\051;) 216 406.33 T
+72 550/G265103 FmPA
+72 539/G264838 FmPA
+(// populate the popup with available commands) 216 384.33 T
+72 528/G265550 FmPA
+(for\050i = 0; i < cmdInfo.length; i++\051) 216 373.33 T
+72 517/G265104 FmPA
+(   popup.add\050cmdInfo[i].getCommandName\050\051\051;) 216 362.33 T
+72 506/G265105 FmPA
+72 495/G265106 FmPA
+(// add and show popup) 216 340.33 T
+72 484/G265551 FmPA
+(add\050popup\051;) 216 329.33 T
+72 473/G265107 FmPA
+(popup.show\050x_pos, y_pos\051;) 216 318.33 T
+72 462/G265108 FmPA
+0 10 Q
+(5.4) 184.1 288.66 T
+(P) 207 288.66 T
+(erf) 213.37 288.66 T
+(orming a Command) 225.95 288.66 T
+72 433/G264839 FmPA
+1 F
+(After) 207 264.66 T
+(the) 231.25 264.66 T
+(user) 246.62 264.66 T
+(has) 266.43 264.66 T
+(selected) 282.92 264.66 T
+(a) 318.28 264.66 T
+(command) 325.87 264.66 T
+(from) 368.46 264.66 T
+(the) 391.05 264.66 T
+(popup) 406.42 264.66 T
+(menu,) 434.57 264.66 T
+(the) 462.45 264.66 T
+(application) 477.82 264.66 T
+(uses) 525.41 264.66 T
+(the) 545.78 264.66 T
+72 409/G264840 FmPA
+(appropriate) 207 252.66 T
+(CommandInfo) 256 252.66 T
+(class) 317.78 252.66 T
+(to) 340.68 252.66 T
+(retrie) 351.91 252.66 T
+(v) 372.76 252.66 T
+(e) 377.61 252.66 T
+(the) 385.51 252.66 T
+(Bean) 401.18 252.66 T
+(that) 428.65 252.66 T
+(corresponds) 447.1 252.66 T
+(to) 498.88 252.66 T
+(the) 510.11 252.66 T
+(selected) 525.79 252.66 T
+(command,) 207 240.66 T
+(and) 253.25 240.66 T
+(associates) 272.01 240.66 T
+(the) 316.31 240.66 T
+(data) 332.84 240.66 T
+(with) 353.81 240.66 T
+(that) 375.91 240.66 T
+(Bean) 395.22 240.66 T
+(using) 420.08 240.66 T
+(the) 446.06 240.66 T
+(appropriate) 462.6 240.66 T
+(mechanism) 512.45 240.66 T
+(\050DataHandler) 207 228.66 T
+(,) 261.02 228.66 T
+(Externalization) 266.55 228.66 T
+(etc.\051.) 330.68 228.66 T
+(Some) 353.7 228.66 T
+(CommandObjects) 379.51 228.66 T
+(\050vie) 454.76 228.66 T
+(wers) 470.06 228.66 T
+(for) 491.97 228.66 T
+(instance\051) 506.66 228.66 T
+(are) 545.79 228.66 T
+(subclassed) 207 216.66 T
+(from) 252.42 216.66 T
+(ja) 274.51 216.66 T
+(v) 281.53 216.66 T
+(a.a) 286.28 216.66 T
+(wt.Component) 297.51 216.66 T
+(and) 359.33 216.66 T
+(require) 376.43 216.66 T
+(that) 407.4 216.66 T
+(the) 425.05 216.66 T
+(y) 437.12 216.66 T
+(are) 444.77 216.66 T
+(gi) 459.63 216.66 T
+(v) 467.16 216.66 T
+(en) 472.01 216.66 T
+(a) 484.11 216.66 T
+(parent) 491.2 216.66 T
+(container) 518.84 216.66 T
+(.) 555.5 216.66 T
+(Others) 207 204.66 T
+(\050lik) 236.97 204.66 T
+(e) 250.76 204.66 T
+(a) 258.5 204.66 T
+(def) 266.25 204.66 T
+(ault) 278.92 204.66 T
+(print) 297.23 204.66 T
+(Command\051) 319.42 204.66 T
+(might) 367.73 204.66 T
+(not) 394.38 204.66 T
+(present) 410.46 204.66 T
+(a) 442.65 204.66 T
+(user) 450.4 204.66 T
+(interf) 470.37 204.66 T
+(ace.) 491.93 204.66 T
+(This) 511.05 204.66 T
+(allo) 532.14 204.66 T
+(ws) 546.89 204.66 T
+(them) 207 192.66 T
+(to) 231.24 192.66 T
+(be) 243.25 192.66 T
+(\337e) 256.93 192.66 T
+(xible) 266.78 192.66 T
+(enough) 291.01 192.66 T
+(to) 324.69 192.66 T
+(function) 336.7 192.66 T
+(as) 374.27 192.66 T
+(stand) 386.83 192.66 T
+(alone) 412.18 192.66 T
+(vie) 438.07 192.66 T
+(wer/editors,) 450.04 192.66 T
+(or) 501.77 192.66 T
+(perhaps) 514.33 192.66 T
+(as) 549.67 192.66 T
+(components) 207 180.66 T
+(in) 260.13 180.66 T
+(a) 272.71 180.66 T
+(compound) 281.94 180.66 T
+(document) 328.96 180.66 T
+(system.) 373.2 180.66 T
+(The) 408.28 180.66 T
+(\324application\325) 428.63 180.66 T
+(is) 484.52 180.66 T
+(responsible) 495.99 180.66 T
+(for) 546.34 180.66 T
+(pro) 207 168.66 T
+(viding) 220.18 168.66 T
+(the) 255.78 168.66 T
+(proper) 278.04 168.66 T
+(en) 314.18 168.66 T
+(vironment) 323.22 168.66 T
+(\050containment,) 374.37 168.66 T
+(life) 439.68 168.66 T
+(c) 463.06 168.66 T
+(ycle,) 467.35 168.66 T
+(etc.\051) 496.55 168.66 T
+(for) 524.08 168.66 T
+(the) 545.78 168.66 T
+(CommandObject) 207 156.66 T
+(to) 277.77 156.66 T
+(e) 287.98 156.66 T
+(x) 292.27 156.66 T
+(ecute) 297.12 156.66 T
+(in.) 320.66 156.66 T
+(W) 333.38 156.66 T
+(e) 342.02 156.66 T
+(e) 348.89 156.66 T
+(xpect) 353.18 156.66 T
+(that) 377.28 156.66 T
+(the) 394.72 156.66 T
+(requirements) 409.37 156.66 T
+(will) 464.02 156.66 T
+(be) 482.02 156.66 T
+(lightweight) 493.89 156.66 T
+(\050not) 541.89 156.66 T
+(much be) 207 144.66 T
+(yond Ja) 241.01 144.66 T
+(v) 271.64 144.66 T
+(aBeans\252 containers and A) 276.39 144.66 T
+(WT containment for visible components\051.) 384.43 144.66 T
+7 9 Q
+(// get the command object) 216 127.33 T
+72 271/G264841 FmPA
+(Object cmdBean = cmdInfo[cmd_id].getCommandObject\050dh,) 216 116.33 T
+72 260/G265109 FmPA
+(this.getClassLoader\050\051\051;) 428.85 105.33 T
+72 249/G267541 FmPA
+(  ... // use serialization/externalization where appropriate) 216 94.33 T
+72 238/G265113 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.5/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "5" 5
+%%Page: "6" 6
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 189 739.85 T
+(y Frame) 217.6 739.85 T
+(w) 251.98 739.85 T
+(ork Interfaces) 258.8 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(6) 54 60.29 T
+0 9 Q
+( of) 59.56 60.29 T
+0 10 Q
+( 36) 70.56 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+54 825/G264843 FmPA
+7 F
+(my_awt_container.add\050\050Component\051cmdBean\051;) 198 670.33 T
+54 814/G265555 FmPA
+0 10 Q
+(5.5) 166.1 640.66 T
+(An Alternative Scenario) 189 640.66 T
+54 785/G264844 FmPA
+1 F
+(The) 189 616.66 T
+(\336rst) 208.66 616.66 T
+(scenario) 228.32 616.66 T
+(w) 265.75 616.66 T
+(as) 272.87 616.66 T
+(the) 285.3 616.66 T
+(\324canonical\325) 301.63 616.66 T
+(case.) 350.71 616.66 T
+(There) 374.53 616.66 T
+(are) 401.96 616.66 T
+(also) 418.27 616.66 T
+(circumstances) 438.49 616.66 T
+(where) 499.24 616.66 T
+(the) 527.78 616.66 T
+54 761/G264845 FmPA
+(application) 189 604.66 T
+(has) 236.35 604.66 T
+(already) 252.6 604.66 T
+(created) 284.95 604.66 T
+(objects) 316.73 604.66 T
+(to) 347.98 604.66 T
+(represent) 358.67 604.66 T
+(its) 398.23 604.66 T
+(data.) 410.6 604.66 T
+(In) 432.67 604.66 T
+(this) 443.92 604.66 T
+(case) 461.29 604.66 T
+(creating) 481.41 604.66 T
+(an) 516.53 604.66 T
+(in-) 528.89 604.66 T
+(memory) 189 592.66 T
+(instance) 224.98 592.66 T
+(of) 260.39 592.66 T
+(a) 271.37 592.66 T
+(DataSource) 278.46 592.66 T
+(that) 327.75 592.66 T
+(con) 345.4 592.66 T
+(v) 359.44 592.66 T
+(erted) 364.29 592.66 T
+(an) 386.93 592.66 T
+(e) 399.01 592.66 T
+(xisting) 403.3 592.66 T
+(object) 433.18 592.66 T
+(into) 460.27 592.66 T
+(an) 478.47 592.66 T
+(InputStream) 490.56 592.66 T
+(is an inef) 189 580.66 T
+(\336cient use of system resources and can result in a loss of data \336delity) 225.41 580.66 T
+(.) 501.11 580.66 T
+(In) 189 556.66 T
+(these) 206.87 556.66 T
+(cases,) 236.95 556.66 T
+(the) 270.08 556.66 T
+(application) 291.84 556.66 T
+(can) 345.82 556.66 T
+(instantiate) 369.23 556.66 T
+(a) 419.88 556.66 T
+(DataHandler) 433.85 556.66 T
+(,) 484.54 556.66 T
+(using) 496.58 556.66 T
+(the) 527.78 556.66 T
+54 701/G268749 FmPA
+(DataHandler\050Object) 189 544.66 T
+(obj,) 274 544.66 T
+(String) 293.19 544.66 T
+(mimeT) 321.56 544.66 T
+(ype\051) 349.65 544.66 T
+(constructor) 371.33 544.66 T
+(.) 415.77 544.66 T
+(DataHandler) 422.19 544.66 T
+(implements) 477.19 544.66 T
+(the) 527.78 544.66 T
+(T) 189 532.66 T
+(ransferable) 194.76 532.66 T
+(interf) 242.86 532.66 T
+(ace,) 264.42 532.66 T
+(so) 283.92 532.66 T
+(the) 296.5 532.66 T
+(consuming) 312.4 532.66 T
+(Bean) 359.97 532.66 T
+(can) 384.2 532.66 T
+(request) 401.76 532.66 T
+(representations) 434.33 532.66 T
+(other) 498.55 532.66 T
+(than) 522.78 532.66 T
+(InputStreams.) 189 520.66 T
+(The) 250.54 520.66 T
+(DataHandler) 271.79 520.66 T
+(also) 328.59 520.66 T
+(constructs) 350.4 520.66 T
+(a) 396.66 520.66 T
+(DataSource) 406.8 520.66 T
+(for) 459.16 520.66 T
+(consumers) 476.52 520.66 T
+(that) 525 520.66 T
+(request) 189 508.66 T
+(it.) 221.72 508.66 T
+(The) 233.62 508.66 T
+(DataContentHandler) 253.01 508.66 T
+(mechanism) 339.61 508.66 T
+(is) 388.99 508.66 T
+(e) 399.5 508.66 T
+(xtended) 403.79 508.66 T
+(to) 439.29 508.66 T
+(also) 450.91 508.66 T
+(allo) 470.86 508.66 T
+(w) 485.61 508.66 T
+(con) 496.67 508.66 T
+(v) 510.71 508.66 T
+(ersion) 515.56 508.66 T
+(from Objects to InputStreams.) 189 496.66 T
+(The) 189 472.66 T
+(follo) 206.84 472.66 T
+(wing) 225.48 472.66 T
+(code) 247.77 472.66 T
+(is) 268.94 472.66 T
+(an) 277.89 472.66 T
+(e) 289.62 472.66 T
+(xample) 293.91 472.66 T
+(of) 325.64 472.66 T
+(a) 336.26 472.66 T
+(data) 342.99 472.66 T
+(base) 361.94 472.66 T
+(front) 382 472.66 T
+(end) 403.73 472.66 T
+(using) 420.45 472.66 T
+(the) 444.41 472.66 T
+(J) 458.92 472.66 T
+(AF) 462.21 472.66 T
+(,) 474.19 472.66 T
+(which) 478.98 472.66 T
+(pro) 505.71 472.66 T
+(vides) 518.89 472.66 T
+54 617/G268758 FmPA
+(query results in terms of objects.) 189 460.66 T
+7 9 Q
+( /**) 198 443.33 T
+54 587/G264846 FmPA
+(  * Get the viewer to view my query results:) 198 432.33 T
+54 576/G265114 FmPA
+(  */) 198 421.33 T
+54 565/G265115 FmPA
+(Component) 202.2 410.33 T
+(getQueryViewer\050QueryObject) 255 410.33 T
+(qo\051) 399.6 410.33 T
+(throws) 420 410.33 T
+(Exception) 456.6 410.33 T
+({) 509.4 410.33 T
+54 554/G265116 FmPA
+(    String mime_type = qo.getType\050\051;) 198 399.33 T
+54 543/G265118 FmPA
+(    Object q_result = qo.getResultObject\050\051;) 198 388.33 T
+54 532/G265119 FmPA
+(    DataHandler my_dh = new DataHandler\050q_result, mime_type\051;) 198 377.33 T
+54 521/G265120 FmPA
+54 510/G265559 FmPA
+(   return) 198 355.33 T
+54 499/G265123 FmPA
+(\050Component\051my_dh.getCommand\050\322view\323\051.getCommandObject\050my_dh,) 198 344.33 T
+(null\051\051;) 198 333.33 T
+(  }) 198 322.33 T
+54 466/G265124 FmPA
+54 279.33 540 282.33 C
+0 0 0 1 0 0 0 1 K
+189 281.48 540 281.48 2 L
+0.25 H
+2 Z
+0 X
+N
+54 281.48 180 281.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(6.0) 163.32 286.33 T
+(Primar) 189 286.33 T
+(y Frame) 227.14 286.33 T
+(w) 272.98 286.33 T
+(ork Interfaces) 282.07 286.33 T
+54 430/G264848 FmPA
+1 10 Q
+(This) 189 258.66 T
+(section) 209.46 258.66 T
+(describes) 240.46 258.66 T
+(interf) 280.35 258.66 T
+(aces) 301.91 258.66 T
+(required) 321.8 258.66 T
+(to) 357.8 258.66 T
+(implement) 368.25 258.66 T
+(the) 413.71 258.66 T
+(J) 428.61 258.66 T
+(AF) 431.9 258.66 T
+(architecture) 447.35 258.66 T
+(introduced) 497.23 258.66 T
+54 403/G264849 FmPA
+(in Section Three.) 189 246.66 T
+0 F
+(6.1) 166.1 216.66 T
+(The DataSour) 189 216.66 T
+(ce Interface) 253.81 216.66 T
+54 361/G264850 FmPA
+1 F
+(The) 189 192.66 T
+(DataSource) 209.66 192.66 T
+(interf) 261.41 192.66 T
+(ace) 282.97 192.66 T
+(is) 301.4 192.66 T
+(used) 313.18 192.66 T
+(by) 336.62 192.66 T
+(the) 351.72 192.66 T
+(DataHandler) 369.05 192.66 T
+(\050and) 425.25 192.66 T
+(possibly) 448.12 192.66 T
+(other) 486.57 192.66 T
+(classes) 512.23 192.66 T
+54 337/G264851 FmPA
+(else) 189 180.66 T
+(where\051) 204.3 180.66 T
+(to) 237.11 180.66 T
+(access) 249.94 180.66 T
+(the) 280.53 180.66 T
+(underlying) 297.8 180.66 T
+(data.) 346.18 180.66 T
+(The) 370.4 180.66 T
+(DataSource) 391 180.66 T
+(object) 442.7 180.66 T
+(encapsulates) 472.19 180.66 T
+(the) 527.78 180.66 T
+(underlying) 189 168.66 T
+(data) 235.7 168.66 T
+(object) 255.73 168.66 T
+(in) 283.55 168.66 T
+(a) 294.7 168.66 T
+(class) 302.51 168.66 T
+(that) 325.32 168.66 T
+(abstracts) 343.69 168.66 T
+(the) 382.05 168.66 T
+(underlying) 397.64 168.66 T
+(data) 444.35 168.66 T
+(storage) 464.38 168.66 T
+(and) 496.63 168.66 T
+(typing) 514.44 168.66 T
+(mechanism, and presents its consumers with a common data access interf) 189 156.66 T
+(ace.) 482.46 156.66 T
+(The) 189 132.66 T
+(J) 208.7 132.66 T
+(AF) 211.99 132.66 T
+(pro) 228.92 132.66 T
+(vides) 242.1 132.66 T
+(DataSource) 267.36 132.66 T
+(implementations) 318.16 132.66 T
+(that) 388.98 132.66 T
+(support) 408.12 132.66 T
+(\336le) 442.27 132.66 T
+(systems) 459.2 132.66 T
+(and) 495.02 132.66 T
+(URLs.) 513.61 132.66 T
+54 277/G268257 FmPA
+(Application) 189 120.66 T
+(system) 239.65 120.66 T
+(v) 270.85 120.66 T
+(endors) 275.7 120.66 T
+(can) 305.78 120.66 T
+(use) 323.09 120.66 T
+(the) 339.84 120.66 T
+(DataSource) 355.49 120.66 T
+(interf) 405.56 120.66 T
+(ace) 427.12 120.66 T
+(to) 443.87 120.66 T
+(implement) 455.07 120.66 T
+(their) 501.27 120.66 T
+(o) 523.03 120.66 T
+(wn) 527.78 120.66 T
+(specialized) 189 108.66 T
+(DataSource) 237.89 108.66 T
+(classes) 288.99 108.66 T
+(to) 321.22 108.66 T
+(support) 333.45 108.66 T
+(IMAP) 367.91 108.66 T
+(serv) 397.37 108.66 T
+(ers,) 413.88 108.66 T
+(object) 432.49 108.66 T
+(databases,) 461.39 108.66 T
+(or) 506.66 108.66 T
+(other) 519.45 108.66 T
+(sources.) 189 96.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.6/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "6" 6
+%%Page: "7" 7
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 207 739.85 T
+(y Frame) 235.6 739.85 T
+(w) 269.98 739.85 T
+(ork Interfaces) 276.8 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(7) 527.82 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+1 F
+(There) 207 680.66 T
+(is) 232.84 680.66 T
+(a) 242.04 680.66 T
+(one-to-one) 249 680.66 T
+(correspondence) 294.84 680.66 T
+(between) 360.12 680.66 T
+(underlying) 395.96 680.66 T
+(data) 441.82 680.66 T
+(items) 461 680.66 T
+(\050\336les) 485.19 680.66 T
+(for) 507.72 680.66 T
+(instance\051) 521.9 680.66 T
+72 825/G268273 FmPA
+(and) 207 668.66 T
+(DataSource) 226.51 668.66 T
+(objects.) 278.23 668.66 T
+(Also) 314.13 668.66 T
+(note) 338.09 668.66 T
+(that) 360.38 668.66 T
+(the) 380.45 668.66 T
+(class) 397.74 668.66 T
+(that) 422.25 668.66 T
+(implements) 442.32 668.66 T
+(the) 494.06 668.66 T
+(DataSource) 511.35 668.66 T
+(interf) 207 656.66 T
+(ace) 228.56 656.66 T
+(is) 244.84 656.66 T
+(responsible) 254.47 656.66 T
+(for) 302.98 656.66 T
+(typing) 317.59 656.66 T
+(the) 346.11 656.66 T
+(data.) 361.29 656.66 T
+(T) 383.41 656.66 T
+(o) 388.72 656.66 T
+(manage) 396.68 656.66 T
+(a) 430.74 656.66 T
+(\336le) 438.14 656.66 T
+(system,) 453.87 656.66 T
+(a) 487.11 656.66 T
+(DataSource) 494.51 656.66 T
+(can) 544.12 656.66 T
+(use) 207 644.66 T
+(a) 223.43 644.66 T
+(simple) 230.97 644.66 T
+(mechanism) 260.74 644.66 T
+(such) 309.39 644.66 T
+(as) 330.81 644.66 T
+(a) 342.24 644.66 T
+(\336le) 349.78 644.66 T
+(e) 365.66 644.66 T
+(xtension) 369.95 644.66 T
+(to) 406.94 644.66 T
+(type) 417.82 644.66 T
+(data,) 438.14 644.66 T
+(while) 460.39 644.66 T
+(a) 485.71 644.66 T
+(DataSource) 493.25 644.66 T
+(that) 543 644.66 T
+(supports) 207 632.66 T
+(incoming) 243.21 632.66 T
+(web-based) 283.32 632.66 T
+(data) 328.4 632.66 T
+(can) 347.38 632.66 T
+(actually) 363.59 632.66 T
+(e) 397.57 632.66 T
+(xamine) 401.86 632.66 T
+(the) 433.62 632.66 T
+(data) 448.17 632.66 T
+(stream) 467.15 632.66 T
+(to) 496.13 632.66 T
+(determine) 506.24 632.66 T
+(its) 548.55 632.66 T
+(type.) 207 620.66 T
+72 747/G265560 FmPA
+7 9 Q
+(public interface DataSource {) 216 592.33 T
+72 736/G267875 FmPA
+( /**) 216 581.33 T
+72 725/G265136 FmPA
+(   * This methodreturns an <code>InputStream</code>) 216 570.33 T
+72 714/G265133 FmPA
+(   * representing the data and throws the appropriate) 216 559.33 T
+72 703/G269845 FmPA
+(   * exception if it can not do so.) 216 548.33 T
+72 692/G265141 FmPA
+(   *) 216 537.33 T
+72 681/G269854 FmPA
+(   * @return an InputStream) 216 526.33 T
+72 670/G265142 FmPA
+(   */) 216 515.33 T
+72 659/G265143 FmPA
+(  public InputStream getInputStream\050\051 throws IOException;) 216 504.33 T
+72 648/G266951 FmPA
+72 637/G266952 FmPA
+( /**) 216 482.33 T
+72 626/G265566 FmPA
+(  * This method returns an <code>OutputStream</code> where) 216 471.33 T
+72 615/G265148 FmPA
+(*) 226.2 460.33 T
+(the) 236.7 460.33 T
+(data) 258 460.33 T
+(can) 284.7 460.33 T
+(be) 306 460.33 T
+(written) 321.9 460.33 T
+(and) 364.8 460.33 T
+(throws) 386.1 460.33 T
+(the) 423.6 460.33 T
+(appropriate) 444.9 460.33 T
+(exception) 509.4 460.33 T
+72 604/G269861 FmPA
+(  * if it can not do so.) 216 449.33 T
+72 593/G269866 FmPA
+(  *) 216 438.33 T
+72 582/G269871 FmPA
+(  * @return an OutputStream) 216 427.33 T
+72 571/G265149 FmPA
+(  */) 216 416.33 T
+72 560/G265150 FmPA
+( public OutputStream getOutputStream\050\051 throws IOException;) 216 405.33 T
+72 549/G265151 FmPA
+72 538/G265156 FmPA
+( /**) 216 383.33 T
+72 527/G265567 FmPA
+(  * This method returns the MIME Type of the data in the form) 216 372.33 T
+72 516/G265157 FmPA
+(  * of a string. It should always return a valid type.  It is) 216 361.33 T
+72 505/G269876 FmPA
+(  * suggested that getContentType return) 216 350.33 T
+72 494/G269879 FmPA
+(  * \322application/octet-stream\323 if the DataSource implementation) 216 339.33 T
+72 483/G269880 FmPA
+(  * can not determine the data type.) 216 328.33 T
+72 472/G269881 FmPA
+(  *) 216 317.33 T
+72 461/G267588 FmPA
+(  * @return the MIME Type) 216 306.33 T
+72 450/G265158 FmPA
+(  */) 216 295.33 T
+72 439/G265159 FmPA
+( public String getContentType\050\051;) 216 284.33 T
+72 428/G265160 FmPA
+72 417/G264858 FmPA
+( /**) 216 262.33 T
+72 406/G265568 FmPA
+(*) 226.29 251.33 T
+(Return) 236.83 251.33 T
+(the) 274.37 251.33 T
+(<i>name</i>) 295.71 251.33 T
+(of) 360.26 251.33 T
+(this) 376.2 251.33 T
+(object) 402.94 251.33 T
+(where) 440.48 251.33 T
+(the) 472.63 251.33 T
+(name) 493.97 251.33 T
+(of) 520.71 251.33 T
+(the) 536.66 251.33 T
+72 395/G269891 FmPA
+(*) 225.41 240.33 T
+(object) 235.52 240.33 T
+(is) 272.63 240.33 T
+(dependant) 288.14 240.33 T
+(on) 341.45 240.33 T
+(the) 356.95 240.33 T
+(nature) 377.86 240.33 T
+(of) 414.97 240.33 T
+(the) 430.48 240.33 T
+(underlying) 451.38 240.33 T
+(objects.) 510.09 240.33 T
+72 384/G269900 FmPA
+(  * DataSources encapsulating files may choose to return the) 216 229.33 T
+72 373/G269903 FmPA
+(  * filename of the object.  \050Typically this would be the last) 216 218.33 T
+72 362/G269906 FmPA
+(  * component of the filename, not an entire pathname.\051) 216 207.33 T
+72 351/G269909 FmPA
+(  *) 216 196.33 T
+72 340/G269896 FmPA
+(  * @return the name of the object.) 216 185.33 T
+72 329/G269897 FmPA
+(  */) 216 174.33 T
+72 318/G265161 FmPA
+( public String getName\050\051;) 216 163.33 T
+72 307/G265163 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.7/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "7" 7
+%%Page: "8" 8
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 189 739.85 T
+(y Frame) 217.6 739.85 T
+(w) 251.98 739.85 T
+(ork Interfaces) 258.8 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(8) 54 60.29 T
+0 9 Q
+( of) 59.56 60.29 T
+0 10 Q
+( 36) 70.56 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+7 F
+(}) 198 681.33 T
+54 825/G266579 FmPA
+0 10 Q
+(6.2) 166.1 651.66 T
+(The DataHandler Class) 189 651.66 T
+54 796/G264860 FmPA
+1 F
+(The) 189 627.66 T
+(DataHandler) 207.5 627.66 T
+(class) 261.54 627.66 T
+(encapsulates) 283.93 627.66 T
+(a) 337.42 627.66 T
+(Data) 344.81 627.66 T
+(object,) 366.64 627.66 T
+(and) 396.53 627.66 T
+(pro) 413.92 627.66 T
+(vides) 427.1 627.66 T
+(methods) 451.16 627.66 T
+(which) 488 627.66 T
+(act) 515.39 627.66 T
+(on) 530 627.66 T
+54 772/G269346 FmPA
+(that data.) 189 615.66 T
+(DataHandler) 189 591.66 T
+(encapsulates) 242.37 591.66 T
+(the) 295.19 591.66 T
+(type-to-command) 309.69 591.66 T
+(object) 383.07 591.66 T
+(binding) 409.78 591.66 T
+(service) 442.62 591.66 T
+(of) 473.22 591.66 T
+(the) 483.83 591.66 T
+(Command) 498.33 591.66 T
+54 736/G269347 FmPA
+(Map) 189 579.66 T
+(interf) 210.05 579.66 T
+(ace) 231.61 579.66 T
+(for) 247.65 579.66 T
+(applications.) 262.04 579.66 T
+(It) 315.59 579.66 T
+(pro) 324.42 579.66 T
+(vides) 337.6 579.66 T
+(a) 361.43 579.66 T
+(handle) 368.6 579.66 T
+(to) 397.98 579.66 T
+(the) 408.48 579.66 T
+(operations) 423.42 579.66 T
+(and) 467.8 579.66 T
+(data) 484.97 579.66 T
+(a) 504.35 579.66 T
+(v) 508.59 579.66 T
+(ailable) 513.34 579.66 T
+(on a data element.) 189 567.66 T
+(DataHandler) 189 543.66 T
+(also) 243.53 543.66 T
+(implements) 263.08 543.66 T
+(the) 313.18 543.66 T
+(T) 328.84 543.66 T
+(ransferable) 334.6 543.66 T
+(interf) 382.46 543.66 T
+(ace.) 404.02 543.66 T
+(This) 423.28 543.66 T
+(allo) 444.49 543.66 T
+(ws) 459.24 543.66 T
+(applications) 473.79 543.66 T
+(and) 525.56 543.66 T
+54 688/G269348 FmPA
+(applets) 189 531.66 T
+(to) 221.63 531.66 T
+(retrie) 233.71 531.66 T
+(v) 254.56 531.66 T
+(e) 259.41 531.66 T
+(alternati) 268.15 531.66 T
+(v) 300.67 531.66 T
+(e) 305.52 531.66 T
+(representations) 314.26 531.66 T
+(of) 379.1 531.66 T
+(the) 391.73 531.66 T
+(underlying) 408.24 531.66 T
+(data,) 455.87 531.66 T
+(in) 479.33 531.66 T
+(the) 491.41 531.66 T
+(form) 507.93 531.66 T
+(of) 531.67 531.66 T
+(objects.) 189 519.66 T
+(The) 223.48 519.66 T
+(DataHandler) 242.67 519.66 T
+(encapsulates) 297.41 519.66 T
+(the) 351.59 519.66 T
+(interf) 367.46 519.66 T
+(ace) 389.02 519.66 T
+(to) 405.99 519.66 T
+(the) 417.41 519.66 T
+(component) 433.28 519.66 T
+(repository) 481.36 519.66 T
+(and) 525.56 519.66 T
+(data source.) 189 507.66 T
+(Let\325) 189 483.66 T
+(s e) 205.11 483.66 T
+(xamine these groups of features in more detail:) 215.79 483.66 T
+54 628/G268296 FmPA
+0 9 Q
+(6.2.1) 159.98 460.33 T
+(Data Encapsulation) 189 460.33 T
+54 604/G267592 FmPA
+1 10 Q
+(A) 189 447.66 T
+(DataHandler) 198.62 447.66 T
+(object) 252.11 447.66 T
+(can) 278.95 447.66 T
+(only) 295.23 447.66 T
+(be) 315.41 447.66 T
+(instantiated) 327.25 447.66 T
+(with) 375.76 447.66 T
+(data.) 395.94 447.66 T
+(The) 417.5 447.66 T
+(data) 435.45 447.66 T
+(can) 454.51 447.66 T
+(be) 470.79 447.66 T
+(in) 482.63 447.66 T
+(the) 492.81 447.66 T
+(form) 507.43 447.66 T
+(of) 529.27 447.66 T
+54 592/G269352 FmPA
+(an object implementing the DataSource interf) 189 435.66 T
+(ace \050the preferred w) 371.37 435.66 T
+(ay\051, as an object with) 451.5 435.66 T
+(an associated content type, or as a URL object.) 189 423.66 T
+(Once) 189 399.66 T
+(instantiated,) 214.75 399.66 T
+(the) 268.01 399.66 T
+(DataHandler) 284.88 399.66 T
+(tries) 340.62 399.66 T
+(to) 362.49 399.66 T
+(pro) 374.92 399.66 T
+(vide) 388.1 399.66 T
+(its) 409.96 399.66 T
+(data) 424.06 399.66 T
+(in) 445.37 399.66 T
+(a) 457.8 399.66 T
+(\337e) 466.89 399.66 T
+(xible) 476.74 399.66 T
+(w) 501.39 399.66 T
+(ay) 508.51 399.66 T
+(.) 517.3 399.66 T
+(The) 524.45 399.66 T
+54 544/G268297 FmPA
+(DataHandler) 189 387.66 T
+(implements) 243.45 387.66 T
+(the) 293.48 387.66 T
+(T) 309.06 387.66 T
+(ransferable) 314.82 387.66 T
+(interf) 362.6 387.66 T
+(ace) 384.16 387.66 T
+(which) 400.84 387.66 T
+(allo) 428.64 387.66 T
+(ws) 443.39 387.66 T
+(an) 457.86 387.66 T
+(object) 470.66 387.66 T
+(to) 498.46 387.66 T
+(pro) 509.6 387.66 T
+(vide) 522.78 387.66 T
+(alternati) 189 375.66 T
+(v) 221.52 375.66 T
+(e) 226.37 375.66 T
+(representations) 233.53 375.66 T
+(of) 296.8 375.66 T
+(the) 307.85 375.66 T
+(data.) 322.79 375.66 T
+(The) 344.67 375.66 T
+(T) 362.95 375.66 T
+(ransferable) 368.71 375.66 T
+(interf) 415.85 375.66 T
+(ace\325) 437.41 375.66 T
+(s) 453.51 375.66 T
+(functionality) 460.12 375.66 T
+(can) 513.96 375.66 T
+(be) 530.56 375.66 T
+(e) 189 363.66 T
+(xtended) 193.29 363.66 T
+(via) 228.65 363.66 T
+(objects) 244.56 363.66 T
+(implementing) 276.59 363.66 T
+(the) 335.84 363.66 T
+(DataContentHandler) 351.76 363.66 T
+(interf) 438.21 363.66 T
+(ace,) 459.77 363.66 T
+(and) 479.29 363.66 T
+(then) 497.42 363.66 T
+(made) 518.34 363.66 T
+(a) 189 351.66 T
+(v) 193.24 351.66 T
+(ailable) 197.99 351.66 T
+(to) 228.46 351.66 T
+(the) 240.06 351.66 T
+(DataHandler) 256.09 351.66 T
+(either) 311 351.66 T
+(by) 337.58 351.66 T
+(a) 351.4 351.66 T
+(DataContentHandlerF) 359.65 351.66 T
+(actory) 447.82 351.66 T
+(object,) 476.63 351.66 T
+(or) 507.38 351.66 T
+(via) 519.53 351.66 T
+(a) 535.56 351.66 T
+(CommandMap.) 189 339.66 T
+0 9 Q
+(6.2.2) 159.98 316.33 T
+(Command Binding) 189 316.33 T
+54 460/G267594 FmPA
+1 10 Q
+(The DataHandler pro) 189 303.66 T
+(vides wrappers around commonly used functions for command) 273.82 303.66 T
+54 448/G267595 FmPA
+(disco) 189 291.66 T
+(v) 209.96 291.66 T
+(ery) 214.81 291.66 T
+(.) 226.93 291.66 T
+(DataHandler) 231.76 291.66 T
+(has) 285.18 291.66 T
+(methods) 300.84 291.66 T
+(that) 337.06 291.66 T
+(call) 354.39 291.66 T
+(into) 371.15 291.66 T
+(the) 389.04 291.66 T
+(current) 403.59 291.66 T
+(CommandMap) 434.24 291.66 T
+(associated) 496.57 291.66 T
+(with the DataHandler) 189 279.66 T
+(. By def) 274.54 279.66 T
+(ault the DataHandler calls CommandMap\325) 306.38 279.66 T
+(s) 475.8 279.66 T
+(getDef) 189 267.66 T
+(aultCommandMap method if no CommandMap w) 216.11 267.66 T
+(as e) 416.84 267.66 T
+(xplicitly set. As a) 431.96 267.66 T
+(con) 189 255.66 T
+(v) 203.04 255.66 T
+(enience, DataHandler uses the content type of its data when calls are made to the) 207.89 255.66 T
+(CommandMap.) 189 243.66 T
+54 370/G264863 FmPA
+7 9 Q
+(public class DataHandler implements Transferable {) 198 215.33 T
+54 359/G265569 FmPA
+(/**) 198 204.33 T
+54 348/G265168 FmPA
+( * Create a <code>DataHandler</code> instance referencing the) 198 193.33 T
+54 337/G269915 FmPA
+(*) 203.1 182.33 T
+(specified) 213.6 182.33 T
+(DataSource.) 267.3 182.33 T
+(The) 336.9 182.33 T
+(data) 358.2 182.33 T
+(exists) 384.9 182.33 T
+(in) 422.4 182.33 T
+(a) 438.3 182.33 T
+(byte) 448.8 182.33 T
+(stream) 475.5 182.33 T
+(form.) 513 182.33 T
+54 326/G269916 FmPA
+( * The DataSource will provide an InputStream to access the) 198 171.33 T
+54 315/G269917 FmPA
+( * data.) 198 160.33 T
+54 304/G269922 FmPA
+( *) 198 149.33 T
+54 293/G269918 FmPA
+( * @param ds        the DataSource) 198 138.33 T
+54 282/G269919 FmPA
+( */) 198 127.33 T
+54 271/G265169 FmPA
+(public DataHandler\050DataSource ds\051;) 198 116.33 T
+54 260/G265173 FmPA
+54 249/G264864 FmPA
+(/**) 198 94.33 T
+54 238/G265570 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.8/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "8" 8
+%%Page: "9" 9
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 207 739.85 T
+(y Frame) 235.6 739.85 T
+(w) 269.98 739.85 T
+(ork Interfaces) 276.8 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(9) 527.82 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+7 9 Q
+( * Create a <code>DataHandler</code> instance representing an) 216 681.33 T
+72 825/G269926 FmPA
+( * object of this MIME type.  This constructor is) 216 670.33 T
+72 814/G269935 FmPA
+( * used when the application already has an in-memory) 216 659.33 T
+72 803/G269928 FmPA
+( * representation of the data in the form of a Java Object.) 216 648.33 T
+72 792/G269938 FmPA
+( *) 216 637.33 T
+72 781/G269930 FmPA
+( * @param obj       the Java Object) 216 626.33 T
+72 770/G269931 FmPA
+( * @param mimeType  the MIME type of the object) 216 615.33 T
+72 759/G269932 FmPA
+( */) 216 604.33 T
+72 748/G265174 FmPA
+(public DataHandler\050Object obj, String mime_type\051;) 216 593.33 T
+72 737/G265185 FmPA
+72 726/G264865 FmPA
+(/**) 216 571.33 T
+72 715/G267468 FmPA
+(*) 220.95 560.33 T
+(Create) 231.3 560.33 T
+(a) 268.65 560.33 T
+(<code>DataHandler</code>) 279 560.33 T
+(instance) 413.55 560.33 T
+(referencing) 461.7 560.33 T
+(a) 526.05 560.33 T
+(URL.) 536.4 560.33 T
+72 704/G267470 FmPA
+( * The DataHandler internally creates a) 216 549.33 T
+72 693/G269943 FmPA
+( * <code>URLDataSource</code> instance to represent the URL.) 216 538.33 T
+72 682/G269944 FmPA
+( *) 216 527.33 T
+72 671/G269945 FmPA
+( * @param url       a URL object) 216 516.33 T
+72 660/G269946 FmPA
+( */) 216 505.33 T
+72 649/G267471 FmPA
+(public DataHandler\050URL url\051;) 216 494.33 T
+72 638/G267472 FmPA
+72 627/G269949 FmPA
+(/**) 216 472.33 T
+72 616/G265571 FmPA
+( * Return the DataSource associated with this) 216 461.33 T
+72 605/G265188 FmPA
+( * instance of DataHandler.) 216 450.33 T
+72 594/G265192 FmPA
+( * <p>) 216 439.33 T
+72 583/G269959 FmPA
+( * For DataHandlers that have been instantiated with a) 216 428.33 T
+72 572/G269965 FmPA
+(*) 221.07 417.33 T
+(DataSource,) 231.54 417.33 T
+(this) 296.02 417.33 T
+(method) 322.69 417.33 T
+(returns) 360.16 417.33 T
+(the) 403.04 417.33 T
+(DataSource) 424.31 417.33 T
+(that) 483.38 417.33 T
+(was) 510.05 417.33 T
+(used) 531.33 417.33 T
+72 561/G269976 FmPA
+( * to create the DataHandler object. In other cases the) 216 406.33 T
+72 550/G269979 FmPA
+( * DataHandler constructs a DataSource from the data used to) 216 395.33 T
+72 539/G269982 FmPA
+( * construct the DataHandler. DataSources created for) 216 384.33 T
+72 528/G269985 FmPA
+( * DataHandlers <b>not</b> instantiated with a DataSource are) 216 373.33 T
+72 517/G269988 FmPA
+( * cached for performance reasons.) 216 362.33 T
+72 506/G269991 FmPA
+( *) 216 351.33 T
+72 495/G269972 FmPA
+( * @return  a valid DataSource object for this DataHandler) 216 340.33 T
+72 484/G269973 FmPA
+( */) 216 329.33 T
+72 473/G269963 FmPA
+(public DataSource getDataSource\050\051;) 216 318.33 T
+72 462/G265197 FmPA
+72 451/G265198 FmPA
+(/**) 216 296.33 T
+72 440/G269998 FmPA
+( * Return the name of the data object. If this DataHandler) 216 285.33 T
+72 429/G269999 FmPA
+( * was created with a DataSource, this method calls through) 216 274.33 T
+72 418/G270000 FmPA
+( * to the <code>DataSource.getName</code> method, otherwise it) 216 263.33 T
+72 407/G270001 FmPA
+( * returns <i>null</i>.) 216 252.33 T
+72 396/G270002 FmPA
+( *) 216 241.33 T
+72 385/G270003 FmPA
+( * @return  the name of the object) 216 230.33 T
+72 374/G270004 FmPA
+( */) 216 219.33 T
+72 363/G270005 FmPA
+(public String getName\050\051;) 216 208.33 T
+72 352/G270006 FmPA
+72 341/G270013 FmPA
+(/**) 216 186.33 T
+72 330/G265572 FmPA
+( * Return the MIME type of this object as retrieved from) 216 175.33 T
+72 319/G270017 FmPA
+( * the source object. Note that this is the <i>full</i>) 216 164.33 T
+72 308/G270018 FmPA
+( * type with parameters.) 216 153.33 T
+72 297/G270019 FmPA
+( *) 216 142.33 T
+72 286/G270020 FmPA
+( * @return  the MIME type) 216 131.33 T
+72 275/G270021 FmPA
+( */) 216 120.33 T
+72 264/G265200 FmPA
+(public String getContentType\050\051;) 216 109.33 T
+72 253/G265201 FmPA
+72 242/G264866 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.9/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "9" 9
+%%Page: "10" 10
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 189 739.85 T
+(y Frame) 217.6 739.85 T
+(w) 251.98 739.85 T
+(ork Interfaces) 258.8 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(10) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+7 F
+(/**) 198 681.33 T
+54 825/G265203 FmPA
+( * Get the InputStream for this object. <p>) 198 670.33 T
+54 814/G270029 FmPA
+( *) 198 659.33 T
+54 803/G270030 FmPA
+( * For DataHandlers instantiated with a DataSource, the) 198 648.33 T
+54 792/G270031 FmPA
+(*) 202.8 637.33 T
+(DataHandler) 213 637.33 T
+(calls) 277.2 637.33 T
+(the) 309 637.33 T
+(<code>DataSource.getInputStream</code>) 330 637.33 T
+54 781/G270057 FmPA
+( * method and returns the result to the caller.) 198 626.33 T
+54 770/G270060 FmPA
+( * <p>) 198 615.33 T
+54 759/G270034 FmPA
+(*) 203 604.33 T
+(For) 213.4 604.33 T
+(DataHandlers) 234.6 604.33 T
+(instantiated) 304.4 604.33 T
+(with) 374.2 604.33 T
+(an) 400.8 604.33 T
+(Object,) 416.6 604.33 T
+(the) 459.4 604.33 T
+(DataHandler) 480.6 604.33 T
+54 748/G270035 FmPA
+( * first attempts to find a DataContentHandler for the Object.) 198 593.33 T
+54 737/G270036 FmPA
+(*) 202.65 582.33 T
+(If) 212.7 582.33 T
+(the) 228.15 582.33 T
+(DataHandler) 249 582.33 T
+(can) 313.05 582.33 T
+(not) 333.9 582.33 T
+(find) 354.75 582.33 T
+(a) 381 582.33 T
+(DataContentHandler) 391.05 582.33 T
+(for) 492.9 582.33 T
+(this) 513.75 582.33 T
+54 726/G270063 FmPA
+(*) 203.07 571.33 T
+(MIME) 213.54 571.33 T
+(type,) 240.22 571.33 T
+(it) 272.29 571.33 T
+(throws) 288.16 571.33 T
+(an) 325.64 571.33 T
+(UnsupportedDataTypeException.) 341.51 571.33 T
+(If) 508.25 571.33 T
+(it) 524.13 571.33 T
+54 715/G270066 FmPA
+( * is successful, it creates a pipe and a thread.  The thread) 198 560.33 T
+54 704/G270069 FmPA
+(*) 202.95 549.33 T
+(uses) 213.3 549.33 T
+(the) 239.85 549.33 T
+(DataContentHandler\325s) 261 549.33 T
+(<code>writeTo</code>) 373.95 549.33 T
+(method) 486.9 549.33 T
+(to) 524.25 549.33 T
+54 693/G270072 FmPA
+( * write the stream data into one end of the pipe.  The other) 198 538.33 T
+54 682/G270075 FmPA
+(*) 203.16 527.33 T
+(end) 213.72 527.33 T
+(of) 235.08 527.33 T
+(the) 251.04 527.33 T
+(pipe) 272.4 527.33 T
+(is) 299.16 527.33 T
+(returned) 315.12 527.33 T
+(to) 363.48 527.33 T
+(the) 379.44 527.33 T
+(caller.) 400.8 527.33 T
+(Because) 448.92 527.33 T
+(a) 491.88 527.33 T
+(thread) 502.44 527.33 T
+54 671/G270078 FmPA
+( * is created to copy the data, IOExceptions that may occur) 198 516.33 T
+54 660/G270081 FmPA
+(*) 202.76 505.33 T
+(during) 212.91 505.33 T
+(the) 250.07 505.33 T
+(copy) 271.03 505.33 T
+(can) 297.39 505.33 T
+(not) 318.34 505.33 T
+(be) 339.3 505.33 T
+(propagated) 354.86 505.33 T
+(back) 413.61 505.33 T
+(to) 439.97 505.33 T
+(the) 455.53 505.33 T
+(caller.) 476.48 505.33 T
+(The) 519.04 505.33 T
+54 649/G270084 FmPA
+( * result is an empty stream.<p>) 198 494.33 T
+54 638/G270087 FmPA
+( *) 198 483.33 T
+54 627/G270045 FmPA
+( * @return  the InputStream representing this data) 198 472.33 T
+54 616/G270046 FmPA
+( * @exception IOException   if an I/O error occurs) 198 461.33 T
+54 605/G270047 FmPA
+( *) 198 450.33 T
+54 594/G270048 FmPA
+( * @see javax.activation.DataContentHandler#writeTo) 198 439.33 T
+54 583/G270049 FmPA
+( * @see javax.activation.UnsupportedDataTypeException) 198 428.33 T
+54 572/G270050 FmPA
+( */) 198 417.33 T
+54 561/G267481 FmPA
+(public InputStream getInputStream\050\051 throws IOException;) 198 406.33 T
+54 550/G265208 FmPA
+54 539/G265209 FmPA
+(/**) 198 384.33 T
+54 528/G264867 FmPA
+(*) 203.04 373.33 T
+(Get) 213.48 373.33 T
+(an) 234.72 373.33 T
+(OutputStream) 250.56 373.33 T
+(for) 320.4 373.33 T
+(this) 341.64 373.33 T
+(DataHandler) 368.28 373.33 T
+(to) 432.72 373.33 T
+(allow) 448.56 373.33 T
+(overwriting) 480.6 373.33 T
+54 517/G270114 FmPA
+( * the underlying data.) 198 362.33 T
+54 506/G270115 FmPA
+( * If the DataHandler was created with a DataSource, the) 198 351.33 T
+54 495/G270116 FmPA
+( * DataSource\325s <code>getOutputStream</code> method is called.) 198 340.33 T
+54 484/G270117 FmPA
+( * Otherwise, <code>null</code> is returned.) 198 329.33 T
+54 473/G270118 FmPA
+( *) 198 318.33 T
+54 462/G270119 FmPA
+( * @return the OutputStream) 198 307.33 T
+54 451/G270120 FmPA
+( *) 198 296.33 T
+54 440/G270121 FmPA
+( * @see javax.activation.DataSource#getOutputStream) 198 285.33 T
+54 429/G270122 FmPA
+( * @see javax.activation.URLDataSource) 198 274.33 T
+54 418/G270123 FmPA
+( */) 198 263.33 T
+54 407/G265214 FmPA
+(public OutputStream getOutputStream\050\051 throw IOException;) 198 252.33 T
+54 396/G265215 FmPA
+54 385/G264868 FmPA
+(/**) 198 230.33 T
+54 374/G265221 FmPA
+( * Return the DataFlavors in which this data is available. <p>) 198 219.33 T
+54 363/G270132 FmPA
+( *) 198 208.33 T
+54 352/G270133 FmPA
+(*) 203.04 197.33 T
+(Returns) 213.48 197.33 T
+(an) 256.32 197.33 T
+(array) 272.16 197.33 T
+(of) 304.2 197.33 T
+(DataFlavor) 320.04 197.33 T
+(objects) 379.08 197.33 T
+(indicating) 421.92 197.33 T
+(the) 480.96 197.33 T
+(flavors) 502.2 197.33 T
+54 341/G270134 FmPA
+( * the data can be provided in. The array is usually ordered) 198 186.33 T
+54 330/G270135 FmPA
+( * according to preference for providing the data, from most) 198 175.33 T
+54 319/G270136 FmPA
+( * richly descriptive to least richly descriptive.<p>) 198 164.33 T
+54 308/G270137 FmPA
+( *) 198 153.33 T
+54 297/G270138 FmPA
+( * The DataHandler attempts to find a DataContentHandler that) 198 142.33 T
+54 286/G270139 FmPA
+( * corresponds to the MIME type of the data. If one is located,) 198 131.33 T
+54 275/G270140 FmPA
+( * the DataHandler calls the DataContentHandler\325s) 198 120.33 T
+54 264/G270141 FmPA
+( * <code>getTransferDataFlavors</code> method. <p>) 198 109.33 T
+54 253/G270142 FmPA
+( *) 198 98.33 T
+54 242/G270143 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.10/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "10" 10
+%%Page: "11" 11
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 207 739.85 T
+(y Frame) 235.6 739.85 T
+(w) 269.98 739.85 T
+(ork Interfaces) 276.8 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(11) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+7 9 Q
+(*) 221.07 681.33 T
+(If) 231.54 681.33 T
+(a) 247.42 681.33 T
+(DataContentHandler) 257.89 681.33 T
+(can) 360.16 681.33 T
+(<i>not</i>) 381.44 681.33 T
+(be) 440.51 681.33 T
+(located,) 456.38 681.33 T
+(and) 504.65 681.33 T
+(if) 525.93 681.33 T
+(the) 541.8 681.33 T
+72 825/G270144 FmPA
+( * DataHandler was created with a DataSource \050or URL\051, one) 216 670.33 T
+72 814/G270145 FmPA
+( * DataFlavor is returned that represents this object\325s MIME) 216 659.33 T
+72 803/G270146 FmPA
+( * type and the <code>java.io.InputStream</code> class.  If the) 216 648.33 T
+72 792/G270156 FmPA
+( * DataHandler was created with an object and a MIME type,) 216 637.33 T
+72 781/G270148 FmPA
+(*) 220.89 626.33 T
+(getTransferDataFlavors) 231.17 626.33 T
+(returns) 354.86 626.33 T
+(one) 397.54 626.33 T
+(DataFlavor) 418.63 626.33 T
+(that) 477.51 626.33 T
+(represents) 504 626.33 T
+72 770/G270149 FmPA
+( * this object\325s MIME type and the object\325s class.) 216 615.33 T
+72 759/G270150 FmPA
+( *) 216 604.33 T
+72 748/G270151 FmPA
+( * @return  an array of data flavors in which this data can be) 216 593.33 T
+72 737/G270152 FmPA
+( *          transferred) 216 582.33 T
+72 726/G270159 FmPA
+( *) 216 571.33 T
+72 715/G273125 FmPA
+( * @see) 216 560.33 T
+72 704/G270153 FmPA
+( * javax.activation.DataContentHandler#getTransferDataFlavors) 216 549.33 T
+72 693/G270160 FmPA
+( */) 216 538.33 T
+72 682/G270130 FmPA
+(public synchonized DataFlavor[] getTransferDataFlavors\050\051;) 216 527.33 T
+72 671/G265234 FmPA
+72 660/G265239 FmPA
+(/**) 216 505.33 T
+72 649/G264870 FmPA
+( * Returns whether the specified data flavor is supported) 216 494.33 T
+72 638/G270166 FmPA
+( * for this object.<p>) 216 483.33 T
+72 627/G270167 FmPA
+( *) 216 472.33 T
+72 616/G270168 FmPA
+( * This method iterates through the DataFlavors returned from) 216 461.33 T
+72 605/G270169 FmPA
+( * <code>getTransferDataFlavors</code>, comparing each with) 216 450.33 T
+72 594/G270170 FmPA
+( * the specified flavor.) 216 439.33 T
+72 583/G270171 FmPA
+( *) 216 428.33 T
+72 572/G270172 FmPA
+( * @param flavor    the requested flavor for the data) 216 417.33 T
+72 561/G270173 FmPA
+( * @return          true if the data flavor is supported) 216 406.33 T
+72 550/G270174 FmPA
+( *) 216 395.33 T
+72 539/G273126 FmPA
+( * @see javax.activation.DataHandler#getTransferDataFlavors) 216 384.33 T
+72 528/G270175 FmPA
+( */) 216 373.33 T
+72 517/G265241 FmPA
+(public boolean isDataFlavorSupported\050DataFlavor flavor\051;) 216 362.33 T
+72 506/G265242 FmPA
+72 495/G270223 FmPA
+(/**) 216 340.33 T
+72 484/G270224 FmPA
+( * Returns an object that represents the data to be) 216 329.33 T
+72 473/G270836 FmPA
+( * transferred. The class of the object returned is defined by) 216 318.33 T
+72 462/G270837 FmPA
+( * the representation class of the data flavor.<p>) 216 307.33 T
+72 451/G270850 FmPA
+( *) 216 296.33 T
+72 440/G270839 FmPA
+(*) 220.95 285.33 T
+(<b>For) 231.3 285.33 T
+(DataHandler\325s) 268.65 285.33 T
+(created) 343.8 285.33 T
+(with) 386.55 285.33 T
+(DataSources) 413.1 285.33 T
+(or) 477.45 285.33 T
+(URLs:</b><p>) 493.2 285.33 T
+72 429/G270840 FmPA
+( *) 216 274.33 T
+72 418/G270841 FmPA
+( * The DataHandler attempts to locate a DataContentHandler) 216 263.33 T
+72 407/G270196 FmPA
+(*) 221.12 252.33 T
+(for) 231.65 252.33 T
+(this) 252.97 252.33 T
+(MIME) 279.69 252.33 T
+(type.) 306.42 252.33 T
+(If) 338.54 252.33 T
+(one) 354.46 252.33 T
+(is) 375.78 252.33 T
+(found,) 391.71 252.33 T
+(the) 429.23 252.33 T
+(passed) 450.55 252.33 T
+(in) 488.08 252.33 T
+(DataFlavor) 504 252.33 T
+72 396/G270197 FmPA
+( * and the type of the data are passed to its) 216 241.33 T
+72 385/G270198 FmPA
+(*) 220.27 230.33 T
+(<code>getTransferData</code>) 229.95 230.33 T
+(method.) 385.42 230.33 T
+(If) 427.5 230.33 T
+(the) 442.58 230.33 T
+(DataHandler) 463.05 230.33 T
+(fails) 526.72 230.33 T
+72 374/G270229 FmPA
+(*) 221.07 219.33 T
+(to) 231.54 219.33 T
+(locate) 247.42 219.33 T
+(a) 284.89 219.33 T
+(DataContentHandler) 295.36 219.33 T
+(and) 397.64 219.33 T
+(the) 418.91 219.33 T
+(flavor) 440.18 219.33 T
+(specifies) 477.65 219.33 T
+(this) 531.33 219.33 T
+72 363/G270232 FmPA
+( * object\325s MIME type and the <code>java.io.InputStream</code>) 216 208.33 T
+72 352/G270235 FmPA
+( * class, this object\325s InputStream is returned.) 216 197.33 T
+72 341/G270238 FmPA
+( * Otherwise it throws an UnsupportedFlavorException. <p>) 216 186.33 T
+72 330/G270203 FmPA
+( *) 216 175.33 T
+72 319/G270204 FmPA
+( * <b>For DataHandler\325s created with Objects:</b><p>) 216 164.33 T
+72 308/G270205 FmPA
+( *) 216 153.33 T
+72 297/G270206 FmPA
+( * The DataHandler attempts to locate a DataContentHandler) 216 142.33 T
+72 286/G270207 FmPA
+(*) 221.12 131.33 T
+(for) 231.65 131.33 T
+(this) 252.97 131.33 T
+(MIME) 279.69 131.33 T
+(type.) 306.42 131.33 T
+(If) 338.54 131.33 T
+(one) 354.46 131.33 T
+(is) 375.78 131.33 T
+(found,) 391.71 131.33 T
+(the) 429.23 131.33 T
+(passed) 450.55 131.33 T
+(in) 488.08 131.33 T
+(DataFlavor) 504 131.33 T
+72 275/G270208 FmPA
+( * and the type of the data are passed to its getTransferData) 216 120.33 T
+72 264/G270209 FmPA
+( * method. If the DataHandler fails to locate a) 216 109.33 T
+72 253/G270210 FmPA
+( * DataContentHandler and the flavor specifies this object\325s) 216 98.33 T
+72 242/G270255 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.11/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "11" 11
+%%Page: "12" 12
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 189 739.85 T
+(y Frame) 217.6 739.85 T
+(w) 251.98 739.85 T
+(ork Interfaces) 258.8 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(12) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+7 F
+(*) 202.58 681.33 T
+(MIME) 212.56 681.33 T
+(type) 238.74 681.33 T
+(and) 264.93 681.33 T
+(its) 285.71 681.33 T
+(class,) 306.49 681.33 T
+(this) 343.47 681.33 T
+(DataHandler\325s) 369.65 681.33 T
+(referenced) 444.44 681.33 T
+(object) 503.02 681.33 T
+54 825/G270258 FmPA
+( * is returned. Otherwise it throws an) 198 670.33 T
+54 814/G270261 FmPA
+( * UnsupportedFlavorException.) 198 659.33 T
+54 803/G270264 FmPA
+( *) 198 648.33 T
+54 792/G270214 FmPA
+( * @param flavor    the requested flavor for the data) 198 637.33 T
+54 781/G270215 FmPA
+( * @return          the object) 198 626.33 T
+54 770/G270216 FmPA
+( * @exception UnsupportedFlavorException    if the data could) 198 615.33 T
+54 759/G270273 FmPA
+( *                  not be converted to the requested flavor) 198 604.33 T
+54 748/G270283 FmPA
+( * @exception IOException   if an I/O error occurs) 198 593.33 T
+54 737/G270275 FmPA
+( *) 198 582.33 T
+54 726/G273127 FmPA
+( * @see javax.activation.ActivationDataFlavor) 198 571.33 T
+54 715/G270276 FmPA
+( */) 198 560.33 T
+54 704/G270277 FmPA
+(public Object getTransferData\050DataFlavor flavor\051 throws) 198 549.33 T
+54 693/G265244 FmPA
+(                    UnSupportedFlavorException, IOException;) 198 538.33 T
+54 682/G267495 FmPA
+54 671/G270189 FmPA
+(/**) 198 516.33 T
+54 660/G265250 FmPA
+( * Set the CommandMap for use by this DataHandler.) 198 505.33 T
+54 649/G270299 FmPA
+( * Setting it to <code>null</code> causes the CommandMap to) 198 494.33 T
+54 638/G270300 FmPA
+( * revert to the CommandMap returned by the) 198 483.33 T
+54 627/G270313 FmPA
+( * <code>CommandMap.getDefaultCommandMap</code> method.) 198 472.33 T
+54 616/G270302 FmPA
+( * Changing the CommandMap, or setting it to <code>null</code>,) 198 461.33 T
+54 605/G270303 FmPA
+( * clears out any data cached from the previous CommandMap.) 198 450.33 T
+54 594/G270304 FmPA
+( *) 198 439.33 T
+54 583/G270305 FmPA
+( * @param commandMap        the CommandMap to use in this) 198 428.33 T
+54 572/G270306 FmPA
+( *                          DataHandler) 198 417.33 T
+54 561/G270326 FmPA
+( *) 198 406.33 T
+54 550/G270307 FmPA
+( * @see javax.activation.CommandMap#setDefaultCommandMap) 198 395.33 T
+54 539/G270308 FmPA
+( */) 198 384.33 T
+54 528/G265251 FmPA
+(public synchronized void setCommandMap\050CommandMap commandmap\051;) 198 373.33 T
+54 517/G265255 FmPA
+54 506/G266965 FmPA
+(/**) 198 351.33 T
+54 495/G266966 FmPA
+( * Sets the DataContentHandlerFactory.  The) 198 340.33 T
+54 484/G270600 FmPA
+( * DataContentHandlerFactory is called first to find) 198 329.33 T
+54 473/G270615 FmPA
+(*) 202.95 318.33 T
+(DataContentHandlers.) 213.3 318.33 T
+(The) 331.2 318.33 T
+(DataContentHandlerFactory) 352.35 318.33 T
+(can) 492.3 318.33 T
+(only) 513.45 318.33 T
+54 462/G270618 FmPA
+( * be set once.) 198 307.33 T
+54 451/G270621 FmPA
+( * <p>) 198 296.33 T
+54 440/G270603 FmPA
+( * If the DataContentHandlerFactory has already been set,) 198 285.33 T
+54 429/G270604 FmPA
+( * this method throws an Error.) 198 274.33 T
+54 418/G270605 FmPA
+( *) 198 263.33 T
+54 407/G270606 FmPA
+( * @param factory   the DataContentHandlerFactory) 198 252.33 T
+54 396/G270607 FmPA
+( * @exception Error if the factory has already been defined.) 198 241.33 T
+54 385/G270608 FmPA
+( *) 198 230.33 T
+54 374/G270609 FmPA
+( * @see javax.activation.DataContentHandlerFactory) 198 219.33 T
+54 363/G266967 FmPA
+( */) 198 208.33 T
+54 352/G266975 FmPA
+(public static synchronized void setDataContentHandlerFactory\050) 198 197.33 T
+54 341/G266976 FmPA
+(DataContentHandlerFactory) 334.93 186.33 T
+(newFactory\051;) 475.2 186.33 T
+54 330/G266977 FmPA
+54 319/G264872 FmPA
+(/**) 198 164.33 T
+54 308/G267616 FmPA
+( * Write the data to an <code>OutputStream</code>.<p>) 198 153.33 T
+54 297/G270091 FmPA
+( *) 198 142.33 T
+54 286/G270092 FmPA
+( * If the DataHandler was created with a DataSource, writeTo) 198 131.33 T
+54 275/G270093 FmPA
+( * retrieves the InputStream and copies the bytes from the) 198 120.33 T
+54 264/G270094 FmPA
+( * InputStream to the OutputStream passed in.) 198 109.33 T
+54 253/G270095 FmPA
+( * <p>) 198 98.33 T
+54 242/G270096 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.12/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "12" 12
+%%Page: "13" 13
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 207 739.85 T
+(y Frame) 235.6 739.85 T
+(w) 269.98 739.85 T
+(ork Interfaces) 276.8 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(13) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+7 9 Q
+( * If the DataHandler was created with an object, writeTo) 216 681.33 T
+72 825/G270097 FmPA
+( * retrieves the DataContentHandler for the object\325s type.) 216 670.33 T
+72 814/G270098 FmPA
+( * If the DataContentHandler was found, it calls the) 216 659.33 T
+72 803/G270099 FmPA
+( * <code>writeTo</code> method on the) 216 648.33 T
+72 792/G270100 FmPA
+( * <code>DataContentHandler</code>.) 216 637.33 T
+72 781/G270106 FmPA
+( *) 216 626.33 T
+72 770/G270101 FmPA
+( * @param os        the OutputStream to write to) 216 615.33 T
+72 759/G270102 FmPA
+( * @exception IOException   if an I/O error occurs) 216 604.33 T
+72 748/G270103 FmPA
+( */) 216 593.33 T
+72 737/G267641 FmPA
+(public void writeTo\050OutputStream os\051 throws IOException;) 216 582.33 T
+72 726/G266981 FmPA
+72 715/G266982 FmPA
+(/**) 216 560.33 T
+72 704/G266983 FmPA
+( * Return the data in its preferred Object form. <p>) 216 549.33 T
+72 693/G270454 FmPA
+( *) 216 538.33 T
+72 682/G270455 FmPA
+( * If the DataHandler was instantiated with an object, return) 216 527.33 T
+72 671/G270456 FmPA
+( * the object. <p>) 216 516.33 T
+72 660/G270457 FmPA
+( *) 216 505.33 T
+72 649/G270458 FmPA
+( * If the DataHandler was instantiated with a DataSource,) 216 494.33 T
+72 638/G270459 FmPA
+( * this method uses a DataContentHandler to return the content) 216 483.33 T
+72 627/G270460 FmPA
+( * object for the data represented by this DataHandler. If no) 216 472.33 T
+72 616/G270461 FmPA
+( * <code>DataContentHandler</code> can be found for the) 216 461.33 T
+72 605/G270462 FmPA
+( * the type of this data, the DataHandler returns an) 216 450.33 T
+72 594/G270463 FmPA
+( * InputStream for the data.) 216 439.33 T
+72 583/G270464 FmPA
+( *) 216 428.33 T
+72 572/G270465 FmPA
+( * @return the content.) 216 417.33 T
+72 561/G270466 FmPA
+( * @exception IOException if an IOException occurs during) 216 406.33 T
+72 550/G270467 FmPA
+( *                              this operation.) 216 395.33 T
+72 539/G270468 FmPA
+( */) 216 384.33 T
+72 528/G266985 FmPA
+(public Object getContent\050\051 throws IOException;) 216 373.33 T
+72 517/G266986 FmPA
+72 506/G266987 FmPA
+(/**) 216 351.33 T
+72 495/G265574 FmPA
+( * Return the <i>preferred</i> commands for this type of data.) 216 340.33 T
+72 484/G270336 FmPA
+( * This method calls the <code>getPreferredCommands</code>) 216 329.33 T
+72 473/G270337 FmPA
+( * method in the CommandMap associated with this instance of) 216 318.33 T
+72 462/G270351 FmPA
+(*) 221.1 307.33 T
+(DataHandler.) 231.6 307.33 T
+(This) 306.6 307.33 T
+(method) 333.3 307.33 T
+(returns) 370.8 307.33 T
+(an) 413.7 307.33 T
+(array) 429.6 307.33 T
+(that) 461.7 307.33 T
+(represents) 488.4 307.33 T
+(a) 547.5 307.33 T
+72 451/G270354 FmPA
+( * subset of available commands. In cases where multiple) 216 296.33 T
+72 440/G270357 FmPA
+( * commands for the MIME type represented by this DataHandler) 216 285.33 T
+72 429/G270360 FmPA
+( * are present, the) 216 274.33 T
+72 418/G270363 FmPA
+( * installed CommandMap chooses the appropriate commands.) 216 263.33 T
+72 407/G270342 FmPA
+( *) 216 252.33 T
+72 396/G270343 FmPA
+( * @return  the CommandInfo objects representing the preferred) 216 241.33 T
+72 385/G270344 FmPA
+( * commands) 216 230.33 T
+72 374/G270370 FmPA
+( *) 216 219.33 T
+72 363/G270345 FmPA
+( * @see javax.activation.CommandMap#getPreferredCommands) 216 208.33 T
+72 352/G270346 FmPA
+( */) 216 197.33 T
+72 341/G265256 FmPA
+(public CommandInfo[] getPreferredCommands\050\051;) 216 186.33 T
+72 330/G265266 FmPA
+72 319/G266964 FmPA
+(/**) 216 164.33 T
+72 308/G265270 FmPA
+( * Return all the commands for this type of data.) 216 153.33 T
+72 297/G265271 FmPA
+( * This method returns an array containing all commands) 216 142.33 T
+72 286/G270381 FmPA
+( * for the type of data represented by this DataHandler. The) 216 131.33 T
+72 275/G270382 FmPA
+( * MIME type for the underlying data represented by this) 216 120.33 T
+72 264/G270383 FmPA
+( * DataHandler is used to call through to the) 216 109.33 T
+72 253/G270402 FmPA
+( * <code>getAllCommands</code> method of the CommandMap) 216 98.33 T
+72 242/G270405 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.13/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "13" 13
+%%Page: "14" 14
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 189 739.85 T
+(y Frame) 217.6 739.85 T
+(w) 251.98 739.85 T
+(ork Interfaces) 258.8 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(14) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+7 F
+( * associated with this DataHandler.) 198 681.33 T
+54 825/G270408 FmPA
+( *) 198 670.33 T
+54 814/G270386 FmPA
+( * @return  the CommandInfo objects representing all the) 198 659.33 T
+54 803/G270387 FmPA
+( * commands) 198 648.33 T
+54 792/G270413 FmPA
+( *) 198 637.33 T
+54 781/G270388 FmPA
+( * @see javax.activation.CommandMap#getAllCommands) 198 626.33 T
+54 770/G270389 FmPA
+( */) 198 615.33 T
+54 759/G267655 FmPA
+(public CommandInfo[] getAllCommands\050\051;) 198 604.33 T
+54 748/G266590 FmPA
+54 737/G264874 FmPA
+(/**) 198 582.33 T
+54 726/G265280 FmPA
+( * Get the command <i>cmdName</i>. Use the search semantics as) 198 571.33 T
+54 715/G270421 FmPA
+( * defined by the CommandMap installed in this DataHandler. The) 198 560.33 T
+54 704/G270422 FmPA
+( * MIME type for the underlying data represented by this) 198 549.33 T
+54 693/G270423 FmPA
+( * DataHandler is used to call through to the) 198 538.33 T
+54 682/G270436 FmPA
+( * <code>getCommand</code> method of the CommandMap associated) 198 527.33 T
+54 671/G270439 FmPA
+( * with this DataHandler.) 198 516.33 T
+54 660/G270442 FmPA
+( *) 198 505.33 T
+54 649/G270426 FmPA
+( * @param cmdName    the command name) 198 494.33 T
+54 638/G272862 FmPA
+( * @return  the CommandInfo corresponding to the command) 198 483.33 T
+54 627/G270427 FmPA
+( *) 198 472.33 T
+54 616/G270428 FmPA
+( * @see javax.activation.CommandMap#getCommand) 198 461.33 T
+54 605/G270429 FmPA
+( */) 198 450.33 T
+54 594/G265281 FmPA
+(public CommandInfo getCommand\050String cmdName\051;) 198 439.33 T
+54 583/G265288 FmPA
+54 572/G264875 FmPA
+(/**) 198 417.33 T
+54 561/G265290 FmPA
+( * A convenience method that takes a CommandInfo object) 198 406.33 T
+54 550/G270504 FmPA
+( * and instantiates the corresponding command, usually) 198 395.33 T
+54 539/G270505 FmPA
+( * a JavaBeans component.) 198 384.33 T
+54 528/G270506 FmPA
+( * <p>) 198 373.33 T
+54 517/G270507 FmPA
+( * This method calls the CommandInfo\325s) 198 362.33 T
+54 506/G270508 FmPA
+( * <code>getCommandObject</code>) 198 351.33 T
+54 495/G270523 FmPA
+( * method with the <code>ClassLoader</code> used to load) 198 340.33 T
+54 484/G270509 FmPA
+( * the <code>javax.activation.DataHandler</code> class itself.) 198 329.33 T
+54 473/G270510 FmPA
+( *) 198 318.33 T
+54 462/G270511 FmPA
+( * @param cmdinfo the CommandInfo corresponding to a command) 198 307.33 T
+54 451/G272865 FmPA
+( * @return  the instantiated command object) 198 296.33 T
+54 440/G270512 FmPA
+( */) 198 285.33 T
+54 429/G265294 FmPA
+(public Object getBean\050CommandInfo cmdinfo\051;) 198 274.33 T
+54 418/G265301 FmPA
+(}) 198 263.33 T
+54 407/G265580 FmPA
+0 10 Q
+(6.3) 166.1 233.66 T
+(The DataContentHandler Interface) 189 233.66 T
+54 378/G264876 FmPA
+1 F
+(The) 189 209.66 T
+(DataContentHandler) 207.61 209.66 T
+(interf) 293.43 209.66 T
+(ace) 314.99 209.66 T
+(is) 331.37 209.66 T
+(used) 341.1 209.66 T
+(to) 362.49 209.66 T
+(write) 373.33 209.66 T
+(objects) 396.95 209.66 T
+(used) 428.34 209.66 T
+(by) 449.73 209.66 T
+(the) 462.79 209.66 T
+(DataHandler) 478.07 209.66 T
+(to) 532.22 209.66 T
+54 354/G264877 FmPA
+(con) 189 197.66 T
+(v) 203.04 197.66 T
+(ert) 207.89 197.66 T
+(InputStreams) 226.35 197.66 T
+(into) 287.59 197.66 T
+(objects.) 311.06 197.66 T
+(In) 349.8 197.66 T
+(ef) 366.04 197.66 T
+(fect,) 373.55 197.66 T
+(the) 398.95 197.66 T
+(DataHandler) 419.08 197.66 T
+(object) 478.08 197.66 T
+(uses) 510.43 197.66 T
+(a) 535.56 197.66 T
+(DataContentHandler) 189 185.66 T
+(object) 287.34 185.66 T
+(to) 327.35 185.66 T
+(implement) 350.71 185.66 T
+(the) 409.07 185.66 T
+(T) 436.86 185.66 T
+(ransferable) 442.62 185.66 T
+(interf) 502.62 185.66 T
+(ace.) 524.18 185.66 T
+(DataContentHandlers) 189 173.66 T
+(are) 288.03 173.66 T
+(disco) 312.61 173.66 T
+(v) 333.57 173.66 T
+(ered) 338.42 173.66 T
+(via) 368.01 173.66 T
+(the) 392.61 173.66 T
+(current) 417.21 173.66 T
+(CommandMap.) 457.9 173.66 T
+(A) 532.78 173.66 T
+(DataContentHandler uses DataFla) 189 161.66 T
+(v) 325.44 161.66 T
+(ors to represent the data types it can access.) 330.24 161.66 T
+(The) 189 137.66 T
+(DataContentHandler) 210.52 137.66 T
+(also) 299.24 137.66 T
+(con) 321.32 137.66 T
+(v) 335.36 137.66 T
+(erts) 340.21 137.66 T
+(data) 360.61 137.66 T
+(from) 383.24 137.66 T
+(objects) 408.64 137.66 T
+(into) 442.94 137.66 T
+(InputStreams.) 464.46 137.66 T
+(F) 526.26 137.66 T
+(or) 531.67 137.66 T
+54 282/G268317 FmPA
+(instance,) 189 125.66 T
+(if) 227.51 125.66 T
+(an) 236.87 125.66 T
+(application) 249.55 125.66 T
+(needs) 297.23 125.66 T
+(to) 323.24 125.66 T
+(access) 334.27 125.66 T
+(a) 363.05 125.66 T
+(.gif) 370.73 125.66 T
+(\336le,) 387.58 125.66 T
+(it) 406.11 125.66 T
+(passes) 414.91 125.66 T
+(the) 443.7 125.66 T
+(\336le) 459.16 125.66 T
+(to) 475.18 125.66 T
+(the) 486.21 125.66 T
+(image/gif) 501.67 125.66 T
+(DataContentHandler) 189 113.66 T
+(.) 271.21 113.66 T
+(The) 276.26 113.66 T
+(.gif) 294.36 113.66 T
+(DataContentHandler) 310.52 113.66 T
+(con) 395.83 113.66 T
+(v) 409.87 113.66 T
+(erts) 414.72 113.66 T
+(the) 431.71 113.66 T
+(image) 446.48 113.66 T
+(object) 473.47 113.66 T
+(into) 500.46 113.66 T
+(a) 518.57 113.66 T
+(gif-) 525.56 113.66 T
+(formatted byte stream.) 189 101.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.14/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "14" 14
+%%Page: "15" 15
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 207 739.85 T
+(y Frame) 235.6 739.85 T
+(w) 269.98 739.85 T
+(ork Interfaces) 276.8 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(15) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+7 9 Q
+(public interface DataContentHandler {) 216 681.33 T
+72 825/G265303 FmPA
+(/**) 216 670.33 T
+72 814/G265304 FmPA
+(*) 220.58 659.33 T
+(Returns) 230.56 659.33 T
+(an) 272.95 659.33 T
+(array) 288.33 659.33 T
+(of) 319.91 659.33 T
+(DataFlavor) 335.29 659.33 T
+(objects) 393.87 659.33 T
+(indicating) 436.25 659.33 T
+(the) 494.84 659.33 T
+(flavors) 515.62 659.33 T
+72 803/G270867 FmPA
+( * the data can be provided in. The array should be ordered) 216 648.33 T
+72 792/G270875 FmPA
+( * according to preference for providing the data \050from most) 216 637.33 T
+72 781/G270878 FmPA
+( * richly descriptive to least descriptive\051.) 216 626.33 T
+72 770/G270883 FmPA
+( *) 216 615.33 T
+72 759/G270871 FmPA
+( * @return The DataFlavors.) 216 604.33 T
+72 748/G270872 FmPA
+( */) 216 593.33 T
+72 737/G265306 FmPA
+(public DataFlavor[] getTransferDataFlavors\050\051;) 216 582.33 T
+72 726/G265307 FmPA
+72 715/G265308 FmPA
+(/**) 216 560.33 T
+72 704/G265309 FmPA
+( * Returns an object which represents the data to be) 216 549.33 T
+72 693/G270896 FmPA
+( * transferred. The class of the object returned is defined by) 216 538.33 T
+72 682/G270907 FmPA
+( * the representation class of the flavor.) 216 527.33 T
+72 671/G270910 FmPA
+( *) 216 516.33 T
+72 660/G270899 FmPA
+( * @param df The DataFlavor representing the requested type.) 216 505.33 T
+72 649/G270900 FmPA
+( * @param ds The DataSource representing the data to be) 216 494.33 T
+72 638/G270901 FmPA
+( *           converted.) 216 483.33 T
+72 627/G270919 FmPA
+( * @return The constructed Object.) 216 472.33 T
+72 616/G270902 FmPA
+( */) 216 461.33 T
+72 605/G270894 FmPA
+(public Object getTransferData\050DataFlavor df, DataSource ds\051) 216 450.33 T
+72 594/G265316 FmPA
+(throws) 288.24 439.33 T
+(UnsupportedDataFlavorException,IOException;) 325.8 439.33 T
+72 583/G272782 FmPA
+72 572/G265317 FmPA
+(/**) 216 417.33 T
+72 561/G265324 FmPA
+(*) 221.1 406.33 T
+(Return) 231.6 406.33 T
+(an) 269.1 406.33 T
+(object) 285 406.33 T
+(representing) 322.5 406.33 T
+(the) 392.4 406.33 T
+(data) 413.7 406.33 T
+(in) 440.4 406.33 T
+(its) 456.3 406.33 T
+(most) 477.6 406.33 T
+(preferred) 504.3 406.33 T
+72 550/G270925 FmPA
+(*) 221.12 395.33 T
+(form.) 231.65 395.33 T
+(Generally) 263.77 395.33 T
+(this) 317.49 395.33 T
+(will) 344.21 395.33 T
+(be) 370.94 395.33 T
+(the) 386.86 395.33 T
+(form) 408.18 395.33 T
+(described) 434.91 395.33 T
+(by) 488.63 395.33 T
+(the) 504.55 395.33 T
+(first) 525.88 395.33 T
+72 539/G270932 FmPA
+( * DataFlavor returned by the) 216 384.33 T
+72 528/G270935 FmPA
+( * <code>getTransferDataFlavors</code> method.) 216 373.33 T
+72 517/G270938 FmPA
+( *) 216 362.33 T
+72 506/G272874 FmPA
+( * @param ds The DataSource representing the data to be) 216 351.33 T
+72 495/G272875 FmPA
+( *           converted.) 216 340.33 T
+72 484/G272887 FmPA
+( * @return The constructed Object.) 216 329.33 T
+72 473/G272876 FmPA
+( */) 216 318.33 T
+72 462/G266991 FmPA
+(public Object getContent\050DataSource ds\051 throws IOException;) 216 307.33 T
+72 451/G266992 FmPA
+72 440/G265325 FmPA
+(/**) 216 285.33 T
+72 429/G265581 FmPA
+( * Convert the object to a byte stream of the specified MIME) 216 274.33 T
+72 418/G270942 FmPA
+( * type and write it to the output stream.) 216 263.33 T
+72 407/G270948 FmPA
+( *) 216 252.33 T
+72 396/G272894 FmPA
+( * @param obj      The object to be converted.) 216 241.33 T
+72 385/G272895 FmPA
+(*) 221.07 230.33 T
+(@param) 231.54 230.33 T
+(mimeType) 269.02 230.33 T
+(The) 317.29 230.33 T
+(requested) 338.56 230.33 T
+(MIME) 392.24 230.33 T
+(type) 418.91 230.33 T
+(of) 445.58 230.33 T
+(the) 461.45 230.33 T
+(resulting) 482.73 230.33 T
+(byte) 536.4 230.33 T
+72 374/G272896 FmPA
+( *                 stream.) 216 219.33 T
+72 363/G272907 FmPA
+( * @param os       The output stream into which to write the) 216 208.33 T
+72 352/G272897 FmPA
+( *                 converted byte stream.) 216 197.33 T
+72 341/G272910 FmPA
+( */) 216 186.33 T
+72 330/G265331 FmPA
+(public void writeTo\050Object obj,String  mimeType,) 216 175.33 T
+72 319/G265332 FmPA
+(                    OutputStream os\051  throws IOException;) 216 164.33 T
+72 308/G272791 FmPA
+(}) 216 153.33 T
+72 297/G264880 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.15/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "15" 15
+%%Page: "16" 16
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 189 739.85 T
+(y Frame) 217.6 739.85 T
+(w) 251.98 739.85 T
+(ork Interfaces) 258.8 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(16) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+0 10 Q
+(6.4) 166.1 680.66 T
+( The CommandMap Interface) 189 680.66 T
+54 825/G264881 FmPA
+1 F
+(Once) 189 656.66 T
+(the) 214.84 656.66 T
+(DataHandler) 231.8 656.66 T
+(has) 287.62 656.66 T
+(a) 305.69 656.66 T
+(MIME) 314.87 656.66 T
+(T) 346.83 656.66 T
+(ype) 352.14 656.66 T
+(describing) 371.32 656.66 T
+(the) 417.72 656.66 T
+(content,) 434.68 656.66 T
+(it) 471.35 656.66 T
+(can) 481.65 656.66 T
+(query) 500.27 656.66 T
+(the) 527.78 656.66 T
+54 801/G264882 FmPA
+(CommandMap) 189 644.66 T
+(for) 251.34 644.66 T
+(the) 265.34 644.66 T
+(operations,) 279.9 644.66 T
+(or) 326.4 644.66 T
+2 F
+(commands) 337.07 644.66 T
+1 F
+(that) 382.17 644.66 T
+(are) 399.52 644.66 T
+(a) 414.06 644.66 T
+(v) 418.3 644.66 T
+(ailable) 423.05 644.66 T
+(for) 452.05 644.66 T
+(that) 466.05 644.66 T
+(data) 483.39 644.66 T
+(type.) 502.39 644.66 T
+(The) 524.45 644.66 T
+(application) 189 632.66 T
+(requests) 238.67 632.66 T
+(commands) 276.67 632.66 T
+(a) 325.23 632.66 T
+(v) 329.47 632.66 T
+(ailable) 334.22 632.66 T
+(through) 366.11 632.66 T
+(the) 402.45 632.66 T
+(DataHandler) 419.9 632.66 T
+(and) 476.22 632.66 T
+(speci\336es) 495.89 632.66 T
+(a) 535.56 632.66 T
+(command) 189 620.66 T
+(on) 232.2 620.66 T
+(that) 245.95 620.66 T
+(list.) 264.7 620.66 T
+(The) 283.19 620.66 T
+(DataHandler) 302.49 620.66 T
+(uses) 357.34 620.66 T
+(the) 378.32 620.66 T
+(CommandMap) 394.29 620.66 T
+(to) 458.05 620.66 T
+(retrie) 469.58 620.66 T
+(v) 490.43 620.66 T
+(e) 495.28 620.66 T
+(the) 503.48 620.66 T
+(Bean) 519.45 620.66 T
+(associated) 189 608.66 T
+(with) 234.16 608.66 T
+(that) 256 608.66 T
+(command.) 275.06 608.66 T
+(Some) 321.07 608.66 T
+(or) 347.91 608.66 T
+(all) 360.3 608.66 T
+(of) 374.36 608.66 T
+(the) 386.75 608.66 T
+(command) 403.03 608.66 T
+(map) 446.53 608.66 T
+(is) 467.82 608.66 T
+(stored) 478.55 608.66 T
+(in) 507.05 608.66 T
+(some) 518.89 608.66 T
+(\324common\325) 189 596.66 T
+(place,) 233.12 596.66 T
+(lik) 259.19 596.66 T
+(e) 269.65 596.66 T
+(a) 276.56 596.66 T
+(.mailcap) 283.46 596.66 T
+(\050RFC) 320.09 596.66 T
+(1524\051) 344.78 596.66 T
+(\336le.) 370.58 596.66 T
+(Other) 388.32 596.66 T
+(more) 413.56 596.66 T
+(comple) 436.57 596.66 T
+(x) 465.86 596.66 T
+(implementations) 473.33 596.66 T
+(can be distrib) 189 584.66 T
+(uted, or can pro) 242.68 584.66 T
+(vide licensing or authentication features.) 305.29 584.66 T
+7 9 Q
+(public abstract class CommandMap {) 198 567.33 T
+54 711/G264884 FmPA
+( /**) 198 556.33 T
+54 700/G265338 FmPA
+( * Get the default CommandMap.) 198 545.33 T
+54 689/G270954 FmPA
+(*) 202.65 534.33 T
+(<li>) 212.7 534.33 T
+(In) 238.95 534.33 T
+(cases) 254.4 534.33 T
+(where) 286.05 534.33 T
+(a) 317.7 534.33 T
+(CommandMap) 327.75 534.33 T
+(instance) 386.4 534.33 T
+(has) 434.25 534.33 T
+(been) 455.1 534.33 T
+(previously) 481.35 534.33 T
+54 678/G270958 FmPA
+( * set to some value \050via <i>setDefaultCommandMap</i>\051) 198 523.33 T
+54 667/G270979 FmPA
+( *  return the CommandMap.) 198 512.33 T
+54 656/G270960 FmPA
+( * <li>) 198 501.33 T
+54 645/G270961 FmPA
+( *  In cases where no CommandMap has been set, the CommandMap) 198 490.33 T
+54 634/G270962 FmPA
+( *  creates an instance of <code>MailcapCommandMap</code> and) 198 479.33 T
+54 623/G270963 FmPA
+( * set that to the default, returning its value.) 198 468.33 T
+54 612/G270964 FmPA
+( *) 198 457.33 T
+54 601/G270967 FmPA
+( * @return the CommandMap) 198 446.33 T
+54 590/G270968 FmPA
+( */) 198 435.33 T
+54 579/G265340 FmPA
+( public static CommandMap getDefaultCommandMap\050\051;) 198 424.33 T
+54 568/G265341 FmPA
+54 557/G265795 FmPA
+(/**) 198 402.33 T
+54 546/G265796 FmPA
+( * Set the default CommandMap. Reset the CommandMap to the) 198 391.33 T
+54 535/G271003 FmPA
+( * default by calling this method with <code>null</code>.) 198 380.33 T
+54 524/G271011 FmPA
+( *) 198 369.33 T
+54 513/G271005 FmPA
+( * @param commandMap The new default CommandMap.) 198 358.33 T
+54 502/G271006 FmPA
+( * @exception SecurityException if the caller doesn\325t have) 198 347.33 T
+54 491/G271007 FmPA
+( *            permission to change the default) 198 336.33 T
+54 480/G271020 FmPA
+( */) 198 325.33 T
+54 469/G265797 FmPA
+(public static void setDefaultCommandMap\050CommandMap commandMap\051;) 198 314.33 T
+54 458/G265801 FmPA
+54 447/G265802 FmPA
+(/**) 198 292.33 T
+54 436/G265343 FmPA
+( * Get the preferred command list from a MIME Type. The actual) 198 281.33 T
+54 425/G271029 FmPA
+( * semantics) 198 270.33 T
+54 414/G271037 FmPA
+( * are determined by the implementation of the CommandMap.) 198 259.33 T
+54 403/G271030 FmPA
+( *) 198 248.33 T
+54 392/G271031 FmPA
+( * @param mimeType    the MIME type) 198 237.33 T
+54 381/G272837 FmPA
+( * @return the CommandInfo classes that represent the command) 198 226.33 T
+54 370/G271032 FmPA
+( *         Beans.) 198 215.33 T
+54 359/G271044 FmPA
+( */) 198 204.33 T
+54 348/G265353 FmPA
+( abstract public CommandInfo[] getPreferredCommands\050String) 198 193.33 T
+54 337/G265357 FmPA
+(mimeType\051;) 486 182.33 T
+54 326/G265803 FmPA
+(/**) 198 171.33 T
+54 315/G264886 FmPA
+( * Get all the available commands for this type. This method) 198 160.33 T
+54 304/G271048 FmPA
+( * should return all the possible commands for this MIME type.) 198 149.33 T
+54 293/G271049 FmPA
+( *) 198 138.33 T
+54 282/G271050 FmPA
+( * @param mimeType    the MIME type) 198 127.33 T
+54 271/G272838 FmPA
+( * @return the CommandInfo objects representing all the) 198 116.33 T
+54 260/G271051 FmPA
+( *         commands.) 198 105.33 T
+54 249/G271064 FmPA
+( */) 198 94.33 T
+54 238/G265364 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.16/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "16" 16
+%%Page: "17" 17
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 207 739.85 T
+(y Frame) 235.6 739.85 T
+(w) 269.98 739.85 T
+(ork Interfaces) 276.8 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(17) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+7 9 Q
+( abstract public CommandInfo[] getAllCommands\050String mimeType\051;) 216 681.33 T
+72 825/G265365 FmPA
+72 814/G264887 FmPA
+(/**) 216 659.33 T
+72 803/G265367 FmPA
+( * Get the default command corresponding to the MIME type.) 216 648.33 T
+72 792/G271075 FmPA
+( *) 216 637.33 T
+72 781/G271076 FmPA
+( * @param mimeType    the MIME type) 216 626.33 T
+72 770/G272841 FmPA
+( * @param cmdName     the command name) 216 615.33 T
+72 759/G272842 FmPA
+( * @return the CommandInfo corresponding to the command.) 216 604.33 T
+72 748/G271077 FmPA
+( */) 216 593.33 T
+72 737/G265373 FmPA
+(abstract public CommandInfo getCommand\050String mimeType,) 216 582.33 T
+72 726/G265374 FmPA
+(                                           String cmdName\051;) 216 571.33 T
+72 715/G265804 FmPA
+72 704/G271088 FmPA
+(/**) 216 549.33 T
+72 693/G271091 FmPA
+( * Locate a DataContentHandler that corresponds to the MIME) 216 538.33 T
+72 682/G271092 FmPA
+( * type.  The mechanism and semantics for determining this are) 216 527.33 T
+72 671/G271102 FmPA
+( * determined by the implementation of the particular) 216 516.33 T
+72 660/G271105 FmPA
+( * CommandMap.) 216 505.33 T
+72 649/G271108 FmPA
+( *) 216 494.33 T
+72 638/G272845 FmPA
+( * @param mimeType        the MIME type) 216 483.33 T
+72 627/G272846 FmPA
+( * @return the DataContentHandler for the MIME type) 216 472.33 T
+72 616/G272847 FmPA
+( */) 216 461.33 T
+72 605/G271095 FmPA
+(abstract public DataContentHandler) 216 450.33 T
+72 594/G271096 FmPA
+(                createDataContentHandler\050String mimeType\051;) 216 439.33 T
+72 583/G271113 FmPA
+(}) 216 428.33 T
+72 572/G264888 FmPA
+0 10 Q
+(6.5) 184.1 398.66 T
+(The CommandInf) 207 398.66 T
+(o Class) 288.47 398.66 T
+72 543/G264889 FmPA
+1 F
+(The) 207 382.66 T
+(CommandInfo) 224.89 382.66 T
+(class) 285.57 382.66 T
+(is) 307.35 382.66 T
+(used) 316.36 382.66 T
+(to) 337.03 382.66 T
+(represent) 347.15 382.66 T
+(commands) 386.15 382.66 T
+(in) 431.82 382.66 T
+(an) 441.94 382.66 T
+(underlying) 453.72 382.66 T
+(re) 499.39 382.66 T
+(gistry) 507.02 382.66 T
+(.) 529.15 382.66 T
+(From) 533.99 382.66 T
+72 527/G269356 FmPA
+(a CommandInfo object, an application can instantiate the Bean or request the v) 207 370.66 T
+(erb) 522.63 370.66 T
+(\050) 207 358.66 T
+2 F
+(command) 210.33 358.66 T
+1 F
+(\051 it describes.) 249.21 358.66 T
+7 9 Q
+(public class CommandInfo {) 216 341.33 T
+72 485/G267860 FmPA
+(/**) 216 330.33 T
+72 474/G270654 FmPA
+( * The Constructor for CommandInfo.) 216 319.33 T
+72 463/G270646 FmPA
+( * @param verb The command verb this CommandInfo decribes.) 216 308.33 T
+72 452/G270647 FmPA
+( * @param className The command\325s fully qualified class name.) 216 297.33 T
+72 441/G270648 FmPA
+( */) 216 286.33 T
+72 430/G270649 FmPA
+(  public CommandInfo\050String verb, String className\051;) 216 275.33 T
+72 419/G267865 FmPA
+72 408/G270638 FmPA
+(/**) 216 253.33 T
+72 397/G270661 FmPA
+( * Return the command verb.) 216 242.33 T
+72 386/G270662 FmPA
+( *) 216 231.33 T
+72 375/G270663 FmPA
+( * @return the command verb.) 216 220.33 T
+72 364/G270664 FmPA
+( */) 216 209.33 T
+72 353/G270665 FmPA
+(  public String getCommandName\050\051;) 216 198.33 T
+72 342/G267866 FmPA
+72 331/G270639 FmPA
+(/**) 216 176.33 T
+72 320/G270678 FmPA
+( * Return the command\325s class name. <i>This method MAY return) 216 165.33 T
+72 309/G270679 FmPA
+( * null in cases where a CommandMap subclassed CommandInfo for) 216 154.33 T
+72 298/G270697 FmPA
+( * its own purposes.</i> In other words, it might not be) 216 143.33 T
+72 287/G270700 FmPA
+(*) 220.71 132.33 T
+(possible) 230.82 132.33 T
+(to) 278.72 132.33 T
+(create) 294.23 132.33 T
+(the) 331.34 132.33 T
+(correct) 352.25 132.33 T
+(state) 394.75 132.33 T
+(in) 426.46 132.33 T
+(the) 441.97 132.33 T
+(command) 462.88 132.33 T
+(by) 505.38 132.33 T
+(merely) 520.89 132.33 T
+72 276/G270703 FmPA
+( * knowing its class name. <b>DO NOT DEPEND ON THIS METHOD) 216 121.33 T
+72 265/G270706 FmPA
+( * RETURNING A VALID VALUE!</b>) 216 110.33 T
+72 254/G270709 FmPA
+( *) 216 99.33 T
+72 243/G270685 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.17/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "17" 17
+%%Page: "18" 18
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 189 739.85 T
+(y Frame) 217.6 739.85 T
+(w) 251.98 739.85 T
+(ork Interfaces) 258.8 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(18) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+7 F
+( * @return The class name of the command, or <i>null</i>) 198 681.33 T
+54 825/G270686 FmPA
+( */) 198 670.33 T
+54 814/G270687 FmPA
+(  public String getCommandClass\050\051 {) 198 659.33 T
+54 803/G270688 FmPA
+(        return className;) 198 648.33 T
+54 792/G270689 FmPA
+(  }) 198 637.33 T
+54 781/G270690 FmPA
+54 770/G270676 FmPA
+(/**) 198 615.33 T
+54 759/G270726 FmPA
+( * Return the instantiated JavaBeans component.) 198 604.33 T
+54 748/G270727 FmPA
+( * <p>) 198 593.33 T
+54 737/G270728 FmPA
+( * Begin by instantiating the component with) 198 582.33 T
+54 726/G270729 FmPA
+( * <code>Beans.instantiate\050\051</code>.) 198 571.33 T
+54 715/G270730 FmPA
+( * <p>) 198 560.33 T
+54 704/G270731 FmPA
+( * If the bean implements the) 198 549.33 T
+54 693/G270732 FmPA
+( * <code>javax.activation.CommandObject</code> interface, call) 198 538.33 T
+54 682/G270766 FmPA
+( * its <code>setCommandContext</code> method.) 198 527.33 T
+54 671/G270773 FmPA
+( * <p>) 198 516.33 T
+54 660/G270734 FmPA
+( * If the DataHandler parameter is null, then the bean is) 198 505.33 T
+54 649/G270735 FmPA
+( * instantiated with no data. NOTE: this may be useful) 198 494.33 T
+54 638/G270736 FmPA
+( * if for some reason the DataHandler that is passed in) 198 483.33 T
+54 627/G270737 FmPA
+( * throws IOExceptions when this method attempts to) 198 472.33 T
+54 616/G270738 FmPA
+( * access its InputStream. It will allow the caller to) 198 461.33 T
+54 605/G270739 FmPA
+( * retrieve a reference to the bean if it can be) 198 450.33 T
+54 594/G270740 FmPA
+( * instantiated.) 198 439.33 T
+54 583/G270741 FmPA
+( * <p>) 198 428.33 T
+54 572/G270742 FmPA
+( * If the bean does NOT implement the CommandObject interface,) 198 417.33 T
+54 561/G270743 FmPA
+( * this method will check if it implements the) 198 406.33 T
+54 550/G270744 FmPA
+( * java.io.Externalizable interface. If it does, the bean\325s) 198 395.33 T
+54 539/G270745 FmPA
+( * readExternal method will be called if an InputStream) 198 384.33 T
+54 528/G270746 FmPA
+( * can be acquired from the DataHandler.<p>) 198 373.33 T
+54 517/G270747 FmPA
+( *) 198 362.33 T
+54 506/G270803 FmPA
+(*) 202.9 351.33 T
+(@param) 213.2 351.33 T
+(dh) 250.5 351.33 T
+(The) 300.5 351.33 T
+(DataHandler) 321.6 351.33 T
+(that) 385.9 351.33 T
+(describes) 412.4 351.33 T
+(the) 465.9 351.33 T
+(data) 487 351.33 T
+(to) 513.5 351.33 T
+(be) 529.2 351.33 T
+54 495/G270804 FmPA
+( *                  passed to the command.) 198 340.33 T
+54 484/G270805 FmPA
+( * @param loader    The ClassLoader to be used to instantiate) 198 329.33 T
+54 473/G270806 FmPA
+( *                  the bean.) 198 318.33 T
+54 462/G270819 FmPA
+( * @return The bean) 198 307.33 T
+54 451/G270807 FmPA
+( *) 198 296.33 T
+54 440/G273140 FmPA
+( * @see java.beans.Beans#instantiate) 198 285.33 T
+54 429/G270808 FmPA
+( * @see javax.activation.CommandObject) 198 274.33 T
+54 418/G270809 FmPA
+( */) 198 263.33 T
+54 407/G270810 FmPA
+(  public Object getCommandObject\050DataHandler dh,) 198 252.33 T
+54 396/G267871 FmPA
+(                                 ClassLoader cl\051) 198 241.33 T
+54 385/G267872 FmPA
+(                throws IOException, ClassNotFoundException;) 198 230.33 T
+54 374/G270830 FmPA
+(}) 198 219.33 T
+54 363/G267862 FmPA
+0 10 Q
+(6.6) 166.1 189.66 T
+(The CommandObject Interface) 189 189.66 T
+54 334/G267858 FmPA
+1 F
+(Beans) 189 165.66 T
+(designed) 217.33 165.66 T
+(speci\336cally) 256.76 165.66 T
+(for) 306.2 165.66 T
+(use) 321.74 165.66 T
+(with) 338.96 165.66 T
+(the) 360.63 165.66 T
+(J) 376.73 165.66 T
+(AF) 380.02 165.66 T
+(Architecture) 396.69 165.66 T
+(should) 450.56 165.66 T
+(implement) 481.11 165.66 T
+(the) 527.78 165.66 T
+54 310/G264890 FmPA
+(CommandObject) 189 153.66 T
+(interf) 263.73 153.66 T
+(ace.) 285.29 153.66 T
+(This) 307.5 153.66 T
+(interf) 331.67 153.66 T
+(ace) 353.23 153.66 T
+(pro) 372.95 153.66 T
+(vides) 386.13 153.66 T
+(direct) 413.64 153.66 T
+(access) 442.8 153.66 T
+(to) 474.73 153.66 T
+(DataHandler) 488.91 153.66 T
+(methods) 189 141.66 T
+(and) 228.8 141.66 T
+(noti\336es) 249.16 141.66 T
+(a) 284.52 141.66 T
+(J) 294.87 141.66 T
+(AF-a) 298.16 141.66 T
+(w) 318.56 141.66 T
+(are) 325.68 141.66 T
+(Bean) 343.8 141.66 T
+(which) 370.27 141.66 T
+(v) 400.62 141.66 T
+(erb) 405.47 141.66 T
+(w) 424.15 141.66 T
+(as) 431.27 141.66 T
+(used) 445.52 141.66 T
+(to) 469.76 141.66 T
+(call) 483.45 141.66 T
+(it.) 503.81 141.66 T
+(Upon) 517.78 141.66 T
+(instantiation,) 189 129.66 T
+(the) 243.81 129.66 T
+(Bean) 258.89 129.66 T
+(tak) 282.29 129.66 T
+(es) 294.41 129.66 T
+(a) 305.6 129.66 T
+(string) 312.9 129.66 T
+(specifying) 338.54 129.66 T
+(a) 383.05 129.66 T
+(user) 390.35 129.66 T
+(-selected) 406.81 129.66 T
+(command) 445.21 129.66 T
+(v) 487.51 129.66 T
+(erb,) 492.36 129.66 T
+(and) 510.48 129.66 T
+(the) 527.78 129.66 T
+(DataHandler) 189 117.66 T
+(object) 244.48 117.66 T
+(managing) 273.31 117.66 T
+(the) 317.13 117.66 T
+(tar) 333.74 117.66 T
+(get) 344.11 117.66 T
+(data.) 360.72 117.66 T
+(The) 384.27 117.66 T
+(DataHandler) 404.21 117.66 T
+(tak) 459.68 117.66 T
+(es) 471.8 117.66 T
+(a) 484.52 117.66 T
+(DataSource) 493.35 117.66 T
+(object,) 189 105.66 T
+(which) 219.25 105.66 T
+(pro) 246.99 105.66 T
+(vides) 260.17 105.66 T
+(an) 284.59 105.66 T
+(input) 297.34 105.66 T
+(stream) 321.2 105.66 T
+(link) 351.17 105.66 T
+(ed) 366.63 105.66 T
+(to) 379.38 105.66 T
+(that) 390.46 105.66 T
+(data,) 408.77 105.66 T
+(and) 431.23 105.66 T
+(a) 448.98 105.66 T
+(string) 456.73 105.66 T
+(specifying) 482.81 105.66 T
+(the) 527.78 105.66 T
+(data type.) 189 93.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.18/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "18" 18
+%%Page: "19" 19
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Writing Beans f) 207 739.85 T
+(or the Frame) 272.83 739.85 T
+(w) 327.2 739.85 T
+(ork) 334.03 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(19) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+7 9 Q
+(public interface CommandObject {) 216 681.33 T
+72 825/G264892 FmPA
+(/**) 216 670.33 T
+72 814/G265378 FmPA
+( * Initialize the Command with the verb it is requested to) 216 659.33 T
+72 803/G271121 FmPA
+( * handle and the DataHandler that describes the data it will) 216 648.33 T
+72 792/G271132 FmPA
+( * operate on. <b>NOTE:</b> it is acceptable for the caller) 216 637.33 T
+72 781/G271123 FmPA
+( * to pass <i>null</i> as the value for) 216 626.33 T
+72 770/G271124 FmPA
+( * <code>DataHandler</code>.) 216 615.33 T
+72 759/G271139 FmPA
+( *) 216 604.33 T
+72 748/G271125 FmPA
+( * @param verb The Command Verb this object refers to.) 216 593.33 T
+72 737/G271126 FmPA
+( * @param dh The DataHandler.) 216 582.33 T
+72 726/G271127 FmPA
+( */) 216 571.33 T
+72 715/G267685 FmPA
+(public void setCommandContext\050String verb, DataHandler dh\051;) 216 560.33 T
+72 704/G265381 FmPA
+(}) 216 549.33 T
+72 693/G266423 FmPA
+72 682/G265382 FmPA
+0 10 Q
+(6.7) 184.1 508.66 T
+(The DataContentHandlerF) 207 508.66 T
+(actor) 330.14 508.66 T
+(y) 354.69 508.66 T
+72 653/G267005 FmPA
+1 F
+(Lik) 207 492.66 T
+(e the ContentHandler f) 220.79 492.66 T
+(actory in the) 312.06 492.66 T
+7 F
+(java.net) 364.55 492.66 T
+1 F
+( package, the) 412.55 492.66 T
+72 637/G267006 FmPA
+(DataContentHandlerF) 207 480.66 T
+(actory is an interf) 295.17 480.66 T
+(ace that allo) 365.33 480.66 T
+(ws de) 413.4 480.66 T
+(v) 436.2 480.66 T
+(elopers to write objects that) 441.05 480.66 T
+(map MIME types to DataContentHandlers. The interf) 207 468.66 T
+(ace is e) 421.59 468.66 T
+(xtremely simple, in order) 450.87 468.66 T
+(to allo) 207 456.66 T
+(w de) 232.03 456.66 T
+(v) 250.94 456.66 T
+(elopers as much design and implementation freedom as possible.) 255.79 456.66 T
+7 9 Q
+(public interface DataContentHandlerFactory {) 216 439.33 T
+72 583/G267010 FmPA
+(/**) 216 428.33 T
+72 572/G267012 FmPA
+( * Creates a new DataContentHandler object for the MIME type.) 216 417.33 T
+72 561/G271154 FmPA
+( *) 216 406.33 T
+72 550/G271155 FmPA
+( * @param mimeType the MIME type to create the) 216 395.33 T
+72 539/G271156 FmPA
+( * DataContentHandler for.) 216 384.33 T
+72 528/G271167 FmPA
+( * @return The new <code>DataContentHandler</code>,) 216 373.33 T
+72 517/G271157 FmPA
+( * or <i>null</i> if none are found.) 216 362.33 T
+72 506/G271170 FmPA
+( */) 216 351.33 T
+72 495/G267014 FmPA
+(public DataContentHandler createDataContentHandler\050) 216 340.33 T
+72 484/G267015 FmPA
+(                                             String mimeType\051;) 216 329.33 T
+72 473/G267023 FmPA
+(}) 216 318.33 T
+72 462/G267008 FmPA
+72 275.33 558 278.33 C
+0 0 0 1 0 0 0 1 K
+207 277.48 558 277.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 277.48 198 277.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(7.0) 181.32 282.33 T
+(Writing Beans f) 207 282.33 T
+(or the Frame) 294.77 282.33 T
+(w) 367.27 282.33 T
+(ork) 376.37 282.33 T
+72 426/G264898 FmPA
+0 10 Q
+(7.1) 184.1 248.66 T
+(Over) 207 248.66 T
+(vie) 229.89 248.66 T
+(w) 243.64 248.66 T
+72 393/G265063 FmPA
+1 F
+(This) 207 224.66 T
+(section) 227.45 224.66 T
+(describes) 258.45 224.66 T
+(the) 298.33 224.66 T
+(speci\336cation) 313.22 224.66 T
+(of) 366.44 224.66 T
+(well-beha) 377.44 224.66 T
+(v) 416.67 224.66 T
+(ed) 421.52 224.66 T
+(J) 433.63 224.66 T
+(AF-a) 436.92 224.66 T
+(w) 457.32 224.66 T
+(are) 464.44 224.66 T
+(Bean) 479.32 224.66 T
+(vie) 502.54 224.66 T
+(wers.) 514.51 224.66 T
+(Note) 538.56 224.66 T
+72 369/G264900 FmPA
+(that) 207 212.66 T
+(this) 224.3 212.66 T
+(proposal) 241.05 212.66 T
+(assumes) 277.79 212.66 T
+(the) 313.42 212.66 T
+(reader) 327.94 212.66 T
+(is) 355.23 212.66 T
+(comfortable) 364.2 212.66 T
+(with) 414.82 212.66 T
+(the) 434.9 212.66 T
+(Ja) 449.42 212.66 T
+(v) 457.55 212.66 T
+(aBeans\252) 462.3 212.66 T
+(Speci\336cation.) 503.28 212.66 T
+(De) 207 200.66 T
+(v) 218.41 200.66 T
+(elopers) 223.26 200.66 T
+(intending) 255.27 200.66 T
+(to) 296.18 200.66 T
+(implement) 307.1 200.66 T
+(vie) 353.01 200.66 T
+(wer) 364.98 200.66 T
+(Beans) 383.1 200.66 T
+(for) 410.67 200.66 T
+(the) 425.47 200.66 T
+(J) 440.82 200.66 T
+(AF) 444.11 200.66 T
+(should) 463.15 200.66 T
+(be) 492.95 200.66 T
+(f) 505.53 200.66 T
+(amiliar) 508.76 200.66 T
+(with) 540.22 200.66 T
+(Ja) 207 188.66 T
+(v) 215.13 188.66 T
+(aBeans\252 concepts and architecture.) 219.88 188.66 T
+0 F
+(7.2) 184.1 158.66 T
+(Vie) 207 158.66 T
+(wer Goals) 221.86 158.66 T
+72 303/G264901 FmPA
+0 9 Q
+(1.) 207 142.66 T
+1 10 Q
+(Mak) 220.74 142.66 T
+(e the implementation of vie) 238.98 142.66 T
+(wers and editors as simple as implementing Beans.) 348.71 142.66 T
+72 287/G264902 FmPA
+(i.e.: lo) 220.74 130.66 T
+(w cost of entry to be a) 245.77 130.66 T
+2 F
+(good) 337.14 130.66 T
+1 F
+( citizen.) 357.14 130.66 T
+0 9 Q
+(2.) 207 115.66 T
+1 10 Q
+(Allo) 220.74 115.66 T
+(w de) 238.27 115.66 T
+(v) 257.18 115.66 T
+(elopers to ha) 262.04 115.66 T
+(v) 312.93 115.66 T
+(e a certain amount of \337e) 317.79 115.66 T
+(xibility in their implementations.) 414.55 115.66 T
+72 260/G264903 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.19/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "19" 19
+%%Page: "20" 20
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Writing Beans f) 189 739.85 T
+(or the Frame) 254.83 739.85 T
+(w) 309.2 739.85 T
+(ork) 316.03 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(20) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+0 10 Q
+(7.3) 166.1 680.66 T
+(General) 189 680.66 T
+54 825/G264904 FmPA
+1 F
+(W) 189 656.66 T
+(e) 197.64 656.66 T
+(are) 205.32 656.66 T
+(attempting) 220.77 656.66 T
+(to) 266.79 656.66 T
+(limit) 277.82 656.66 T
+(the) 299.96 656.66 T
+(amount) 315.42 656.66 T
+(of) 348.66 656.66 T
+(e) 360.23 656.66 T
+(xtra) 364.52 656.66 T
+(bagg) 383.31 656.66 T
+(age) 402.7 656.66 T
+(that) 419.82 656.66 T
+(needs) 438.07 656.66 T
+(to) 464.08 656.66 T
+(be) 475.1 656.66 T
+(implemented) 487.78 656.66 T
+54 801/G266484 FmPA
+(from) 189 644.66 T
+(\324generic\325) 215.37 644.66 T
+(Beans.) 258.38 644.66 T
+(In) 292.25 644.66 T
+(man) 307.51 644.66 T
+(y) 324.58 644.66 T
+(cases) 336.5 644.66 T
+(Ja) 364.53 644.66 T
+(v) 372.66 644.66 T
+(aBeans\252) 377.41 644.66 T
+(components) 423.02 644.66 T
+(which) 478.27 644.66 T
+(weren\325) 509.64 644.66 T
+(t) 537.22 644.66 T
+(de) 189 632.66 T
+(v) 198.19 632.66 T
+(eloped) 203.04 632.66 T
+(with) 232.3 632.66 T
+(kno) 252.68 632.66 T
+(wledge) 267.43 632.66 T
+(of) 298.91 632.66 T
+(the) 309.84 632.66 T
+(frame) 324.66 632.66 T
+(w) 347.73 632.66 T
+(ork) 354.85 632.66 T
+(can) 370.77 632.66 T
+(be) 387.25 632.66 T
+(used.) 399.29 632.66 T
+(The) 422.72 632.66 T
+(J) 440.87 632.66 T
+(AF) 444.16 632.66 T
+(e) 459.54 632.66 T
+(xploits) 463.83 632.66 T
+(the) 493.66 632.66 T
+(e) 508.48 632.66 T
+(xisting) 512.77 632.66 T
+(features) 189 620.66 T
+(of) 224.24 620.66 T
+(Ja) 236.17 620.66 T
+(v) 244.3 620.66 T
+(aBeans\252) 249.05 620.66 T
+(and) 291.32 620.66 T
+(the) 309.35 620.66 T
+(JDK\252,) 325.17 620.66 T
+(and) 359.39 620.66 T
+(de\336nes) 377.42 620.66 T
+(as) 409.35 620.66 T
+(fe) 421.27 620.66 T
+(w) 428.79 620.66 T
+(additional) 439.6 620.66 T
+(interf) 483.2 620.66 T
+(aces) 504.76 620.66 T
+(and) 525.56 620.66 T
+(policies as possible.) 189 608.66 T
+(W) 189 584.66 T
+(e) 197.64 584.66 T
+(e) 205.58 584.66 T
+(xpect) 209.87 584.66 T
+(that) 235.03 584.66 T
+(in) 253.54 584.66 T
+(the) 264.82 584.66 T
+(\336rst) 280.54 584.66 T
+(release,) 299.6 584.66 T
+(vie) 333.36 584.66 T
+(wers/editors) 345.33 584.66 T
+(will) 397.72 584.66 T
+(be) 416.78 584.66 T
+(bound) 429.72 584.66 T
+(to) 458.22 584.66 T
+(data) 469.5 584.66 T
+(via) 489.67 584.66 T
+(a) 505.39 584.66 T
+(simple) 513.33 584.66 T
+54 729/G268843 FmPA
+(re) 189 572.66 T
+(gistry) 196.62 572.66 T
+(mechanism) 222.86 572.66 T
+(similar) 271.86 572.66 T
+(in) 303.1 572.66 T
+(function) 314.34 572.66 T
+(to) 351.12 572.66 T
+(a) 362.36 572.66 T
+(.mailcap) 370.26 572.66 T
+(\336le.) 407.87 572.66 T
+(W) 426.61 572.66 T
+(e) 435.25 572.66 T
+(also) 443.14 572.66 T
+(plan) 462.71 572.66 T
+(to) 483.39 572.66 T
+(e) 494.62 572.66 T
+(xploit) 498.91 572.66 T
+(an) 525.71 572.66 T
+(y) 535 572.66 T
+(future) 189 560.66 T
+(e) 215.62 560.66 T
+(xtensions) 219.9 560.66 T
+(to) 260.42 560.66 T
+(the) 270.93 560.66 T
+(ClassLoader) 285.89 560.66 T
+(that) 338.61 560.66 T
+(can) 356.35 560.66 T
+(allo) 372.96 560.66 T
+(w) 387.71 560.66 T
+(autodisco) 397.67 560.66 T
+(v) 435.85 560.66 T
+(ery) 440.7 560.66 T
+(of) 456.2 560.66 T
+(con\336guration) 467.27 560.66 T
+(\336les) 523.33 560.66 T
+(on) 189 548.66 T
+(the) 201.51 548.66 T
+(system.) 216.24 548.66 T
+(This) 249.02 548.66 T
+(w) 269.31 548.66 T
+(ould) 276.43 548.66 T
+(allo) 296.72 548.66 T
+(w) 311.47 548.66 T
+(de) 321.2 548.66 T
+(v) 330.39 548.66 T
+(elopers) 335.24 548.66 T
+(to) 366.63 548.66 T
+(deli) 376.92 548.66 T
+(v) 391.67 548.66 T
+(er) 396.52 548.66 T
+(supplementary) 406.8 548.66 T
+(re) 468.18 548.66 T
+(gistry) 475.8 548.66 T
+(\336les) 501.09 548.66 T
+(to) 520.27 548.66 T
+(be) 530.56 548.66 T
+(appended) 189 536.66 T
+(to) 231.95 536.66 T
+(the) 244.37 536.66 T
+(system) 261.22 536.66 T
+(re) 293.64 536.66 T
+(gistry) 301.26 536.66 T
+(\336les,) 328.67 536.66 T
+(allo) 352.48 536.66 T
+(wing) 367.23 536.66 T
+(additional) 391.86 536.66 T
+(packages) 436.49 536.66 T
+(to) 477.78 536.66 T
+(be) 490.19 536.66 T
+(added) 504.27 536.66 T
+(at) 532.78 536.66 T
+(runtime.) 189 524.66 T
+(Our) 189 500.66 T
+(vie) 207.88 500.66 T
+(wers/editors) 219.85 500.66 T
+(and) 272.06 500.66 T
+(related) 289.83 500.66 T
+(classes) 320.37 500.66 T
+(and) 351.47 500.66 T
+(\336les) 369.24 500.66 T
+(are) 389.24 500.66 T
+(encapsulated) 404.79 500.66 T
+(into) 459.77 500.66 T
+(J) 478.66 500.66 T
+(AR) 481.95 500.66 T
+(\336les,) 499.17 500.66 T
+(as) 521.67 500.66 T
+(is) 533.33 500.66 T
+54 645/G264906 FmPA
+(the) 189 488.66 T
+(preferred) 204.41 488.66 T
+(method) 244.24 488.66 T
+(for) 277.44 488.66 T
+(Ja) 292.29 488.66 T
+(v) 300.42 488.66 T
+(aBeans\252.) 305.17 488.66 T
+(The) 349.54 488.66 T
+(J) 368.28 488.66 T
+(AF) 371.57 488.66 T
+(does) 387.55 488.66 T
+(not) 409.07 488.66 T
+(restrict) 425.04 488.66 T
+(the) 456 488.66 T
+(choice) 471.42 488.66 T
+(of) 500.71 488.66 T
+(classes) 512.23 488.66 T
+(used) 189 476.66 T
+(to) 209.74 476.66 T
+(implement) 219.92 476.66 T
+(a) 265.1 476.66 T
+(J) 271.95 476.66 T
+(AF-a) 275.24 476.66 T
+(w) 295.64 476.66 T
+(are) 302.76 476.66 T
+(\324vie) 317.37 476.66 T
+(wer\325) 332.67 476.66 T
+(Beans,) 353.4 476.66 T
+(be) 382.74 476.66 T
+(yond) 392.03 476.66 T
+(those) 414.44 476.66 T
+(e) 437.95 476.66 T
+(xpected) 442.24 476.66 T
+(of) 475.74 476.66 T
+(well-beha) 486.48 476.66 T
+(v) 525.71 476.66 T
+(ed) 530.56 476.66 T
+(Beans.) 189 464.66 T
+(W) 218.86 464.66 T
+(e) 227.5 464.66 T
+(mak) 234.86 464.66 T
+(e) 251.98 464.66 T
+(no) 259.33 464.66 T
+(restrictions) 272.25 464.66 T
+(on) 319.61 464.66 T
+(which) 332.53 464.66 T
+(classes) 359.89 464.66 T
+(are) 390.58 464.66 T
+(used) 405.71 464.66 T
+(to) 426.95 464.66 T
+(implement) 437.65 464.66 T
+(Beans) 483.35 464.66 T
+(be) 510.71 464.66 T
+(yond) 520 464.66 T
+(those e) 189 452.66 T
+(xpected of \324well beha) 216.9 452.66 T
+(v) 303.06 452.66 T
+(ed\325 Ja) 307.91 452.66 T
+(v) 331.31 452.66 T
+(aBeans\252 components.) 336.06 452.66 T
+0 F
+(7.4) 166.1 422.66 T
+(Interfaces) 189 422.66 T
+54 567/G264907 FmPA
+1 F
+(A) 189 398.66 T
+(vie) 198.87 398.66 T
+(wer) 210.84 398.66 T
+(Bean) 228.48 398.66 T
+(that) 251.67 398.66 T
+(communicates) 269.32 398.66 T
+(directly) 329.74 398.66 T
+(with) 362.94 398.66 T
+(a) 383.37 398.66 T
+(J) 390.45 398.66 T
+(AF) 393.74 398.66 T
+(Datahandler) 409.17 398.66 T
+(or) 460.69 398.66 T
+(CommandObject) 471.67 398.66 T
+54 543/G264908 FmPA
+(should) 189 386.66 T
+(implement) 219.54 386.66 T
+(the) 266.2 386.66 T
+(CommandObject) 282.3 386.66 T
+(interf) 354.5 386.66 T
+(ace.) 376.06 386.66 T
+(This) 395.76 386.66 T
+(interf) 417.41 386.66 T
+(ace) 438.97 386.66 T
+(is) 456.17 386.66 T
+(small) 466.71 386.66 T
+(and) 492.26 386.66 T
+(easy) 510.57 386.66 T
+(to) 532.22 386.66 T
+(implement.) 189 374.66 T
+(Ho) 238.76 374.66 T
+(we) 250.73 374.66 T
+(v) 262.14 374.66 T
+(er;) 266.99 374.66 T
+(Beans) 282.02 374.66 T
+(can) 310.94 374.66 T
+(still) 329.3 374.66 T
+(use) 348.78 374.66 T
+(standard) 366.59 374.66 T
+(Serialization) 404.95 374.66 T
+(and) 459.98 374.66 T
+(Externalization) 478.9 374.66 T
+(methods a) 189 362.66 T
+(v) 229.63 362.66 T
+(ailable in JDK 1.1 and later v) 234.38 362.66 T
+(ersions.) 351.71 362.66 T
+0 F
+(7.5) 166.1 332.66 T
+(Stora) 189 332.66 T
+(g) 214.46 332.66 T
+(e) 220.67 332.66 T
+54 477/G264909 FmPA
+1 F
+(The) 189 308.66 T
+(J) 208.84 308.66 T
+(AF) 212.13 308.66 T
+(e) 229.2 308.66 T
+(xpects) 233.49 308.66 T
+(applications) 263.33 308.66 T
+(and) 315.95 308.66 T
+(vie) 334.68 308.66 T
+(wer) 346.65 308.66 T
+(Beans) 365.93 308.66 T
+(to) 394.67 308.66 T
+(implement) 406.74 308.66 T
+(storage) 453.81 308.66 T
+(tasks) 486.98 308.66 T
+(via) 511.27 308.66 T
+(the) 527.78 308.66 T
+54 453/G264910 FmPA
+(DataSource) 189 296.66 T
+(object.) 241.52 296.66 T
+(Ho) 274.32 296.66 T
+(we) 286.29 296.66 T
+(v) 297.7 296.66 T
+(er;) 302.55 296.66 T
+(it) 318.97 296.66 T
+(is) 330.4 296.66 T
+(possible) 342.93 296.66 T
+(to) 381.58 296.66 T
+(use) 395.23 296.66 T
+(Externalization.) 414.43 296.66 T
+(A) 483.89 296.66 T
+(J) 496.98 296.66 T
+(AF-a) 500.27 296.66 T
+(w) 520.67 296.66 T
+(are) 527.79 296.66 T
+(application can implement the follo) 189 284.66 T
+(wing storage mechanism:) 330.96 284.66 T
+7 9 Q
+(ObjectOutputStream oos = new ObjectOutputStream\050) 198 267.33 T
+54 411/G264911 FmPA
+(                              try {) 198 256.33 T
+54 400/G267035 FmPA
+(data_handler.getOutputStream\050\051\051;) 367.2 245.33 T
+54 389/G265396 FmPA
+(                              } catch\050IOException e\051 {}) 198 234.33 T
+54 378/G267036 FmPA
+(my_externalizable_bean.writeExternal\050oos\051;) 198 223.33 T
+54 367/G265399 FmPA
+0 10 Q
+(7.6) 166.1 193.66 T
+(P) 189 193.66 T
+(ac) 195.37 193.66 T
+(ka) 206.29 193.66 T
+(ging) 217.31 193.66 T
+54 338/G264913 FmPA
+1 F
+(The) 189 169.66 T
+(basic) 207.16 169.66 T
+(format) 230.32 169.66 T
+(for) 259.6 169.66 T
+(packaging) 273.87 169.66 T
+(of) 317.58 169.66 T
+(the) 328.52 169.66 T
+(V) 343.35 169.66 T
+(ie) 349.97 169.66 T
+(wer/Editors) 356.94 169.66 T
+(is) 406.22 169.66 T
+(the) 415.5 169.66 T
+(J) 430.33 169.66 T
+(AR) 433.62 169.66 T
+(\336le) 450.12 169.66 T
+(as) 465.51 169.66 T
+(described) 476.46 169.66 T
+(in) 517.39 169.66 T
+(the) 527.78 169.66 T
+54 314/G264914 FmPA
+(Ja) 189 157.66 T
+(v) 197.13 157.66 T
+(aBeans\252) 201.88 157.66 T
+(Speci\336cation.) 243.46 157.66 T
+(This) 301.08 157.66 T
+(format) 321.76 157.66 T
+(allo) 351.32 157.66 T
+(ws) 366.07 157.66 T
+(the) 380.08 157.66 T
+(con) 395.21 157.66 T
+(v) 409.25 157.66 T
+(enient) 414.1 157.66 T
+(packaging) 441.44 157.66 T
+(of) 485.44 157.66 T
+(collections) 496.67 157.66 T
+(of) 189 145.66 T
+(\336les) 200.14 145.66 T
+(that) 219.61 145.66 T
+(are) 237.42 145.66 T
+(related) 252.43 145.66 T
+(to) 282.45 145.66 T
+(a) 293.03 145.66 T
+(particular) 300.28 145.66 T
+(Bean) 341.4 145.66 T
+(or) 364.76 145.66 T
+(applet.) 375.9 145.66 T
+(F) 405.64 145.66 T
+(or) 411.05 145.66 T
+(more) 422.19 145.66 T
+(information) 445.54 145.66 T
+(concerning) 495.57 145.66 T
+(inte) 189 133.66 T
+(gration points, see Section 8.) 203.85 133.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.20/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "20" 20
+%%Page: "21" 21
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 207 739.85 T
+(w) 233.87 739.85 T
+(ork Integration P) 240.7 739.85 T
+(oints) 311.85 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(21) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+(7.7) 184.1 680.66 T
+(Container Suppor) 207 680.66 T
+(t) 291.65 680.66 T
+72 825/G264915 FmPA
+1 F
+(The) 207 656.66 T
+(J) 227.83 656.66 T
+(AF) 231.12 656.66 T
+(is) 249.19 656.66 T
+(designed) 261.14 656.66 T
+(to) 301.98 656.66 T
+(be) 315.04 656.66 T
+(\337e) 329.76 656.66 T
+(xible) 339.61 656.66 T
+(enough) 364.9 656.66 T
+(to) 399.62 656.66 T
+(support) 412.69 656.66 T
+(the) 447.97 656.66 T
+(needs) 465.47 656.66 T
+(of) 493.53 656.66 T
+(a) 507.14 656.66 T
+(v) 516.87 656.66 T
+(ariety) 521.62 656.66 T
+(of) 549.67 656.66 T
+72 801/G264916 FmPA
+(applications.) 207 644.66 T
+(The) 261.11 644.66 T
+(J) 279.94 644.66 T
+(AF) 283.23 644.66 T
+(e) 299.29 644.66 T
+(xpects) 303.58 644.66 T
+(these) 332.41 644.66 T
+(applications) 356.23 644.66 T
+(to) 407.84 644.66 T
+(pro) 418.9 644.66 T
+(vide) 432.08 644.66 T
+(the) 452.58 644.66 T
+(appropriate) 468.08 644.66 T
+(containers) 516.9 644.66 T
+(and) 207 632.66 T
+(life) 225.81 632.66 T
+(c) 243.52 632.66 T
+(ycle) 247.81 632.66 T
+(support) 268.84 632.66 T
+(for) 303.21 632.66 T
+(these) 319.24 632.66 T
+(Beans.) 344.17 632.66 T
+(Beans) 375.48 632.66 T
+(written) 404.3 632.66 T
+(for) 437 632.66 T
+(the) 453.03 632.66 T
+(frame) 469.62 632.66 T
+(w) 492.69 632.66 T
+(ork) 499.81 632.66 T
+(should) 517.52 632.66 T
+(be) 548.56 632.66 T
+(compatible) 207 620.66 T
+(with) 254.22 620.66 T
+(the) 274.78 620.66 T
+(guidelines) 289.78 620.66 T
+(in) 333.67 620.66 T
+(the) 344.23 620.66 T
+(Ja) 359.22 620.66 T
+(v) 367.35 620.66 T
+(aBeans\252) 372.1 620.66 T
+(documentation) 413.56 620.66 T
+(and) 475.78 620.66 T
+(should) 493 620.66 T
+(be) 522.45 620.66 T
+(tested) 534.67 620.66 T
+(ag) 207 608.66 T
+(ainst) 216.39 608.66 T
+(the) 239.62 608.66 T
+(BDK) 256.18 608.66 T
+(BeanBox) 281.63 608.66 T
+(\050and) 323.19 608.66 T
+(the) 345.3 608.66 T
+(JDK) 361.86 608.66 T
+(Appletvie) 384.52 608.66 T
+(wer) 423.71 608.66 T
+(if) 443.04 608.66 T
+(the) 453.49 608.66 T
+(y) 465.56 608.66 T
+(are) 474.9 608.66 T
+(subclassed) 491.45 608.66 T
+(from) 538.56 608.66 T
+(Applet\051.) 207 596.66 T
+0 F
+(7.8) 184.1 566.66 T
+(Lif) 207 566.66 T
+(ec) 219.12 566.66 T
+(yc) 230.14 566.66 T
+(le) 241.06 566.66 T
+72 711/G264917 FmPA
+1 F
+(In) 207 542.66 T
+(general) 217.62 542.66 T
+(the) 249.35 542.66 T
+(J) 263.86 542.66 T
+(AF) 267.15 542.66 T
+(e) 282.22 542.66 T
+(xpects) 286.51 542.66 T
+(that) 314.35 542.66 T
+(its) 331.64 542.66 T
+(vie) 343.39 542.66 T
+(wer) 355.36 542.66 T
+(bean) 372.64 542.66 T
+(life) 393.81 542.66 T
+(c) 409.43 542.66 T
+(ycle) 413.73 542.66 T
+(semantics) 432.68 542.66 T
+(are) 474.41 542.66 T
+(the) 488.91 542.66 T
+(same) 503.42 542.66 T
+(as) 526.27 542.66 T
+(those) 536.89 542.66 T
+72 687/G265828 FmPA
+(for) 207 530.66 T
+(all) 222.27 530.66 T
+(Beans.) 235.89 530.66 T
+(In) 266.45 530.66 T
+(the) 278.39 530.66 T
+(case) 294.23 530.66 T
+(of) 315.05 530.66 T
+(Beans) 327 530.66 T
+(that) 355.05 530.66 T
+(implement) 373.67 530.66 T
+(the) 420.06 530.66 T
+(CommandObject) 435.9 530.66 T
+(interf) 507.84 530.66 T
+(ace) 529.4 530.66 T
+(we) 546.34 530.66 T
+(encourage) 207 518.66 T
+(application) 259.38 518.66 T
+(de) 315.12 518.66 T
+(v) 324.31 518.66 T
+(elopers) 329.16 518.66 T
+(to) 369.33 518.66 T
+(not) 388.4 518.66 T
+(parent) 412.48 518.66 T
+(Beans) 448.76 518.66 T
+(subclassed) 484.5 518.66 T
+(from) 538.56 518.66 T
+(ja) 207 506.66 T
+(v) 214.02 506.66 T
+(a.a) 218.77 506.66 T
+(wt.Component) 230 506.66 T
+(to) 298.86 506.66 T
+(an) 316.34 506.66 T
+(A) 335.47 506.66 T
+(WT) 341.79 506.66 T
+(container) 367.04 506.66 T
+(until) 413.94 506.66 T
+(after) 441.97 506.66 T
+(the) 469.99 506.66 T
+(y) 482.06 506.66 T
+(ha) 496.75 506.66 T
+(v) 505.99 506.66 T
+(e) 510.84 506.66 T
+(set) 524.98 506.66 T
+(the) 545.78 506.66 T
+(ja) 207 494.66 T
+(v) 214.02 494.66 T
+(ax.acti) 218.77 494.66 T
+(v) 244.9 494.66 T
+(ation.CommandObject.setCommandConte) 249.65 494.66 T
+(xt method.) 419.5 494.66 T
+0 F
+(7.9) 184.1 464.66 T
+(Command V) 207 464.66 T
+(erbs) 264.84 464.66 T
+72 609/G264920 FmPA
+1 F
+(The) 207 440.66 T
+(MailcapCommandMap) 226.29 440.66 T
+(implementation) 322.8 440.66 T
+(pro) 389.32 440.66 T
+(vides) 402.5 440.66 T
+(a) 427.35 440.66 T
+(mechanism) 435.53 440.66 T
+(that) 484.82 440.66 T
+(allo) 503.56 440.66 T
+(ws) 518.31 440.66 T
+(for) 533.16 440.66 T
+(an) 548.56 440.66 T
+72 585/G264921 FmPA
+(e) 207 428.66 T
+(xtensible) 211.29 428.66 T
+(set) 250.35 428.66 T
+(of) 264.41 428.66 T
+(command) 275.68 428.66 T
+(v) 318.07 428.66 T
+(erbs.) 322.92 428.66 T
+(Applications) 345.03 428.66 T
+(using) 399.09 428.66 T
+(the) 423.71 428.66 T
+(J) 438.88 428.66 T
+(AF) 442.17 428.66 T
+(can) 457.9 428.66 T
+(query) 474.72 428.66 T
+(the) 500.44 428.66 T
+(system) 515.61 428.66 T
+(for) 546.34 428.66 T
+(commands) 207 416.66 T
+(a) 253.2 416.66 T
+(v) 257.44 416.66 T
+(ailable) 262.19 416.66 T
+(for) 291.72 416.66 T
+(a) 306.25 416.66 T
+(particular) 313.56 416.66 T
+(MIME) 354.75 416.66 T
+(type,) 384.83 416.66 T
+(and) 407.42 416.66 T
+(retrie) 424.73 416.66 T
+(v) 445.58 416.66 T
+(e) 450.43 416.66 T
+(the) 457.74 416.66 T
+(Bean) 472.83 416.66 T
+(associated) 496.25 416.66 T
+(with) 540.22 416.66 T
+(that MIME type.) 207 404.66 T
+72 361.33 558 364.33 C
+0 0 0 1 0 0 0 1 K
+207 363.48 558 363.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 363.48 198 363.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(8.0) 181.32 368.33 T
+(Frame) 207 368.33 T
+(w) 242.83 368.33 T
+(ork Integration P) 251.93 368.33 T
+(oints) 346.8 368.33 T
+72 512/G265985 FmPA
+1 10 Q
+(This) 207 340.66 T
+(section) 227.85 340.66 T
+(presents) 259.25 340.66 T
+(se) 295.09 340.66 T
+(v) 303.17 340.66 T
+(eral) 308.02 340.66 T
+(e) 326.08 340.66 T
+(xamples) 330.37 340.66 T
+(which) 366.77 340.66 T
+(clarify) 394.29 340.66 T
+(ho) 423.46 340.66 T
+(w) 433.21 340.66 T
+(Ja) 443.5 340.66 T
+(v) 451.63 340.66 T
+(aBeans\252) 456.38 340.66 T
+(de) 498.13 340.66 T
+(v) 507.32 340.66 T
+(elopers) 512.17 340.66 T
+(can) 544.12 340.66 T
+72 485/G266278 FmPA
+(write Beans that are inte) 207 328.66 T
+(grated with the J) 304.05 328.66 T
+(AF) 369.83 328.66 T
+(.) 381.81 328.66 T
+(First,) 207 304.66 T
+(let\325) 230.29 304.66 T
+(s) 243.07 304.66 T
+(re) 249.41 304.66 T
+(vie) 256.93 304.66 T
+(w) 268.9 304.66 T
+(the) 278.56 304.66 T
+(plugg) 293.23 304.66 T
+(able) 315.96 304.66 T
+(components) 335.07 304.66 T
+(of) 385.85 304.66 T
+(the) 396.63 304.66 T
+(Ja) 411.29 304.66 T
+(v) 419.42 304.66 T
+(aBeans\252) 424.17 304.66 T
+(Acti) 465.3 304.66 T
+(v) 482.27 304.66 T
+(ation) 487.02 304.66 T
+(Frame) 509.47 304.66 T
+(w) 534.77 304.66 T
+(ork:) 541.89 304.66 T
+72 449/G266323 FmPA
+5 11 Q
+(\245) 207 285.99 T
+1 10 Q
+(A mechanism that accesses tar) 220.74 285.99 T
+(get data where it is stored:  DataSource) 342.75 285.99 T
+72 430/G266280 FmPA
+5 11 Q
+(\245) 207 269.99 T
+1 10 Q
+(A mechanism to con) 220.74 269.99 T
+(v) 302.83 269.99 T
+(ert data objects to and from an e) 307.68 269.99 T
+(xternal byte stream format:) 436.11 269.99 T
+72 414/G266343 FmPA
+(DataContentHandler) 220.74 257.66 T
+5 11 Q
+(\245) 207 241.99 T
+1 10 Q
+(A mechanism to locate visual components that operate on data objects:) 220.74 241.99 T
+72 386/G266346 FmPA
+(CommandMap) 220.74 229.66 T
+5 11 Q
+(\245) 207 213.99 T
+1 10 Q
+(The visual components that operate on data objects:  J) 220.74 213.99 T
+(AF-a) 436.5 213.99 T
+(w) 456.9 213.99 T
+(are Beans) 464.02 213.99 T
+72 358/G266349 FmPA
+(As) 207 189.66 T
+(a) 223.27 189.66 T
+(Ja) 232.88 189.66 T
+(v) 241.01 189.66 T
+(aBeans\252) 245.76 189.66 T
+(de) 289.61 189.66 T
+(v) 298.8 189.66 T
+(eloper) 303.64 189.66 T
+(,) 328.23 189.66 T
+(you) 335.9 189.66 T
+(may) 356.07 189.66 T
+(b) 378.45 189.66 T
+(uild) 383.25 189.66 T
+(visual) 403.98 189.66 T
+(Beans.) 433.03 189.66 T
+(Y) 465.14 189.66 T
+(ou) 471.26 189.66 T
+(can) 486.42 189.66 T
+(also) 505.46 189.66 T
+(de) 526.74 189.66 T
+(v) 535.93 189.66 T
+(elop) 540.78 189.66 T
+72 334/G266281 FmPA
+(DataContentHandlers) 207 177.66 T
+(to) 296.69 177.66 T
+(supply) 307.5 177.66 T
+(data) 337.21 177.66 T
+(to) 356.91 177.66 T
+(those) 367.72 177.66 T
+(Beans.) 391.87 177.66 T
+(Y) 421.85 177.66 T
+(ou) 427.97 177.66 T
+(might) 441.01 177.66 T
+(also) 467.38 177.66 T
+(need) 486.53 177.66 T
+(to) 508.45 177.66 T
+(de) 519.26 177.66 T
+(v) 528.45 177.66 T
+(elop) 533.3 177.66 T
+(a) 553.56 177.66 T
+(ne) 207 165.66 T
+(w DataSource or CommandMap class to access data and specify a data type.) 216.19 165.66 T
+0 F
+(8.1) 184.1 135.66 T
+(Bean) 207 135.66 T
+72 280/G266282 FmPA
+1 F
+(Suppose) 207 111.66 T
+(you\325) 243.41 111.66 T
+(re) 261.24 111.66 T
+(b) 271.54 111.66 T
+(uilding) 276.33 111.66 T
+(a) 307.2 111.66 T
+(ne) 314.16 111.66 T
+(w) 323.35 111.66 T
+(W) 333.09 111.66 T
+(ombat) 341.73 111.66 T
+(Editor) 369.26 111.66 T
+(product,) 396.78 111.66 T
+(with) 432.35 111.66 T
+(its) 452.65 111.66 T
+(corresponding) 464.63 111.66 T
+(W) 524.36 111.66 T
+(ombat) 533 111.66 T
+72 256/G266352 FmPA
+(\336le) 207 99.66 T
+(format.) 222.33 99.66 T
+(Y) 254.04 99.66 T
+(ou\325) 260.16 99.66 T
+(v) 272.99 99.66 T
+(e) 277.84 99.66 T
+(b) 284.83 99.66 T
+(uilt) 289.63 99.66 T
+(the) 305.52 99.66 T
+(W) 320.29 99.66 T
+(ombat) 328.93 99.66 T
+(Editor) 356.48 99.66 T
+(as) 384.03 99.66 T
+(one) 394.91 99.66 T
+(big) 411.9 99.66 T
+(Bean.) 427.23 99.66 T
+(Y) 452.83 99.66 T
+(our) 458.95 99.66 T
+(W) 474.83 99.66 T
+(ombatBean) 483.47 99.66 T
+(can) 531.57 99.66 T
+(do) 548 99.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.21/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "21" 21
+%%Page: "22" 22
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 189 739.85 T
+(w) 215.87 739.85 T
+(ork Integration P) 222.7 739.85 T
+(oints) 293.85 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(22) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+1 10 Q
+(an) 189 680.66 T
+(ything) 198.29 680.66 T
+(and) 227.2 680.66 T
+(e) 244.99 680.66 T
+(v) 249.18 680.66 T
+(erything) 254.03 680.66 T
+(that) 290.71 680.66 T
+(you) 309.06 680.66 T
+(might) 327.41 680.66 T
+(w) 354.1 680.66 T
+(ant) 361.22 680.66 T
+(to) 376.79 680.66 T
+(do) 387.92 680.66 T
+(with) 401.26 680.66 T
+(a) 422.39 680.66 T
+(W) 430.18 680.66 T
+(ombat.) 438.82 680.66 T
+(It) 469.67 680.66 T
+(can) 479.13 680.66 T
+(edit,) 496.36 680.66 T
+(it) 517.21 680.66 T
+(can) 526.12 680.66 T
+(print,) 189 668.66 T
+(it) 213.49 668.66 T
+(can) 222.16 668.66 T
+(vie) 239.14 668.66 T
+(w) 251.11 668.66 T
+(,) 257.68 668.66 T
+(it) 263.29 668.66 T
+(can) 271.95 668.66 T
+(sa) 288.94 668.66 T
+(v) 297.07 668.66 T
+(e) 301.92 668.66 T
+(W) 309.46 668.66 T
+(ombats) 318.1 668.66 T
+(to) 350.1 668.66 T
+(\336les,) 360.98 668.66 T
+(and) 383.26 668.66 T
+(it) 400.8 668.66 T
+(can) 409.47 668.66 T
+(read) 426.45 668.66 T
+(W) 446.77 668.66 T
+(ombats) 455.41 668.66 T
+(in) 487.4 668.66 T
+(from) 498.29 668.66 T
+(\336les.) 520.83 668.66 T
+(Y) 189 656.66 T
+(ou\325) 195.12 656.66 T
+(v) 207.95 656.66 T
+(e) 212.8 656.66 T
+(de\336ned) 220.15 656.66 T
+(a) 252.51 656.66 T
+(language-independent) 259.86 656.66 T
+(W) 351.08 656.66 T
+(ombat) 359.72 656.66 T
+(\336le) 387.64 656.66 T
+(format.) 403.33 656.66 T
+(Y) 435.4 656.66 T
+(ou) 441.52 656.66 T
+(consider) 454.43 656.66 T
+(the) 491.23 656.66 T
+(W) 506.36 656.66 T
+(ombat) 515 656.66 T
+(data) 189 644.66 T
+(and) 209.99 644.66 T
+(\336le) 228.75 644.66 T
+(formats) 245.86 644.66 T
+(to) 280.73 644.66 T
+(be) 292.84 644.66 T
+(proprietary) 306.6 644.66 T
+(so) 355.36 644.66 T
+(you) 368.58 644.66 T
+(ha) 387.9 644.66 T
+(v) 397.14 644.66 T
+(e) 401.99 644.66 T
+(no) 410.76 644.66 T
+(need) 425.08 644.66 T
+(to) 448.29 644.66 T
+(of) 460.39 644.66 T
+(fer) 468.47 644.66 T
+(programmatic) 483.9 644.66 T
+(interf) 189 632.66 T
+(aces to W) 210.56 632.66 T
+(ombats be) 249.19 632.66 T
+(yond what your W) 289.87 632.66 T
+(ombatBean supports.) 363.78 632.66 T
+(Y) 189 608.66 T
+(ou\325) 195.12 608.66 T
+(v) 207.95 608.66 T
+(e) 212.8 608.66 T
+(chosen) 220.83 608.66 T
+(the) 252.2 608.66 T
+(MIME) 268.01 608.66 T
+(type) 298.82 608.66 T
+(\322application/x-w) 319.64 608.66 T
+(ombat\323) 386.74 608.66 T
+(to) 419.78 608.66 T
+(describe) 431.15 608.66 T
+(your) 468.06 608.66 T
+(W) 489.99 608.66 T
+(ombat) 498.63 608.66 T
+(\336le) 527.22 608.66 T
+54 753/G266284 FmPA
+(format,) 189 596.66 T
+(and) 220.62 596.66 T
+(you\325) 237.51 596.66 T
+(v) 255.35 596.66 T
+(e) 260.2 596.66 T
+(chosen) 267.09 596.66 T
+(the) 297.32 596.66 T
+(\336lename) 312 596.66 T
+(e) 348.9 596.66 T
+(xtension) 353.19 596.66 T
+(\322.w) 389.53 596.66 T
+(om\323) 403.59 596.66 T
+(to) 423.27 596.66 T
+(be) 433.51 596.66 T
+(used) 445.41 596.66 T
+(by) 466.19 596.66 T
+(\336les) 478.65 596.66 T
+(containing) 497.78 596.66 T
+(W) 189 584.66 T
+(ombats.) 197.64 584.66 T
+(T) 189 560.66 T
+(o) 194.31 560.66 T
+(inte) 205.92 560.66 T
+(grate) 220.77 560.66 T
+(with) 247.38 560.66 T
+(the) 271.77 560.66 T
+(frame) 290.6 560.66 T
+(w) 313.67 560.66 T
+(ork,) 320.79 560.66 T
+(you\325) 343.23 560.66 T
+(ll) 361.46 560.66 T
+(need) 373.64 560.66 T
+(some) 399.13 560.66 T
+(simple) 426.85 560.66 T
+(wrappers) 460.13 560.66 T
+(for) 503.4 560.66 T
+(your) 521.67 560.66 T
+54 705/G266285 FmPA
+(W) 189 548.66 T
+(ombatBean) 197.64 548.66 T
+(for) 247.73 548.66 T
+(each) 263.93 548.66 T
+(command) 286.79 548.66 T
+(you) 330.77 548.66 T
+(w) 350.31 548.66 T
+(ant) 357.43 548.66 T
+(to) 374.18 548.66 T
+(implement.) 386.5 548.66 T
+(F) 436.32 548.66 T
+(or) 441.73 548.66 T
+(e) 454.6 548.66 T
+(xample,) 458.89 548.66 T
+(for) 495.37 548.66 T
+(a) 511.57 548.66 T
+(Print) 520.55 548.66 T
+(command wrapper you can write the follo) 189 536.66 T
+(wing code:) 356.49 536.66 T
+7 9 Q
+(public class WombatPrintBean extends WombatBean {) 198 519.33 T
+54 663/G266286 FmPA
+(    public WombatPrintBean\050\051 {) 198 508.33 T
+54 652/G266356 FmPA
+(          super\050\051;) 198 497.33 T
+54 641/G266357 FmPA
+(          initPrinting\050\051;) 198 486.33 T
+54 630/G266358 FmPA
+(      }) 198 475.33 T
+54 619/G266359 FmPA
+(  }) 198 464.33 T
+54 608/G266360 FmPA
+1 10 Q
+(Y) 189 440.66 T
+(ou) 195.12 440.66 T
+(will) 207.86 440.66 T
+(need) 226.15 440.66 T
+(to) 247.77 440.66 T
+(create) 258.29 440.66 T
+(a) 284.89 440.66 T
+(mailcap) 292.07 440.66 T
+(\336le) 326.47 440.66 T
+(that) 341.98 440.66 T
+(lists) 359.72 440.66 T
+(the) 378.58 440.66 T
+(MIME) 393.54 440.66 T
+(type) 423.49 440.66 T
+(\322application/x-w) 443.45 440.66 T
+(ombat\323) 510.56 440.66 T
+54 585/G266287 FmPA
+(and) 189 428.66 T
+(user) 211.32 428.66 T
+(visible) 235.86 428.66 T
+(commands) 270.4 428.66 T
+(that) 321.61 428.66 T
+(are) 344.49 428.66 T
+(supported) 364.58 428.66 T
+(by) 411.9 428.66 T
+(your) 429.77 428.66 T
+(W) 455.98 428.66 T
+(ombatBean.) 464.62 428.66 T
+(Y) 520.55 428.66 T
+(our) 526.67 428.66 T
+(W) 189 416.66 T
+(ombatBean) 197.64 416.66 T
+(wrappers) 245.59 416.66 T
+(will) 284.64 416.66 T
+(be) 302.6 416.66 T
+(listed) 314.44 416.66 T
+(as) 338.51 416.66 T
+(the) 349.24 416.66 T
+(objects) 363.86 416.66 T
+(supporting) 394.59 416.66 T
+(each) 439.77 416.66 T
+(of) 460.49 416.66 T
+(these) 471.22 416.66 T
+(commands.) 494.17 416.66 T
+7 9 Q
+(application/x-wombat; ; x-java-view=com.foo.WombatViewBean; \134) 198 399.33 T
+54 543/G266288 FmPA
+(    x-java-edit=com.foo.WombatEditBean; \134) 198 388.33 T
+54 532/G266364 FmPA
+(   x-java-print=com.foo.WombatPrintBean) 203.4 377.33 T
+54 521/G266365 FmPA
+1 10 Q
+(Y) 189 353.66 T
+(ou\325) 195.12 353.66 T
+(ll also need to create a mime.types \336le with an entry:) 208.35 353.66 T
+54 498/G266289 FmPA
+7 9 Q
+(type=application/x-wombat desc=\323Wombat\323 exts=wom) 198 336.33 T
+54 480/G266290 FmPA
+1 10 Q
+(All of these components are packaged in a J) 189 312.66 T
+(AR \336le:) 364.47 312.66 T
+54 457/G266291 FmPA
+7 9 Q
+(META-INF/mailcap) 198 295.33 T
+54 439/G266292 FmPA
+(META-INF/mime.types) 198 284.33 T
+54 428/G266366 FmPA
+(com/foo/WombatBean.class) 198 273.33 T
+54 417/G266367 FmPA
+(com/foo/WombetEditBean.class) 198 262.33 T
+54 406/G266635 FmPA
+(com/foo/WombatViewBean.class) 198 251.33 T
+54 395/G266631 FmPA
+1 10 Q
+(Because) 189 227.66 T
+(e) 226.14 227.66 T
+(v) 230.33 227.66 T
+(erything) 235.18 227.66 T
+(is) 272.33 227.66 T
+(b) 282.82 227.66 T
+(uilt) 287.61 227.66 T
+(into) 304.77 227.66 T
+(one) 324.15 227.66 T
+(Bean,) 342.41 227.66 T
+(and) 369.28 227.66 T
+(because) 387.54 227.66 T
+(no) 423.01 227.66 T
+(third) 436.82 227.66 T
+(party) 459.53 227.66 T
+(programmatic) 483.9 227.66 T
+54 372/G266293 FmPA
+(access) 189 215.66 T
+(to) 217.75 215.66 T
+(your) 228.74 215.66 T
+(W) 250.29 215.66 T
+(ombat) 258.92 215.66 T
+(objects) 287.14 215.66 T
+(is) 318.68 215.66 T
+(required,) 328.56 215.66 T
+(there\325) 367.59 215.66 T
+(s) 390.36 215.66 T
+(no) 397.46 215.66 T
+(need) 410.67 215.66 T
+(for) 432.77 215.66 T
+(a) 447.64 215.66 T
+(DataContentHandler) 455.29 215.66 T
+(.) 537.5 215.66 T
+(Y) 189 203.66 T
+(our) 195.12 203.66 T
+(W) 212.25 203.66 T
+(ombatBean) 220.89 203.66 T
+(can) 270.24 203.66 T
+(therefore) 287.92 203.66 T
+(implement) 327.81 203.66 T
+(the) 374.39 203.66 T
+(Externalizable) 390.41 203.66 T
+(interf) 451.97 203.66 T
+(ace) 473.53 203.66 T
+(instead;) 490.65 203.66 T
+(and) 525.56 203.66 T
+(use) 189 191.66 T
+(its) 206.33 191.66 T
+(methods) 219.78 191.66 T
+(to) 257.68 191.66 T
+(read) 269.46 191.66 T
+(and) 290.67 191.66 T
+(write) 309.11 191.66 T
+(your) 333.67 191.66 T
+(W) 356 191.66 T
+(ombat) 364.64 191.66 T
+(\336les.) 393.64 191.66 T
+(The) 416.81 191.66 T
+(DataHandler) 436.36 191.66 T
+(can) 491.46 191.66 T
+(call) 509.34 191.66 T
+(the) 527.78 191.66 T
+(Externalizable methods when appropriate.) 189 179.66 T
+0 F
+(8.2) 166.1 149.66 T
+(Beans) 189 149.66 T
+54 294/G266294 FmPA
+1 F
+(Y) 189 125.66 T
+(our) 195.12 125.66 T
+(W) 212.19 125.66 T
+(ombat) 220.83 125.66 T
+(Editor) 249.57 125.66 T
+(product) 278.31 125.66 T
+(has) 312.6 125.66 T
+(really) 329.67 125.66 T
+(tak) 356.18 125.66 T
+(en) 368.3 125.66 T
+(of) 381.49 125.66 T
+(f,) 389.57 125.66 T
+(and) 399.14 125.66 T
+(you\325) 417.32 125.66 T
+(re) 435.15 125.66 T
+(no) 446.66 125.66 T
+(w) 456.41 125.66 T
+(adding) 467.37 125.66 T
+(signi\336cant) 498.33 125.66 T
+54 270/G266295 FmPA
+(ne) 189 113.66 T
+(w) 198.19 113.66 T
+(functionality) 208.76 113.66 T
+(and) 263.23 113.66 T
+(\337e) 281.02 113.66 T
+(xibility) 290.87 113.66 T
+(to) 323.12 113.66 T
+(your) 334.26 113.66 T
+(W) 355.94 113.66 T
+(ombat) 364.58 113.66 T
+(Editor) 392.94 113.66 T
+(.) 417.39 113.66 T
+(It\325) 423.24 113.66 T
+(s) 432.13 113.66 T
+(no) 439.37 113.66 T
+(longer) 452.73 113.66 T
+(feasible) 481.63 113.66 T
+(to) 516.09 113.66 T
+(put) 527.22 113.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.22/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "22" 22
+%%Page: "23" 23
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 207 739.85 T
+(w) 233.87 739.85 T
+(ork Integration P) 240.7 739.85 T
+(oints) 311.85 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(23) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+1 F
+(e) 207 680.66 T
+(v) 211.19 680.66 T
+(erything) 216.04 680.66 T
+(into) 253.04 680.66 T
+(one) 272.28 680.66 T
+(giant) 290.39 680.66 T
+(Bean.) 314.07 680.66 T
+(Instead,) 340.79 680.66 T
+(you\325) 375.84 680.66 T
+(v) 393.67 680.66 T
+(e) 398.52 680.66 T
+(brok) 406.64 680.66 T
+(en) 424.87 680.66 T
+(the) 437.98 680.66 T
+(product) 453.88 680.66 T
+(into) 488.1 680.66 T
+(a) 507.33 680.66 T
+(number) 515.45 680.66 T
+(of) 549.67 680.66 T
+(Beans and other components:) 207 668.66 T
+5 11 Q
+(\245) 207 649.99 T
+1 10 Q
+(A W) 220.74 649.99 T
+(ombatV) 239.1 649.99 T
+(ie) 270.73 649.99 T
+(wer Bean that can be used to quickly vie) 277.7 649.99 T
+(w a W) 439.63 649.99 T
+(ombat in read-only) 464.93 649.99 T
+72 794/G266378 FmPA
+(mode.) 220.74 637.66 T
+5 11 Q
+(\245) 207 621.99 T
+1 10 Q
+(A W) 220.74 621.99 T
+(ombatEditor Bean that is hea) 239.1 621.99 T
+(vier than the W) 355 621.99 T
+(ombatV) 416.13 621.99 T
+(ie) 447.75 621.99 T
+(wer) 454.72 621.99 T
+(, b) 469.31 621.99 T
+(ut also allo) 479.11 621.99 T
+(ws) 522.75 621.99 T
+72 766/G266372 FmPA
+(editing.) 220.74 609.66 T
+5 11 Q
+(\245) 207 593.99 T
+1 10 Q
+(A W) 220.74 593.99 T
+(ombatPrinter Bean that simply prints a W) 239.1 593.99 T
+(ombat.) 404.96 593.99 T
+72 738/G266384 FmPA
+5 11 Q
+(\245) 207 577.99 T
+1 10 Q
+(A component that reads and writes W) 220.74 577.99 T
+(ombat \336les.) 371.02 577.99 T
+72 722/G266381 FmPA
+5 11 Q
+(\245) 207 561.99 T
+1 10 Q
+(A) 220.74 561.99 T
+(W) 230.37 561.99 T
+(ombat) 239.01 561.99 T
+(class) 266.42 561.99 T
+(that) 288.27 561.99 T
+(encapsulates) 305.68 561.99 T
+(the) 358.63 561.99 T
+(W) 373.26 561.99 T
+(ombat) 381.9 561.99 T
+(data) 409.31 561.99 T
+(and) 428.38 561.99 T
+(is) 445.23 561.99 T
+(used) 454.3 561.99 T
+(by) 475.04 561.99 T
+(your) 487.45 561.99 T
+(other) 508.19 561.99 T
+(Beans) 531.15 561.99 T
+72 706/G266387 FmPA
+(and components.) 220.74 549.66 T
+(In) 207 525.66 T
+(addition,) 220.33 525.66 T
+(customers) 260.61 525.66 T
+(ha) 306.16 525.66 T
+(v) 315.4 525.66 T
+(e) 320.25 525.66 T
+(demanded) 329.69 525.66 T
+(to) 375.8 525.66 T
+(be) 388.58 525.66 T
+(able) 403.02 525.66 T
+(to) 424.68 525.66 T
+(programmatically) 437.46 525.66 T
+(manipulate) 513.56 525.66 T
+72 670/G266297 FmPA
+(W) 207 513.66 T
+(ombats,) 215.64 513.66 T
+(independently) 249.59 513.66 T
+(from) 308.82 513.66 T
+(the) 330.82 513.66 T
+(visual) 345.6 513.66 T
+(vie) 372.05 513.66 T
+(wer) 384.02 513.66 T
+(or) 401.58 513.66 T
+(editor) 412.47 513.66 T
+(Beans.) 438.36 513.66 T
+(Y) 467.87 513.66 T
+(ou\325) 473.99 513.66 T
+(ll) 487.22 513.66 T
+(need) 495.34 513.66 T
+(to) 516.78 513.66 T
+(create) 527.13 513.66 T
+(a) 553.56 513.66 T
+(DataContentHandler) 207 501.66 T
+(that) 292.15 501.66 T
+(can) 309.54 501.66 T
+(con) 325.8 501.66 T
+(v) 339.84 501.66 T
+(ert) 344.69 501.66 T
+(a) 357.63 501.66 T
+(byte) 364.46 501.66 T
+(stream) 384.07 501.66 T
+(to) 413.11 501.66 T
+(and) 423.28 501.66 T
+(from) 440.11 501.66 T
+(a) 461.94 501.66 T
+(W) 468.76 501.66 T
+(ombat) 477.4 501.66 T
+(object.) 504.79 501.66 T
+(When) 534.12 501.66 T
+(reading,) 207 489.66 T
+(the) 245.23 489.66 T
+(W) 263.19 489.66 T
+(ombatDataContentHandler) 271.83 489.66 T
+(reads) 385.33 489.66 T
+(a) 412.17 489.66 T
+(byte) 422.36 489.66 T
+(stream) 445.32 489.66 T
+(and) 477.72 489.66 T
+(returns) 497.9 489.66 T
+(a) 531.41 489.66 T
+(ne) 541.59 489.66 T
+(w) 550.78 489.66 T
+(W) 207 477.66 T
+(ombat) 215.64 477.66 T
+(object.) 243.26 477.66 T
+(When) 272.82 477.66 T
+(writing,) 299.31 477.66 T
+(the) 333.32 477.66 T
+(W) 348.16 477.66 T
+(ombatDataContentHandler) 356.8 477.66 T
+(tak) 467.18 477.66 T
+(es) 479.3 477.66 T
+(a) 490.24 477.66 T
+(W) 497.3 477.66 T
+(ombat) 505.94 477.66 T
+(object) 533.56 477.66 T
+(and) 207 465.66 T
+(produces) 226.29 465.66 T
+(a) 267.24 465.66 T
+(corresponding) 276.54 465.66 T
+(byte) 338.6 465.66 T
+(stream.) 360.67 465.66 T
+(Y) 394.68 465.66 T
+(ou\325) 400.8 465.66 T
+(ll) 414.03 465.66 T
+(need) 424.45 465.66 T
+(to) 448.18 465.66 T
+(publish) 460.81 465.66 T
+(the) 495.11 465.66 T
+(API) 512.18 465.66 T
+(to) 533.15 465.66 T
+(the) 545.78 465.66 T
+(W) 207 453.66 T
+(ombat class.) 215.64 453.66 T
+(The) 207 429.66 T
+(W) 228.62 429.66 T
+(ombatDataContentHandler) 237.26 429.66 T
+(is) 351.08 429.66 T
+(deli) 363.81 429.66 T
+(v) 378.56 429.66 T
+(ered) 383.41 429.66 T
+(as) 406.69 429.66 T
+(a) 421.08 429.66 T
+(class) 431.59 429.66 T
+(and) 457.09 429.66 T
+(is) 477.6 429.66 T
+(designated) 490.33 429.66 T
+(as) 539.16 429.66 T
+(a) 553.56 429.66 T
+72 574/G266298 FmPA
+(DataContentHandler) 207 417.66 T
+(that) 292.97 417.66 T
+(can) 311.19 417.66 T
+(operate) 328.28 417.66 T
+(on) 360.92 417.66 T
+(W) 374.14 417.66 T
+(ombats) 382.78 417.66 T
+(in) 414.88 417.66 T
+(the) 425.87 417.66 T
+(mailcap) 441.31 417.66 T
+(\336le) 476.18 417.66 T
+(included) 492.17 417.66 T
+(in) 529.83 417.66 T
+(J) 540.82 417.66 T
+(AR) 544.11 417.66 T
+(\336le.) 207 405.66 T
+(Y) 207 381.66 T
+(our) 213.12 381.66 T
+(mailcap) 229.17 381.66 T
+(\336le) 263.55 381.66 T
+(changes) 279.06 381.66 T
+(to) 313.99 381.66 T
+(list) 324.49 381.66 T
+(the) 339.45 381.66 T
+(appropriate) 354.39 381.66 T
+(W) 402.65 381.66 T
+(ombat) 411.29 381.66 T
+(Beans,) 439.01 381.66 T
+(which) 468.67 381.66 T
+(implement) 495.84 381.66 T
+(user) 541.34 381.66 T
+72 526/G266299 FmPA
+(commands:) 207 369.66 T
+7 9 Q
+(application/x-wombat;) 216 352.33 T
+(;) 331.61 352.33 T
+(x-java-View=com.foo.WombatViewBean;) 339.23 352.33 T
+(\134) 530.45 352.33 T
+72 496/G266300 FmPA
+(x-java-edit=com.foo.WombatEditBean;   \134) 216 341.33 T
+(         x-java-print=com.foo.WombatPrintBean; \134) 216 330.33 T
+72 474/G266388 FmPA
+(x-java-content-handler=com.foo.WombatDataContentHandler) 261 319.33 T
+72 463/G266650 FmPA
+1 10 Q
+(Y) 207 295.66 T
+(our) 213.12 295.66 T
+(W) 229.73 295.66 T
+(ombat) 238.37 295.66 T
+(Beans) 266.66 295.66 T
+(can) 294.38 295.66 T
+(continue) 311.54 295.66 T
+(to) 349.27 295.66 T
+(implement) 360.33 295.66 T
+(the) 406.39 295.66 T
+(Externalizable) 421.9 295.66 T
+(interf) 482.94 295.66 T
+(ace,) 504.5 295.66 T
+(and) 523.61 295.66 T
+(thus) 541.33 295.66 T
+72 440/G266302 FmPA
+(read) 207 283.66 T
+(and) 229.18 283.66 T
+(write) 248.59 283.66 T
+(W) 274.11 283.66 T
+(ombat) 282.75 283.66 T
+(byte) 312.72 283.66 T
+(streams.) 334.91 283.66 T
+(The) 372.93 283.66 T
+(y) 388.33 283.66 T
+(are) 398.3 283.66 T
+(more) 415.48 283.66 T
+(lik) 441 283.66 T
+(ely) 451.46 283.66 T
+(to) 468.65 283.66 T
+(simply) 481.4 283.66 T
+(operate) 513.6 283.66 T
+(on) 548 283.66 T
+(W) 207 271.66 T
+(ombat) 215.64 271.66 T
+(objects) 242.9 271.66 T
+(directly) 273.48 271.66 T
+(.) 303.38 271.66 T
+(T) 308.14 271.66 T
+(o) 313.45 271.66 T
+(\336nd) 320.71 271.66 T
+(the) 338.52 271.66 T
+(W) 353 271.66 T
+(ombat) 361.64 271.66 T
+(object) 388.9 271.66 T
+(the) 415.6 271.66 T
+(y\325) 427.67 271.66 T
+(re) 435.49 271.66 T
+(being) 445.52 271.66 T
+(in) 470 271.66 T
+(v) 477.38 271.66 T
+(ok) 482.18 271.66 T
+(ed) 492.08 271.66 T
+(to) 503.78 271.66 T
+(operate) 513.81 271.66 T
+(on,) 545.5 271.66 T
+(the) 207 259.66 T
+(y) 219.07 259.66 T
+(implement) 226.65 259.66 T
+(the) 272 259.66 T
+(CommandObject) 286.8 259.66 T
+(interf) 357.7 259.66 T
+(ace.) 379.27 259.66 T
+(The) 397.66 259.66 T
+(setCommandConte) 415.79 259.66 T
+(xt) 492.31 259.66 T
+(method) 502.66 259.66 T
+(refers) 535.24 259.66 T
+(them) 207 247.66 T
+(to) 230.92 247.66 T
+(the) 242.62 247.66 T
+(corresponding) 258.77 247.66 T
+(DataHandler) 319.9 247.66 T
+(,) 370.59 247.66 T
+(from) 377.01 247.66 T
+(which) 400.37 247.66 T
+(the) 428.73 247.66 T
+(y) 440.8 247.66 T
+(can) 449.72 247.66 T
+(in) 467.53 247.66 T
+(v) 474.91 247.66 T
+(ok) 479.71 247.66 T
+(e) 489.61 247.66 T
+(the) 497.97 247.66 T
+(getContent) 514.11 247.66 T
+(method,) 207 235.66 T
+(which) 246.85 235.66 T
+(will) 278.64 235.66 T
+(return) 301.55 235.66 T
+(a) 332.78 235.66 T
+(W) 344.57 235.66 T
+(ombat) 353.2 235.66 T
+(object) 385.55 235.66 T
+(\050produced) 417.34 235.66 T
+(by) 465.23 235.66 T
+(the) 482.58 235.66 T
+(W) 502.15 235.66 T
+(ombatData-) 510.79 235.66 T
+(ContentHandler\051.) 207 223.66 T
+(All components are packaged in a J) 207 199.66 T
+(AR \336le.) 348.59 199.66 T
+72 344/G266303 FmPA
+0 F
+(8.3) 184.1 169.66 T
+( Vie) 207 169.66 T
+(wer Onl) 224.64 169.66 T
+(y) 261.17 169.66 T
+72 314/G266304 FmPA
+1 F
+(The) 207 145.66 T
+(W) 225.97 145.66 T
+(ombat) 234.61 145.66 T
+(product) 263.02 145.66 T
+(has) 296.99 145.66 T
+(been) 313.73 145.66 T
+(wildly) 336.03 145.66 T
+(successful.) 365.01 145.66 T
+(The) 412.02 145.66 T
+(V) 430.99 145.66 T
+(ie) 437.61 145.66 T
+(wAll) 444.58 145.66 T
+(Compan) 468 145.66 T
+(y) 501.74 145.66 T
+(has) 510.15 145.66 T
+(decided) 526.9 145.66 T
+72 290/G266305 FmPA
+(that) 207 133.66 T
+(it) 224.97 133.66 T
+(can) 233.5 133.66 T
+(produce) 250.35 133.66 T
+(a) 285.53 133.66 T
+(W) 292.94 133.66 T
+(ombat) 301.58 133.66 T
+(vie) 329.55 133.66 T
+(wer) 341.52 133.66 T
+(that\325) 359.48 133.66 T
+(s) 377.25 133.66 T
+(much) 384.11 133.66 T
+(f) 409.3 133.66 T
+(aster) 412.53 133.66 T
+(than) 434.38 133.66 T
+(the) 454.57 133.66 T
+(W) 469.76 133.66 T
+(ombatV) 478.4 133.66 T
+(ie) 510.02 133.66 T
+(wer) 516.99 133.66 T
+(Bean.) 534.95 133.66 T
+(Since) 207 121.66 T
+(the) 233.23 121.66 T
+(y) 245.3 121.66 T
+(don\325) 254.32 121.66 T
+(t) 272.46 121.66 T
+(w) 279.26 121.66 T
+(ant) 286.38 121.66 T
+(to) 302.61 121.66 T
+(depend) 314.4 121.66 T
+(on) 347.29 121.66 T
+(the) 361.31 121.66 T
+(presence) 377.54 121.66 T
+(of) 416.53 121.66 T
+(an) 428.87 121.66 T
+(y) 438.16 121.66 T
+(W) 447.17 121.66 T
+(ombat) 455.82 121.66 T
+(components,) 484.83 121.66 T
+(their) 539.67 121.66 T
+(vie) 207 109.66 T
+(wer must parse the W) 218.97 109.66 T
+(ombat \336le format, which the) 305.37 109.66 T
+(y re) 418.82 109.66 T
+(v) 433.84 109.66 T
+(erse engineered.) 438.69 109.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.23/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "23" 23
+%%Page: "24" 24
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 189 739.85 T
+(w) 215.87 739.85 T
+(ork Deliverab) 222.7 739.85 T
+(les) 279.63 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(24) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+1 10 Q
+(The) 189 680.66 T
+(V) 207.92 680.66 T
+(ie) 214.54 680.66 T
+(wAll) 221.51 680.66 T
+(W) 244.88 680.66 T
+(ombatV) 253.52 680.66 T
+(ie) 285.14 680.66 T
+(werBean) 292.11 680.66 T
+(implements) 331.03 680.66 T
+(the) 381.07 680.66 T
+(Externalizable) 396.66 680.66 T
+(interf) 457.79 680.66 T
+(ace) 479.35 680.66 T
+(to) 496.05 680.66 T
+(read) 507.2 680.66 T
+(the) 527.78 680.66 T
+54 825/G266306 FmPA
+(W) 189 668.66 T
+(ombat data format.) 197.64 668.66 T
+(V) 189 644.66 T
+(ie) 195.62 644.66 T
+(wAll deli) 202.59 644.66 T
+(v) 239.84 644.66 T
+(ers an appropriate mailcap \336le:) 244.69 644.66 T
+54 789/G266307 FmPA
+7 9 Q
+(application/x-wombat; ; x-java-view=com.viewall.WombatViewer) 198 627.33 T
+54 771/G266308 FmPA
+1 10 Q
+(and mime.types \336le:) 189 603.66 T
+54 748/G266309 FmPA
+7 9 Q
+(type=application/x-wombat desc=\323Wombat\323 exts=wom) 198 586.33 T
+54 730/G266310 FmPA
+1 10 Q
+(All components are packaged in a J) 189 562.66 T
+(AR \336le.) 330.59 562.66 T
+54 707/G266311 FmPA
+0 F
+(8.4) 166.1 532.66 T
+( ContentHandler Bean Onl) 189 532.66 T
+(y) 313.31 532.66 T
+54 677/G266312 FmPA
+1 F
+(No) 189 508.66 T
+(w) 200.97 508.66 T
+(that) 210.79 508.66 T
+(e) 228.4 508.66 T
+(v) 232.59 508.66 T
+(eryone) 237.44 508.66 T
+(is) 267.26 508.66 T
+(using) 276.53 508.66 T
+(W) 300.81 508.66 T
+(ombats,) 309.45 508.66 T
+(you\325) 343.44 508.66 T
+(v) 361.27 508.66 T
+(e) 366.12 508.66 T
+(decided) 373.17 508.66 T
+(that) 406.87 508.66 T
+(it) 424.48 508.66 T
+(w) 432.64 508.66 T
+(ould) 439.76 508.66 T
+(be) 460.15 508.66 T
+(nice) 472.19 508.66 T
+(if) 491.46 508.66 T
+(you) 500.17 508.66 T
+(could) 517.78 508.66 T
+54 653/G266313 FmPA
+(notify) 189 496.66 T
+(people) 217.35 496.66 T
+(by) 248.47 496.66 T
+(email) 262.93 496.66 T
+(when) 289.62 496.66 T
+(ne) 315.74 496.66 T
+(w) 324.93 496.66 T
+(W) 336.61 496.66 T
+(ombats) 345.25 496.66 T
+(are) 378.6 496.66 T
+(created.) 395.27 496.66 T
+(Y) 431.1 496.66 T
+(ou) 437.22 496.66 T
+(ha) 451.68 496.66 T
+(v) 460.92 496.66 T
+(e) 465.77 496.66 T
+(designed) 474.68 496.66 T
+(a) 514.69 496.66 T
+(ne) 523.59 496.66 T
+(w) 532.78 496.66 T
+(W) 189 484.66 T
+(ombatNoti\336cation) 197.64 484.66 T
+(class) 272.83 484.66 T
+(and) 294.67 484.66 T
+(a) 311.52 484.66 T
+(corresponding) 318.37 484.66 T
+(data) 377.98 484.66 T
+(format) 397.05 484.66 T
+(to) 426.12 484.66 T
+(be) 436.3 484.66 T
+(sent) 448.15 484.66 T
+(by) 466.67 484.66 T
+(email) 479.08 484.66 T
+(using) 503.7 484.66 T
+(the) 527.78 484.66 T
+(MIME) 189 472.66 T
+(type) 220.17 472.66 T
+(\322application/x-w) 241.34 472.66 T
+(ombat-noti\336cation\323.) 308.45 472.66 T
+(Y) 393.23 472.66 T
+(our) 399.35 472.66 T
+(serv) 416.62 472.66 T
+(er) 433.14 472.66 T
+(detects) 444.85 472.66 T
+(the) 476.57 472.66 T
+(presence) 492.74 472.66 T
+(of) 531.67 472.66 T
+(ne) 189 460.66 T
+(w) 198.19 460.66 T
+(W) 209.42 460.66 T
+(ombats,) 218.06 460.66 T
+(constructs) 253.46 460.66 T
+(a) 298.03 460.66 T
+(W) 306.48 460.66 T
+(ombatNoti\336cation) 315.12 460.66 T
+(object,) 391.91 460.66 T
+(and) 422.86 460.66 T
+(constructs) 441.31 460.66 T
+(and) 485.88 460.66 T
+(sends) 504.33 460.66 T
+(an) 530.56 460.66 T
+(email) 189 448.66 T
+(message) 213.85 448.66 T
+(with) 250.36 448.66 T
+(the) 270.77 448.66 T
+(W) 285.62 448.66 T
+(ombat) 294.26 448.66 T
+(noti\336cation) 321.89 448.66 T
+(data) 370.08 448.66 T
+(as) 389.37 448.66 T
+(an) 400.33 448.66 T
+(attachment.) 412.4 448.66 T
+(Y) 461.41 448.66 T
+(our) 467.53 448.66 T
+(customers) 483.49 448.66 T
+(run) 526.67 448.66 T
+(a) 189 436.66 T
+(program) 198.7 436.66 T
+(that) 237.83 436.66 T
+(scans) 258.08 436.66 T
+(their) 285 436.66 T
+(email) 308.58 436.66 T
+(INBO) 336.06 436.66 T
+(X) 360.1 436.66 T
+(for) 372.57 436.66 T
+(messages) 389.49 436.66 T
+(with) 432.51 436.66 T
+(W) 455.55 436.66 T
+(ombat) 464.18 436.66 T
+(noti\336cation) 494.44 436.66 T
+(attachments) 189 424.66 T
+(and) 241.34 424.66 T
+(use) 260.36 424.66 T
+(the) 278.26 424.66 T
+(W) 295.05 424.66 T
+(ombatNoti\336cation) 303.69 424.66 T
+(class) 381.04 424.66 T
+(to) 405.05 424.66 T
+(notify) 417.41 424.66 T
+(their) 445.87 424.66 T
+(users) 468.77 424.66 T
+(of) 493.89 424.66 T
+(the) 506.8 424.66 T
+(ne) 523.59 424.66 T
+(w) 532.78 424.66 T
+(W) 189 412.66 T
+(ombats.) 197.64 412.66 T
+(In) 189 388.66 T
+(addition) 202.14 388.66 T
+(to) 239.73 388.66 T
+(the) 252.32 388.66 T
+(serv) 269.34 388.66 T
+(er) 285.85 388.66 T
+(application) 298.43 388.66 T
+(and) 347.68 388.66 T
+(user) 366.93 388.66 T
+(application) 388.4 388.66 T
+(described,) 437.64 388.66 T
+(you\325) 483.27 388.66 T
+(ll) 501.5 388.66 T
+(need) 511.87 388.66 T
+(a) 535.56 388.66 T
+54 533/G266314 FmPA
+(DataContentHandler) 189 376.66 T
+(to) 276.94 376.66 T
+(plug) 289.9 376.66 T
+(into) 312.86 376.66 T
+(the) 333.6 376.66 T
+(DataHandler) 351 376.66 T
+(infrastructure) 407.27 376.66 T
+(and) 466.32 376.66 T
+(construct) 485.94 376.66 T
+(the) 527.78 376.66 T
+(W) 189 364.66 T
+(ombatNoti\336cation) 197.64 364.66 T
+(objects.) 273.01 364.66 T
+(The) 306.43 364.66 T
+(W) 324.57 364.66 T
+(ombatNoti\336cation) 333.21 364.66 T
+(DataContentHandler) 408.58 364.66 T
+(is) 493.93 364.66 T
+(deli) 503.19 364.66 T
+(v) 517.94 364.66 T
+(ered) 522.79 364.66 T
+(as) 189 352.66 T
+(a) 199.86 352.66 T
+(class) 206.83 352.66 T
+(named) 228.8 352.66 T
+(W) 258 352.66 T
+(ombatNoti\336cationDataContentHandler) 266.64 352.66 T
+(and) 424.71 352.66 T
+(is) 441.68 352.66 T
+(deli) 450.88 352.66 T
+(v) 465.63 352.66 T
+(ered) 470.48 352.66 T
+(in) 490.22 352.66 T
+(a) 500.54 352.66 T
+(J) 507.51 352.66 T
+(AR) 510.8 352.66 T
+(\336le) 527.22 352.66 T
+(with the follo) 189 340.66 T
+(wing mailcap \336le:) 242.64 340.66 T
+7 9 Q
+(application/x-wombat-notification; \134) 198 323.33 T
+54 467/G266660 FmPA
+(                          WombatNotificationDataContentHandler) 198 312.33 T
+54 456/G266661 FmPA
+1 10 Q
+(The) 189 288.66 T
+(serv) 208.45 288.66 T
+(er) 224.96 288.66 T
+(application) 236.63 288.66 T
+(creates) 284.96 288.66 T
+(DataHandlers) 316.62 288.66 T
+(for) 375.5 288.66 T
+(its) 391.06 288.66 T
+(W) 404.4 288.66 T
+(ombatNoti\336cation) 413.04 288.66 T
+(objects.) 489.72 288.66 T
+(The) 524.45 288.66 T
+54 433/G266315 FmPA
+(email) 189 276.66 T
+(system) 216.82 276.66 T
+(uses) 250.2 276.66 T
+(the) 273.01 276.66 T
+(DataHandler) 290.83 276.66 T
+(to) 347.52 276.66 T
+(fetch) 360.89 276.66 T
+(a) 386.48 276.66 T
+(byte) 396.52 276.66 T
+(stream) 419.34 276.66 T
+(corresponding) 451.6 276.66 T
+(to) 514.4 276.66 T
+(the) 527.78 276.66 T
+(W) 189 264.66 T
+(ombatNoti\336cation) 197.64 264.66 T
+(object.) 272.91 264.66 T
+(\050The) 302.34 264.66 T
+(DataHandler) 323.71 264.66 T
+(uses) 377.29 264.66 T
+(the) 397 264.66 T
+(DataContentHandler) 411.71 264.66 T
+(to) 496.96 264.66 T
+(do) 507.23 264.66 T
+(this.\051) 519.72 264.66 T
+(The) 189 240.66 T
+(client) 208.33 240.66 T
+(application) 234.33 240.66 T
+(retrie) 282.55 240.66 T
+(v) 303.4 240.66 T
+(es) 308.25 240.66 T
+(a) 320.36 240.66 T
+(DataHandler) 328.58 240.66 T
+(for) 383.45 240.66 T
+(the) 398.9 240.66 T
+(email) 414.9 240.66 T
+(attachment) 440.9 240.66 T
+(and) 488.56 240.66 T
+(uses) 506.78 240.66 T
+(the) 527.78 240.66 T
+54 385/G266316 FmPA
+(getContent) 189 228.66 T
+(method) 237.26 228.66 T
+(to) 271.63 228.66 T
+(get) 283.78 228.66 T
+(the) 300.37 228.66 T
+(corresponding) 316.95 228.66 T
+(W) 378.53 228.66 T
+(ombatNoti\336cation) 387.17 228.66 T
+(object,) 464.32 228.66 T
+(which) 495.63 228.66 T
+(will) 524.44 228.66 T
+(then notify the user) 189 216.66 T
+(.) 265.94 216.66 T
+54 343/G266064 FmPA
+54 155.33 540 158.33 C
+0 0 0 1 0 0 0 1 K
+189 157.48 540 157.48 2 L
+0.25 H
+2 Z
+0 X
+N
+54 157.48 180 157.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(9.0) 163.32 162.33 T
+( Frame) 189 162.33 T
+(w) 228.17 162.33 T
+(ork Deliverab) 237.26 162.33 T
+(les) 313.18 162.33 T
+54 306/G264922 FmPA
+0 10 Q
+(9.1) 166.1 128.66 T
+(P) 189 128.66 T
+(ac) 195.37 128.66 T
+(ka) 206.29 128.66 T
+(ging Details) 217.31 128.66 T
+54 273/G266515 FmPA
+1 F
+(The J) 189 112.66 T
+(AF is implemented as a Standard Extension to the Ja) 210.34 112.66 T
+(v) 420.96 112.66 T
+(a\252 Platform so it can) 425.71 112.66 T
+54 257/G266516 FmPA
+(pro) 189 100.66 T
+(vide functionality to JDK\252 1.1. This strate) 202.18 100.66 T
+(gy allo) 375.71 100.66 T
+(ws the J) 402.96 100.66 T
+(AF to be deli) 434.58 100.66 T
+(v) 486.83 100.66 T
+(ered) 491.68 100.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.24/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "24" 24
+%%Page: "25" 25
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 207 739.85 T
+(w) 233.87 739.85 T
+(ork Deliverab) 240.7 739.85 T
+(les) 297.63 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(25) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+1 F
+(asynchronously) 207 680.66 T
+(from) 272.21 680.66 T
+(the) 294.09 680.66 T
+(JDK\252) 308.75 680.66 T
+(and) 339.32 680.66 T
+(to) 356.2 680.66 T
+(be) 366.42 680.66 T
+(included) 378.3 680.66 T
+(in) 415.18 680.66 T
+(ne) 425.41 680.66 T
+(w) 434.6 680.66 T
+(softw) 444.26 680.66 T
+(are) 466.38 680.66 T
+(products) 481.03 680.66 T
+(in) 517.91 680.66 T
+(a) 528.13 680.66 T
+(more) 535.01 680.66 T
+(timely f) 207 668.66 T
+(ashion. The follo) 238.29 668.66 T
+(wing are some more details about the package:) 306.09 668.66 T
+5 11 Q
+(\245) 207 649.99 T
+1 10 Q
+(The package name is) 220.74 649.99 T
+7 9 Q
+(javax.activation.) 307.13 649.99 T
+72 794/G266521 FmPA
+5 11 Q
+(\245) 207 633.99 T
+1 10 Q
+(The initial release is supported on JDK\252 1.1.4 and later v) 220.74 633.99 T
+(ersions of the JDK\252.) 453.69 633.99 T
+72 778/G266525 FmPA
+0 F
+(9.2) 184.1 603.66 T
+(Frame) 207 603.66 T
+(w) 236.86 603.66 T
+(ork Core Classes) 244.44 603.66 T
+72 748/G271189 FmPA
+(interface) 207 579.66 T
+(DataSour) 251.55 579.66 T
+(ce:) 295.8 579.66 T
+1 F
+(The) 315.42 579.66 T
+(DataSource) 333.56 579.66 T
+(interf) 382.79 579.66 T
+(ace) 404.35 579.66 T
+(pro) 420.26 579.66 T
+(vides) 433.44 579.66 T
+(the) 457.13 579.66 T
+(Ja) 471.93 579.66 T
+(v) 480.07 579.66 T
+(aBeans) 484.82 579.66 T
+(Acti) 516.28 579.66 T
+(v) 533.25 579.66 T
+(ation) 538 579.66 T
+72 724/G271190 FmPA
+(Frame) 207 567.66 T
+(w) 232.3 567.66 T
+(ork) 239.42 567.66 T
+(with) 255.7 567.66 T
+(an) 276.43 567.66 T
+(abstraction) 288.82 567.66 T
+(of) 335.65 567.66 T
+(some) 346.93 567.66 T
+(arbitrary) 370.99 567.66 T
+(collection) 408.36 567.66 T
+(of) 450.75 567.66 T
+(data.) 462.03 567.66 T
+(It) 487.09 567.66 T
+(pro) 496.15 567.66 T
+(vides) 509.33 567.66 T
+(a) 533.39 567.66 T
+(type) 540.78 567.66 T
+(for) 207 555.66 T
+(that) 222.62 555.66 T
+(data) 241.58 555.66 T
+(as) 262.2 555.66 T
+(well) 274.48 555.66 T
+(as) 295.66 555.66 T
+(access) 307.95 555.66 T
+(to) 337.45 555.66 T
+(it) 349.19 555.66 T
+(in) 358.71 555.66 T
+(the) 370.45 555.66 T
+(form) 386.62 555.66 T
+(of) 410.02 555.66 T
+(InputStreams) 422.31 555.66 T
+(and) 479.6 555.66 T
+(OutputStreams) 498 555.66 T
+(where appropriate.) 207 543.66 T
+0 F
+(c) 207 519.66 T
+(lass) 212.36 519.66 T
+(DataHandler:) 235.8 519.66 T
+1 F
+(The) 305.2 519.66 T
+(DataHandler) 324.33 519.66 T
+(class) 379.01 519.66 T
+(pro) 402.03 519.66 T
+(vides) 415.21 519.66 T
+(a) 439.91 519.66 T
+(consistent) 447.93 519.66 T
+(interf) 491.51 519.66 T
+(ace) 513.07 519.66 T
+(to) 529.98 519.66 T
+(data) 541.34 519.66 T
+72 664/G271198 FmPA
+(a) 207 507.66 T
+(v) 211.24 507.66 T
+(ailable) 215.99 507.66 T
+(in) 246.41 507.66 T
+(man) 257.95 507.66 T
+(y) 275.02 507.66 T
+(dif) 283.77 507.66 T
+(ferent) 294.63 507.66 T
+(sources) 321.71 507.66 T
+(and) 355.46 507.66 T
+(formats.) 373.66 507.66 T
+(It) 414.22 507.66 T
+(manages) 424.09 507.66 T
+(simple) 462.84 507.66 T
+(stream) 493.26 507.66 T
+(to) 523.68 507.66 T
+(string) 535.22 507.66 T
+(con) 207 495.66 T
+(v) 221.04 495.66 T
+(ersions) 225.89 495.66 T
+(and) 257.81 495.66 T
+(related) 275.85 495.66 T
+(operations) 306.65 495.66 T
+(using) 351.9 495.66 T
+(DataContentHandlers.) 377.17 495.66 T
+(It) 473.5 495.66 T
+(pro) 483.2 495.66 T
+(vides) 496.38 495.66 T
+(access) 521.09 495.66 T
+(to) 550.22 495.66 T
+(commands) 207 483.66 T
+(that) 257.06 483.66 T
+(can) 278.78 483.66 T
+(operate) 299.39 483.66 T
+(on) 335.55 483.66 T
+(the) 352.27 483.66 T
+(data.) 371.22 483.66 T
+(The) 403.83 483.66 T
+(commands) 426.11 483.66 T
+(are) 476.17 483.66 T
+(found) 495.11 483.66 T
+(using) 525.16 483.66 T
+(a) 553.56 483.66 T
+(CommandMap.) 207 471.66 T
+0 F
+(interface) 207 447.66 T
+(DataContentHandler:) 251.38 447.66 T
+1 F
+(The) 356.22 447.66 T
+(DataContentHandler) 374.2 447.66 T
+(interf) 459.38 447.66 T
+(ace) 480.94 447.66 T
+(is) 496.69 447.66 T
+(implemented) 505.78 447.66 T
+72 592/G271347 FmPA
+(by) 207 435.66 T
+(objects) 224.14 435.66 T
+(that) 259.61 435.66 T
+(can) 281.74 435.66 T
+(be) 302.76 435.66 T
+(used) 319.34 435.66 T
+(to) 344.8 435.66 T
+(e) 359.72 435.66 T
+(xtend) 364.01 435.66 T
+(the) 393.37 435.66 T
+(capabilities) 412.73 435.66 T
+(of) 465.42 435.66 T
+(the) 480.88 435.66 T
+(DataHandler\325) 500.24 435.66 T
+(s) 554.11 435.66 T
+(implementation) 207 423.66 T
+(of) 276.47 423.66 T
+(the) 291.48 423.66 T
+(T) 310.39 423.66 T
+(ransferable) 316.15 423.66 T
+(interf) 367.25 423.66 T
+(ace.) 388.81 423.66 T
+(Through) 411.32 423.66 T
+(DataContentHandlers) 452.44 423.66 T
+(the) 545.78 423.66 T
+(frame) 207 411.66 T
+(w) 230.07 411.66 T
+(ork) 237.19 411.66 T
+(can) 254.46 411.66 T
+(be) 272.28 411.66 T
+(e) 285.66 411.66 T
+(xtended) 289.95 411.66 T
+(to) 325.55 411.66 T
+(con) 337.27 411.66 T
+(v) 351.31 411.66 T
+(ert) 356.16 411.66 T
+(streams) 370.65 411.66 T
+(in) 405.14 411.66 T
+(to) 416.87 411.66 T
+(objects,) 428.59 411.66 T
+(and) 463.36 411.66 T
+(to) 481.74 411.66 T
+(write) 493.46 411.66 T
+(objects) 517.95 411.66 T
+(to) 550.22 411.66 T
+(streams.) 207 399.66 T
+0 F
+(interface) 207 375.66 T
+(DataContentHandlerF) 256.18 375.66 T
+(actor) 358.76 375.66 T
+(y:) 383.31 375.66 T
+1 F
+(This) 398.95 375.66 T
+(interf) 423.48 375.66 T
+(ace) 445.04 375.66 T
+(de\336nes) 465.11 375.66 T
+(a) 500.18 375.66 T
+(f) 511.37 375.66 T
+(actory) 514.6 375.66 T
+(for) 546.34 375.66 T
+72 520/G271391 FmPA
+(DataContentHandlers.) 207 363.66 T
+(An) 299.79 363.66 T
+(implementation) 315.65 363.66 T
+(of) 382.08 363.66 T
+(this) 394.05 363.66 T
+(interf) 412.14 363.66 T
+(ace) 433.7 363.66 T
+(should) 450.66 363.66 T
+(map) 480.97 363.66 T
+(a) 501.84 363.66 T
+(MIME) 509.92 363.66 T
+(type) 540.78 363.66 T
+(into) 207 351.66 T
+(an) 226.14 351.66 T
+(instance) 239.15 351.66 T
+(of) 275.5 351.66 T
+(DataContentHandler) 287.41 351.66 T
+(.) 369.62 351.66 T
+(The) 375.7 351.66 T
+(design) 394.82 351.66 T
+(pattern) 424.51 351.66 T
+(for) 455.86 351.66 T
+(classes) 471.09 351.66 T
+(implementing) 502.44 351.66 T
+(this interf) 207 339.66 T
+(ace is the same as for the ContentHandler mechanism used in ja) 245.51 339.66 T
+(v) 500.54 339.66 T
+(a.net.URL.) 505.29 339.66 T
+0 F
+(c) 207 315.66 T
+(lass) 212.36 315.66 T
+(CommandMap:) 234.82 315.66 T
+1 F
+(The) 312.43 315.66 T
+(CommandMap) 330.68 315.66 T
+(class) 393.37 315.66 T
+(pro) 415.51 315.66 T
+(vides) 428.69 315.66 T
+(an) 452.49 315.66 T
+(interf) 464.63 315.66 T
+(ace) 486.19 315.66 T
+(to) 502.21 315.66 T
+(the) 512.68 315.66 T
+(re) 527.6 315.66 T
+(gistry) 535.22 315.66 T
+72 460/G271413 FmPA
+(of) 207 303.66 T
+(vie) 218.24 303.66 T
+(wer) 230.21 303.66 T
+(,) 244.8 303.66 T
+(editor) 250.21 303.66 T
+(,) 273.14 303.66 T
+(print,) 278.55 303.66 T
+(etc.) 302.86 303.66 T
+(objects) 319.93 303.66 T
+(a) 351.17 303.66 T
+(v) 355.41 303.66 T
+(ailable) 360.16 303.66 T
+(in) 389.73 303.66 T
+(the) 400.42 303.66 T
+(system.) 415.55 303.66 T
+(De) 448.74 303.66 T
+(v) 460.15 303.66 T
+(elopers) 465.01 303.66 T
+(are) 496.8 303.66 T
+(e) 511.92 303.66 T
+(xpected) 516.21 303.66 T
+(to) 550.22 303.66 T
+(either) 207 291.66 T
+(use) 239.83 291.66 T
+(the) 263.22 291.66 T
+(CommandMap) 285.5 291.66 T
+(implementation) 355.55 291.66 T
+(included) 428.39 291.66 T
+(with) 472.89 291.66 T
+(this) 500.73 291.66 T
+(package) 525.24 291.66 T
+(\050MailcapCommandMap\051) 207 279.66 T
+(or) 309.93 279.66 T
+(de) 321.75 279.66 T
+(v) 330.94 279.66 T
+(elop) 335.79 279.66 T
+(their) 356.51 279.66 T
+(o) 378.34 279.66 T
+(wn.) 383.09 279.66 T
+(Note) 401.3 279.66 T
+(that) 424.24 279.66 T
+(some) 442.74 279.66 T
+(of) 467.34 279.66 T
+(the) 479.17 279.66 T
+(methods) 494.89 279.66 T
+(in) 532.27 279.66 T
+(this) 543.55 279.66 T
+(class are abstract.) 207 267.66 T
+0 F
+(interface) 207 243.66 T
+(CommandObject:) 251.49 243.66 T
+1 F
+(Beans) 337.35 243.66 T
+(that) 364.31 243.66 T
+(are) 381.83 243.66 T
+(Acti) 396.56 243.66 T
+(v) 413.53 243.66 T
+(ation) 418.28 243.66 T
+(Frame) 440.81 243.66 T
+(w) 466.11 243.66 T
+(ork) 473.23 243.66 T
+(a) 489.08 243.66 T
+(w) 493.37 243.66 T
+(are) 500.49 243.66 T
+(implement) 515.22 243.66 T
+72 388/G271438 FmPA
+(this) 207 231.66 T
+(interf) 224.79 231.66 T
+(ace) 246.35 231.66 T
+(to) 263.01 231.66 T
+(\336nd) 274.13 231.66 T
+(out) 293.04 231.66 T
+(which) 309.16 231.66 T
+(command) 336.94 231.66 T
+(v) 379.72 231.66 T
+(erb) 384.57 231.66 T
+(the) 400.68 231.66 T
+(y\325) 412.75 231.66 T
+(re) 420.58 231.66 T
+(being) 431.69 231.66 T
+(ask) 457.25 231.66 T
+(ed) 470.48 231.66 T
+(to) 483.27 231.66 T
+(perform,) 494.39 231.66 T
+(and) 532.44 231.66 T
+(to) 550.22 231.66 T
+(obtain) 207 219.66 T
+(the) 234.95 219.66 T
+(DataHandler) 250.12 219.66 T
+(representing) 304.16 219.66 T
+(the) 356.54 219.66 T
+(data) 371.71 219.66 T
+(the) 391.32 219.66 T
+(y) 403.39 219.66 T
+(should) 411.33 219.66 T
+(operate) 440.95 219.66 T
+(on.) 473.33 219.66 T
+(Beans) 491.73 219.66 T
+(that) 519.12 219.66 T
+(don\325) 537.07 219.66 T
+(t) 555.22 219.66 T
+(implement) 207 207.66 T
+(this) 253.45 207.66 T
+(interf) 271.58 207.66 T
+(ace) 293.14 207.66 T
+(may) 310.13 207.66 T
+(be) 331.02 207.66 T
+(used) 344.13 207.66 T
+(as) 366.14 207.66 T
+(well.) 378.14 207.66 T
+(Such) 405.21 207.66 T
+(commands) 428.88 207.66 T
+(may) 475.88 207.66 T
+(obtain) 496.77 207.66 T
+(the) 525.45 207.66 T
+(data) 541.34 207.66 T
+(using the Externalizable interf) 207 195.66 T
+(ace, or using an application-speci\336c method.) 327.71 195.66 T
+0 F
+(c) 207 171.66 T
+(lass) 212.36 171.66 T
+(CommandInf) 241.07 171.66 T
+(o:) 301.98 171.66 T
+1 F
+(The) 319.75 171.66 T
+(CommandInfo) 343.62 171.66 T
+(class) 410.27 171.66 T
+(is) 438.03 171.66 T
+(used) 453.02 171.66 T
+(by) 479.68 171.66 T
+(CommandMap) 498 171.66 T
+72 316/G271462 FmPA
+(implementations) 207 159.66 T
+(to) 276.58 159.66 T
+(describe) 287.27 159.66 T
+(the) 323.51 159.66 T
+(results) 338.64 159.66 T
+(of) 367.66 159.66 T
+(command) 378.9 159.66 T
+(requests.) 421.25 159.66 T
+(It) 459.43 159.66 T
+(pro) 468.46 159.66 T
+(vides) 481.64 159.66 T
+(the) 505.66 159.66 T
+(requestor) 520.79 159.66 T
+(with) 207 147.66 T
+(both) 227.5 147.66 T
+(the) 248 147.66 T
+(v) 262.94 147.66 T
+(erb) 267.79 147.66 T
+(requested,) 283.27 147.66 T
+(as) 326.81 147.66 T
+(well) 337.86 147.66 T
+(as) 357.8 147.66 T
+(an) 368.85 147.66 T
+(instance) 381.01 147.66 T
+(of) 416.5 147.66 T
+(the) 427.55 147.66 T
+(bean.) 442.48 147.66 T
+(There) 466.58 147.66 T
+(is) 492.62 147.66 T
+(also) 502.01 147.66 T
+(a) 520.84 147.66 T
+(method) 528 147.66 T
+(that) 207 135.66 T
+(will) 226.79 135.66 T
+(return) 247.13 135.66 T
+(the) 275.79 135.66 T
+(name) 292.8 135.66 T
+(of) 319.24 135.66 T
+(the) 332.36 135.66 T
+(class) 349.36 135.66 T
+(that) 373.59 135.66 T
+(implements) 393.37 135.66 T
+(the) 444.83 135.66 T
+(command) 461.83 135.66 T
+(b) 506.06 135.66 T
+(ut) 510.86 135.66 T
+(it) 523.42 135.66 T
+(is) 533.77 135.66 T
+(not) 545.22 135.66 T
+(guaranteed) 207 123.66 T
+(to) 255.73 123.66 T
+(return) 268.37 123.66 T
+(a) 297.11 123.66 T
+(v) 306.41 123.66 T
+(alid) 311.16 123.66 T
+(v) 331.02 123.66 T
+(alue.) 335.77 123.66 T
+(The) 359.79 123.66 T
+(reason) 380.2 123.66 T
+(for) 411.17 123.66 T
+(this) 427.69 123.66 T
+(is) 447 123.66 T
+(to) 458.53 123.66 T
+(allo) 471.17 123.66 T
+(w) 485.92 123.66 T
+(CommandMap) 498 123.66 T
+(implmentations) 207 111.66 T
+(that) 271.98 111.66 T
+(subclass) 289.73 111.66 T
+(CommandInfo) 325.81 111.66 T
+(to) 386.89 111.66 T
+(pro) 397.42 111.66 T
+(vide) 410.61 111.66 T
+(special) 430.58 111.66 T
+(beha) 461.1 111.66 T
+(vior) 479.78 111.66 T
+(.) 495.34 111.66 T
+(F) 500.59 111.66 T
+(or) 506 111.66 T
+(e) 517.08 111.66 T
+(xample) 521.37 111.66 T
+(a) 553.56 111.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.25/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "25" 25
+%%Page: "26" 26
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 189 739.85 T
+(w) 215.87 739.85 T
+(ork Deliverab) 222.7 739.85 T
+(les) 279.63 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(26) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+1 10 Q
+(CommandMap) 189 680.66 T
+(could) 251.68 680.66 T
+(dynamically) 276.58 680.66 T
+(generate) 328.7 680.66 T
+(Beans.) 365.24 680.66 T
+(In) 394.86 680.66 T
+(this) 405.87 680.66 T
+(case,) 423 680.66 T
+(it) 445.39 680.66 T
+(might) 453.62 680.66 T
+(not) 479.64 680.66 T
+(be) 495.1 680.66 T
+(possible) 507.22 680.66 T
+(to create an object with all the correct state information solely from the class name.) 189 668.66 T
+0 F
+(9.3) 166.1 638.66 T
+(Frame) 189 638.66 T
+(w) 218.86 638.66 T
+(ork A) 226.44 638.66 T
+(uxiliar) 251.7 638.66 T
+(y Classes) 281.26 638.66 T
+54 783/G264929 FmPA
+(c) 189 614.66 T
+(lass) 194.36 614.66 T
+(FileDataSour) 217.31 614.66 T
+(ce:) 278.79 614.66 T
+1 F
+(The) 299.52 614.66 T
+(FileDataSource) 318.21 614.66 T
+(class) 383.57 614.66 T
+(implements) 406.15 614.66 T
+(a) 455.96 614.66 T
+(simple) 463.54 614.66 T
+(DataSource) 493.35 614.66 T
+54 759/G271502 FmPA
+(object) 189 602.66 T
+(that) 218.12 602.66 T
+(encapsulates) 237.8 602.66 T
+(a) 293.02 602.66 T
+(\336le.) 302.14 602.66 T
+(It) 322.1 602.66 T
+(pro) 332.89 602.66 T
+(vides) 346.08 602.66 T
+(data) 371.87 602.66 T
+(typing) 393.21 602.66 T
+(services) 423.45 602.66 T
+(via) 460.34 602.66 T
+(a) 477.24 602.66 T
+(FileT) 486.36 602.66 T
+(ypeMap) 507.23 602.66 T
+(object.  \050See appendix A.\051) 189 590.66 T
+0 F
+(c) 189 566.66 T
+(lass) 194.36 566.66 T
+(FileT) 216.67 566.66 T
+(ypeMap:) 239.41 566.66 T
+1 F
+(The) 282.54 566.66 T
+(FileT) 300.66 566.66 T
+(ypeMap) 321.53 566.66 T
+(is) 356.86 566.66 T
+(an) 366.1 566.66 T
+(abstract) 378.11 566.66 T
+(class) 411.77 566.66 T
+(that) 433.78 566.66 T
+(pro) 451.35 566.66 T
+(vides) 464.53 566.66 T
+(a) 488.21 566.66 T
+(data) 495.21 566.66 T
+(typing) 514.44 566.66 T
+54 711/G271569 FmPA
+(interf) 189 554.66 T
+(ace) 210.56 554.66 T
+(for) 228.04 554.66 T
+(\336les.) 243.87 554.66 T
+(Implementations) 267.2 554.66 T
+(of) 338.59 554.66 T
+(this) 351.08 554.66 T
+(class) 369.7 554.66 T
+(will) 393.3 554.66 T
+(implement) 413.03 554.66 T
+(the) 459.98 554.66 T
+(getContentT) 476.36 554.66 T
+(ype) 525.56 554.66 T
+(methods) 189 542.66 T
+(which) 229.16 542.66 T
+(will) 259.88 542.66 T
+(deri) 281.71 542.66 T
+(v) 297.01 542.66 T
+(e) 301.86 542.66 T
+(a) 312.57 542.66 T
+(content) 323.29 542.66 T
+(type) 359 542.66 T
+(from) 382.49 542.66 T
+(a) 408.21 542.66 T
+(\336le) 418.92 542.66 T
+(name) 437.98 542.66 T
+(or) 465.91 542.66 T
+(a) 480.51 542.66 T
+(File) 491.23 542.66 T
+(object.) 513.06 542.66 T
+(FileT) 189 530.66 T
+(ypeMaps) 209.87 530.66 T
+(could) 248.9 530.66 T
+(use) 273.48 530.66 T
+(an) 289.18 530.66 T
+(y) 298.47 530.66 T
+(scheme) 305.83 530.66 T
+(to) 338.19 530.66 T
+(determine) 348.34 530.66 T
+(the) 390.69 530.66 T
+(data) 405.28 530.66 T
+(type,) 424.3 530.66 T
+(from) 446.39 530.66 T
+(e) 468.2 530.66 T
+(xamining) 472.49 530.66 T
+(the) 512.63 530.66 T
+(\336le) 527.22 530.66 T
+(e) 189 518.66 T
+(xtension) 193.29 518.66 T
+(of) 230.54 518.66 T
+(a) 242.24 518.66 T
+(\336le) 250.04 518.66 T
+(\050lik) 266.19 518.66 T
+(e) 279.98 518.66 T
+(the) 287.78 518.66 T
+(MimetypesFileT) 303.37 518.66 T
+(ypeMap\051) 369.24 518.66 T
+(to) 408.7 518.66 T
+(opening) 419.85 518.66 T
+(the) 455.43 518.66 T
+(\336le) 471.02 518.66 T
+(and) 487.16 518.66 T
+(trying) 504.96 518.66 T
+(to) 532.22 518.66 T
+(deri) 189 506.66 T
+(v) 204.3 506.66 T
+(e) 209.15 506.66 T
+(its) 216.78 506.66 T
+(type) 229.41 506.66 T
+(from) 249.82 506.66 T
+(the) 272.45 506.66 T
+(contents) 287.85 506.66 T
+(of) 324.37 506.66 T
+(the) 335.89 506.66 T
+(\336le.) 351.29 506.66 T
+(The) 369.76 506.66 T
+(FileDataSource) 388.49 506.66 T
+(class) 453.89 506.66 T
+(uses) 476.52 506.66 T
+(the) 496.92 506.66 T
+(def) 512.33 506.66 T
+(ault) 525 506.66 T
+(FileT) 189 494.66 T
+(ypeMap) 209.87 494.66 T
+(\050a) 245.16 494.66 T
+(MimetypesFileT) 255.44 494.66 T
+(ypeMap) 321.31 494.66 T
+(unless) 356.6 494.66 T
+(changed\051) 384.12 494.66 T
+(to) 423.28 494.66 T
+(determine) 433.58 494.66 T
+(the) 476.09 494.66 T
+(content) 490.82 494.66 T
+(type) 522.78 494.66 T
+(of \336les.) 189 482.66 T
+0 F
+(c) 189 458.66 T
+(lass) 194.36 458.66 T
+(MimetypesFileT) 217.18 458.66 T
+(ypeMap:) 291.61 458.66 T
+1 F
+(This) 335.19 458.66 T
+(class) 356 458.66 T
+(e) 378.46 458.66 T
+(xtends) 382.75 458.66 T
+(FileT) 411.89 458.66 T
+(ypeMap) 432.76 458.66 T
+(and) 468.56 458.66 T
+(pro) 486.02 458.66 T
+(vides) 499.2 458.66 T
+(data) 523.34 458.66 T
+54 603/G271628 FmPA
+(typing of \336les via their \336le e) 189 446.66 T
+(xtension. It uses the .mime.types format.) 302.18 446.66 T
+0 F
+(c) 189 422.66 T
+(lass) 194.36 422.66 T
+(URLDataSour) 217.14 422.66 T
+(ce:) 281.94 422.66 T
+1 F
+(The) 303.02 422.66 T
+(URLDataSource) 321.55 422.66 T
+(class) 391.18 422.66 T
+(pro) 413.6 422.66 T
+(vides) 426.78 422.66 T
+(an) 450.87 422.66 T
+(object) 463.3 422.66 T
+(that) 490.72 422.66 T
+(wraps) 508.7 422.66 T
+(a) 535.56 422.66 T
+54 567/G271634 FmPA
+(URL) 189 410.66 T
+(object) 211.96 410.66 T
+(in) 239.36 410.66 T
+(a) 250.1 410.66 T
+(DataSource) 257.5 410.66 T
+(interf) 307.11 410.66 T
+(ace.) 328.67 410.66 T
+(URLDataSource) 347.44 410.66 T
+(simpli\336es) 417.05 410.66 T
+(the) 458.91 410.66 T
+(handling) 474.09 410.66 T
+(of) 512.05 410.66 T
+(data) 523.34 410.66 T
+(described) 189 398.66 T
+(by) 230.26 398.66 T
+(URLs) 243.2 398.66 T
+(within) 270.04 398.66 T
+(the) 298.54 398.66 T
+(Ja) 313.7 398.66 T
+(v) 321.83 398.66 T
+(aBeans) 326.58 398.66 T
+(Acti) 358.4 398.66 T
+(v) 375.37 398.66 T
+(ation) 380.12 398.66 T
+(Frame) 403.06 398.66 T
+(w) 428.36 398.66 T
+(ork) 435.48 398.66 T
+(because) 451.75 398.66 T
+(this) 486.35 398.66 T
+(class) 503.74 398.66 T
+(can) 526.12 398.66 T
+(be used to create ne) 189 386.66 T
+(w DataHandlers.) 267.61 386.66 T
+0 F
+(c) 189 362.66 T
+(lass) 194.36 362.66 T
+(MailcapCommandMap:) 218.58 362.66 T
+1 F
+(MailcapCommandMap) 331.76 362.66 T
+(e) 428.82 362.66 T
+(xtends) 433.11 362.66 T
+(the) 463.5 362.66 T
+(CommandMap) 480 362.66 T
+54 507/G271660 FmPA
+(abstract) 189 350.66 T
+(class.) 222.9 350.66 T
+(It) 247.63 350.66 T
+(implements) 256.54 350.66 T
+(a) 306.01 350.66 T
+(CommandMap) 313.24 350.66 T
+(whose) 376.04 350.66 T
+(con\336guration) 404.38 350.66 T
+(is) 460.51 350.66 T
+(based) 469.98 350.66 T
+(on) 495.54 350.66 T
+(mailcap) 508.34 350.66 T
+(\336les) 189 338.66 T
+(\050RFC) 208.22 338.66 T
+(1524\051.) 233.01 338.66 T
+(The) 261.39 338.66 T
+(MailcapCommandMap) 279.49 338.66 T
+(can) 374.82 338.66 T
+(be) 391.25 338.66 T
+(con\336gured) 403.24 338.66 T
+(both) 448.57 338.66 T
+(programmatically) 468.9 338.66 T
+(and via con\336guration \336les. \050See appendix A.\051) 189 326.66 T
+0 F
+(c) 189 302.66 T
+(lass) 194.36 302.66 T
+(Activ) 219.45 302.66 T
+(ationDataFla) 243.7 302.66 T
+(v) 303.56 302.66 T
+(or:) 308.82 302.66 T
+1 F
+(The) 327.21 302.66 T
+(Acti) 347.83 302.66 T
+(v) 364.8 302.66 T
+(ationDataFla) 369.55 302.66 T
+(v) 421.01 302.66 T
+(or) 425.81 302.66 T
+(is) 439.2 302.66 T
+(a) 450.94 302.66 T
+(special) 460.44 302.66 T
+(subclass) 493.28 302.66 T
+(of) 531.67 302.66 T
+54 447/G271680 FmPA
+(ja) 189 290.66 T
+(v) 196.02 290.66 T
+(a.a) 200.77 290.66 T
+(wt.datatransfer) 212 290.66 T
+(.DataFla) 271.15 290.66 T
+(v) 305.11 290.66 T
+(or) 309.91 290.66 T
+(.) 317.69 290.66 T
+(It) 323.42 290.66 T
+(allo) 332.75 290.66 T
+(ws) 347.5 290.66 T
+(the) 361.84 290.66 T
+(J) 377.28 290.66 T
+(AF) 380.57 290.66 T
+(to) 396.58 290.66 T
+(set) 407.58 290.66 T
+(all) 421.92 290.66 T
+(three) 435.15 290.66 T
+(v) 458.36 290.66 T
+(alues) 463.11 290.66 T
+(stored) 486.89 290.66 T
+(by) 514.55 290.66 T
+(the) 527.78 290.66 T
+(DataFla) 189 278.66 T
+(v) 220.46 278.66 T
+(or) 225.26 278.66 T
+(class) 236.07 278.66 T
+(via) 258 278.66 T
+(a) 272.7 278.66 T
+(ne) 279.63 278.66 T
+(w) 288.82 278.66 T
+(constructor) 298.52 278.66 T
+(as) 346 278.66 T
+(well) 356.82 278.66 T
+(as) 376.52 278.66 T
+(impro) 387.33 278.66 T
+(v) 411.08 278.66 T
+(ed) 415.92 278.66 T
+(MIME) 427.85 278.66 T
+(parsing) 457.55 278.66 T
+(in) 489.48 278.66 T
+(the) 499.74 278.66 T
+(equals) 514.45 278.66 T
+(method.) 189 266.66 T
+(Except) 223.86 266.66 T
+(for) 253.99 266.66 T
+(the) 268 266.66 T
+(impro) 282.58 266.66 T
+(v) 306.32 266.66 T
+(ed) 311.17 266.66 T
+(parsing,) 322.97 266.66 T
+(its) 357.27 266.66 T
+(semantics) 369.08 266.66 T
+(are) 410.87 266.66 T
+(identical) 425.44 266.66 T
+(to) 462.24 266.66 T
+(that) 472.38 266.66 T
+(of) 489.73 266.66 T
+(the) 500.42 266.66 T
+(JDK\325) 515 266.66 T
+(s) 536.11 266.66 T
+(DataFla) 189 254.66 T
+(v) 220.46 254.66 T
+(or class.) 225.26 254.66 T
+0 F
+(c) 189 230.66 T
+(lass) 194.36 230.66 T
+(Unsuppor) 216.37 230.66 T
+(tedDataT) 263.79 230.66 T
+(ypeException:) 305.97 230.66 T
+1 F
+(Signals) 376.87 230.66 T
+(that) 408.62 230.66 T
+(requested) 425.91 230.66 T
+(operation) 466.53 230.66 T
+(does) 506.6 230.66 T
+(not) 527.22 230.66 T
+54 375/G271707 FmPA
+(support the requested data type.) 189 218.66 T
+0 F
+(c) 189 194.66 T
+(lass) 194.36 194.66 T
+(MimeT) 218.57 194.66 T
+(ype:) 249.64 194.66 T
+1 F
+(A) 274.47 194.66 T
+(Multipurpose) 285.96 194.66 T
+(Internet) 344.12 194.66 T
+(Extension) 379.49 194.66 T
+(\050MIME\051) 423.77 194.66 T
+(type,) 461.92 194.66 T
+(as) 485.91 194.66 T
+(de\336ned) 498.51 194.66 T
+(in) 532.22 194.66 T
+54 339/G267049 FmPA
+(RFC 2045 and 2046.) 189 182.66 T
+0 F
+(c) 189 158.66 T
+(lass) 194.36 158.66 T
+(com.sun.activ) 218.57 158.66 T
+(ation.vie) 285.07 158.66 T
+(wer) 325.48 158.66 T
+(s.*:) 342.57 158.66 T
+1 F
+(A) 362.4 158.66 T
+(fe) 373.9 158.66 T
+(w) 381.42 158.66 T
+(simple) 392.91 158.66 T
+(e) 423.86 158.66 T
+(xample) 428.15 158.66 T
+(vie) 461.87 158.66 T
+(wer) 473.84 158.66 T
+(Beans) 493.1 158.66 T
+(\050te) 521.82 158.66 T
+(xt) 532.22 158.66 T
+54 303/G264932 FmPA
+(and image\051.) 189 146.66 T
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.26/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "26" 26
+%%Page: "27" 27
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Appendix A: Class de\336nitions f) 207 739.85 T
+(or default pac) 339.84 739.85 T
+(ka) 398.67 739.85 T
+(g) 408.59 739.85 T
+(e implementations:) 414.18 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(27) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+0 12 Q
+(10.0) 174.65 679.33 T
+(Appendix A: Class de\336nitions f) 207 679.33 T
+(or default pac) 384.12 679.33 T
+(ka) 462.56 679.33 T
+(g) 475.79 679.33 T
+(e) 483.24 679.33 T
+72 823/G267728 FmPA
+72 658.33 558 661.33 C
+0 0 0 1 0 0 0 1 K
+207 660.48 558 660.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 660.48 198 660.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(implementations:) 207 665.33 T
+0 10 Q
+(10.1) 178.54 631.66 T
+(FileDataSour) 207 631.66 T
+(ce) 268.48 631.66 T
+72 776/G264946 FmPA
+7 9 Q
+(public class FileDataSource implements DataSource {) 216 616.33 T
+72 760/G264947 FmPA
+(/**) 216 605.33 T
+72 749/G271722 FmPA
+( * Creates a FileDataSource from a File object. <i>Note:) 216 594.33 T
+72 738/G271739 FmPA
+( * The file will not actually be opened until a method is) 216 583.33 T
+72 727/G271740 FmPA
+( * called that requires the file to be opened.</i>) 216 572.33 T
+72 716/G271741 FmPA
+( *) 216 561.33 T
+72 705/G271742 FmPA
+( * @param file the file) 216 550.33 T
+72 694/G271727 FmPA
+( */) 216 539.33 T
+72 683/G271728 FmPA
+(  public FileDataSource\050File file\051;) 216 528.33 T
+72 672/G271720 FmPA
+72 661/G271755 FmPA
+(/**) 216 506.33 T
+72 650/G271760 FmPA
+( * Creates a FileDataSource from the specified path name.) 216 495.33 T
+72 639/G271761 FmPA
+(*) 220.76 484.33 T
+(<i>Note:) 230.91 484.33 T
+(The) 283.63 484.33 T
+(file) 304.59 484.33 T
+(will) 330.94 484.33 T
+(not) 357.3 484.33 T
+(actually) 378.26 484.33 T
+(be) 426.21 484.33 T
+(opened) 441.77 484.33 T
+(until) 478.93 484.33 T
+(a) 510.68 484.33 T
+(method) 520.84 484.33 T
+72 628/G271776 FmPA
+( * is called that requires the file to be opened.</i>) 216 473.33 T
+72 617/G271779 FmPA
+( *) 216 462.33 T
+72 606/G271765 FmPA
+( * @param name the system-dependent file name.) 216 451.33 T
+72 595/G271766 FmPA
+( */) 216 440.33 T
+72 584/G265482 FmPA
+(  public FileDataSource\050String name\051;) 216 429.33 T
+72 573/G271758 FmPA
+72 562/G266689 FmPA
+(/**) 216 407.33 T
+72 551/G271898 FmPA
+( * Return the <i>name</i> of this object. The FileDataSource) 216 396.33 T
+72 540/G271899 FmPA
+( * will return the file name of the object.) 216 385.33 T
+72 529/G271900 FmPA
+( *) 216 374.33 T
+72 518/G271901 FmPA
+( * @return the name of the object.) 216 363.33 T
+72 507/G271919 FmPA
+( *) 216 352.33 T
+72 496/G273141 FmPA
+( * @see javax.activation.DataSource) 216 341.33 T
+72 485/G271920 FmPA
+( */) 216 330.33 T
+72 474/G271921 FmPA
+(  public String getName\050\051;) 216 319.33 T
+72 463/G266683 FmPA
+72 452/G271790 FmPA
+(/**) 216 297.33 T
+72 441/G271855 FmPA
+(*) 221.16 286.33 T
+(This) 231.72 286.33 T
+(method) 258.48 286.33 T
+(returns) 296.04 286.33 T
+(the) 339 286.33 T
+(MIME) 360.36 286.33 T
+(type) 387.12 286.33 T
+(of) 413.88 286.33 T
+(the) 429.84 286.33 T
+(data) 451.2 286.33 T
+(in) 477.96 286.33 T
+(the) 493.92 286.33 T
+(form) 515.28 286.33 T
+(of) 542.04 286.33 T
+72 430/G271856 FmPA
+( * a string. This method uses the currently installed) 216 275.33 T
+72 419/G271870 FmPA
+( * FileTypeMap. If there is no FileTypeMap explictly set, the) 216 264.33 T
+72 408/G271873 FmPA
+( * FileDataSource will call the) 216 253.33 T
+72 397/G271876 FmPA
+( * <code>getDefaultFileTypeMap</code> method on FileTypeMap to) 216 242.33 T
+72 386/G271879 FmPA
+( * acquire a default FileTypeMap. <i>Note: By default, the) 216 231.33 T
+72 375/G271882 FmPA
+( * FileTypeMap used will be a MimetypesFileTypeMap.</i>) 216 220.33 T
+72 364/G271885 FmPA
+( *) 216 209.33 T
+72 353/G271862 FmPA
+( * @return the MIME Type) 216 198.33 T
+72 342/G271863 FmPA
+( *) 216 187.33 T
+72 331/G273142 FmPA
+( * @see javax.activation.FileTypeMap#getDefaultFileTypeMap) 216 176.33 T
+72 320/G271864 FmPA
+( */) 216 165.33 T
+72 309/G271865 FmPA
+(  public String getContentType\050\051;) 216 154.33 T
+72 298/G267734 FmPA
+72 287/G271791 FmPA
+(/**) 216 132.33 T
+72 276/G271796 FmPA
+( * This method will return an InputStream representing the) 216 121.33 T
+72 265/G271797 FmPA
+( * the data and will throw an IOException if it can) 216 110.33 T
+72 254/G271798 FmPA
+( * not do so. This method will return a new) 216 99.33 T
+72 243/G271799 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.27/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "27" 27
+%%Page: "28" 28
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Appendix A: Class de\336nitions f) 189 739.85 T
+(or default pac) 321.84 739.85 T
+(ka) 380.67 739.85 T
+(g) 390.59 739.85 T
+(e implementations:) 396.18 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(28) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+7 F
+( * instance of InputStream with each invocation.) 198 681.33 T
+54 825/G271800 FmPA
+( *) 198 670.33 T
+54 814/G271801 FmPA
+( * @return an InputStream) 198 659.33 T
+54 803/G271802 FmPA
+( */) 198 648.33 T
+54 792/G271794 FmPA
+(  public InputStream getInputStream\050\051 throws IOException;) 198 637.33 T
+54 781/G267736 FmPA
+54 770/G271820 FmPA
+(/**) 198 615.33 T
+54 759/G271825 FmPA
+( * This method will return an OutputStream representing the) 198 604.33 T
+54 748/G271826 FmPA
+( * the data and will throw an IOException if it can) 198 593.33 T
+54 737/G271827 FmPA
+( * not do so. This method will return a new instance of) 198 582.33 T
+54 726/G271828 FmPA
+( * OutputStream with each invocation.) 198 571.33 T
+54 715/G271829 FmPA
+( *) 198 560.33 T
+54 704/G271830 FmPA
+( * @return an OutputStream) 198 549.33 T
+54 693/G271831 FmPA
+( */) 198 538.33 T
+54 682/G271832 FmPA
+(  public OutputStream getOutputStream\050\051 throws IOException;) 198 527.33 T
+54 671/G267738 FmPA
+54 660/G271960 FmPA
+(/**) 198 505.33 T
+54 649/G271949 FmPA
+( * Return the File object that corresponds to this) 198 494.33 T
+54 638/G271950 FmPA
+( * FileDataSource.) 198 483.33 T
+54 627/G271963 FmPA
+( * @return the File object for the file represented by this) 198 472.33 T
+54 616/G271951 FmPA
+( * object.) 198 461.33 T
+54 605/G271966 FmPA
+( */) 198 450.33 T
+54 594/G271952 FmPA
+(  public File getFile\050\051;) 198 439.33 T
+54 583/G267739 FmPA
+54 572/G271969 FmPA
+(/**) 198 417.33 T
+54 561/G271933 FmPA
+( * Set the FileTypeMap to use with this FileDataSource) 198 406.33 T
+54 550/G271934 FmPA
+( *) 198 395.33 T
+54 539/G271935 FmPA
+( * @param map The FileTypeMap for this object.) 198 384.33 T
+54 528/G271936 FmPA
+( */) 198 373.33 T
+54 517/G271931 FmPA
+(  public void setFileTypeMap\050FileTypeMap map\051;) 198 362.33 T
+54 506/G267750 FmPA
+(}) 198 351.33 T
+54 495/G267748 FmPA
+0 10 Q
+(10.2) 160.54 321.66 T
+(FileT) 189 321.66 T
+(ypeMap) 211.74 321.66 T
+54 466/G267751 FmPA
+7 9 Q
+(public abstract class FileTypeMap {) 198 306.33 T
+54 450/G267752 FmPA
+(/**) 198 295.33 T
+54 439/G272109 FmPA
+( * The default constructor.) 198 284.33 T
+54 428/G272110 FmPA
+( */) 198 273.33 T
+54 417/G272111 FmPA
+(  public FileTypeMap\050\051;) 198 262.33 T
+54 406/G271974 FmPA
+54 395/G272121 FmPA
+(/**) 198 240.33 T
+54 384/G272107 FmPA
+( * Return the type of the file object. This method should) 198 229.33 T
+54 373/G271975 FmPA
+( * always return a valid MIME type.) 198 218.33 T
+54 362/G271976 FmPA
+( *) 198 207.33 T
+54 351/G271977 FmPA
+( * @param f A file to be typed.) 198 196.33 T
+54 340/G271978 FmPA
+( * @return The content type.) 198 185.33 T
+54 329/G271979 FmPA
+( */) 198 174.33 T
+54 318/G267754 FmPA
+(  abstract public String getContentType\050File file\051;) 198 163.33 T
+54 307/G271972 FmPA
+54 296/G271995 FmPA
+(/**) 198 141.33 T
+54 285/G272000 FmPA
+( * Return the type of the file passed in.  This method should) 198 130.33 T
+54 274/G272001 FmPA
+( * always return a valid MIME type.) 198 119.33 T
+54 263/G272002 FmPA
+( *) 198 108.33 T
+54 252/G272003 FmPA
+( * @param filename the pathname of the file.) 198 97.33 T
+54 241/G272004 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.28/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "28" 28
+%%Page: "29" 29
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Appendix A: Class de\336nitions f) 207 739.85 T
+(or default pac) 339.84 739.85 T
+(ka) 398.67 739.85 T
+(g) 408.59 739.85 T
+(e implementations:) 414.18 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(29) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+7 9 Q
+( * @return The content type.) 216 681.33 T
+72 825/G272005 FmPA
+( */) 216 670.33 T
+72 814/G267756 FmPA
+(  abstract public String getContentType\050String filename\051;) 216 659.33 T
+72 803/G271998 FmPA
+72 792/G272021 FmPA
+(/**) 216 637.33 T
+72 781/G272056 FmPA
+( * Return the default FileTypeMap for the system.) 216 626.33 T
+72 770/G272057 FmPA
+( * If setDefaultFileTypeMap was called, return) 216 615.33 T
+72 759/G272058 FmPA
+( * that instance, otherwise return an instance of) 216 604.33 T
+72 748/G272077 FmPA
+( * <code>MimetypesFileTypeMap</code>.) 216 593.33 T
+72 737/G272078 FmPA
+( *) 216 582.33 T
+72 726/G272079 FmPA
+( * @return The default FileTypeMap) 216 571.33 T
+72 715/G272080 FmPA
+( *) 216 560.33 T
+72 704/G273143 FmPA
+( * @see javax.activation.FileTypeMap#setDefaultFileTypeMap) 216 549.33 T
+72 693/G272063 FmPA
+( */) 216 538.33 T
+72 682/G272054 FmPA
+(  public static FileTypeMap getDefaultFileTypeMap\050\051;) 216 527.33 T
+72 671/G267758 FmPA
+72 660/G272022 FmPA
+(/**) 216 505.33 T
+72 649/G272027 FmPA
+( * Sets the default FileTypeMap for the system. This instance) 216 494.33 T
+72 638/G272028 FmPA
+( * will be returned to callers of getDefaultFileTypeMap.) 216 483.33 T
+72 627/G272029 FmPA
+( *) 216 472.33 T
+72 616/G272030 FmPA
+( * @param map The FileTypeMap.) 216 461.33 T
+72 605/G272031 FmPA
+( * @exception SecurityException if the caller doesn\325t have) 216 450.33 T
+72 594/G272032 FmPA
+( * permission to change the default) 216 439.33 T
+72 583/G272047 FmPA
+( */) 216 428.33 T
+72 572/G272025 FmPA
+(  public static void setDefaultFileTypeMap\050FileTypeMap map\051;) 216 417.33 T
+72 561/G267760 FmPA
+(}) 216 406.33 T
+72 550/G267747 FmPA
+0 10 Q
+(10.3) 178.54 376.66 T
+(MimetypesFileT) 207 376.66 T
+(ypeMap) 281.42 376.66 T
+72 521/G267798 FmPA
+7 9 Q
+(public abstract class MimetypesFileTypeMap {) 216 361.33 T
+72 505/G267801 FmPA
+(/**) 216 350.33 T
+72 494/G272098 FmPA
+( * The default constructor.) 216 339.33 T
+72 483/G272099 FmPA
+( */) 216 328.33 T
+72 472/G267808 FmPA
+(  public MimetypesFileTypeMap\050\051;) 216 317.33 T
+72 461/G267827 FmPA
+72 450/G272091 FmPA
+(/**) 216 295.33 T
+72 439/G272141 FmPA
+( * Construct a MimetypesFileTypeMap with programmatic entries) 216 284.33 T
+72 428/G272142 FmPA
+( * added from the InputStream.) 216 273.33 T
+72 417/G272143 FmPA
+( *) 216 262.33 T
+72 406/G273087 FmPA
+( * @param is      the input stream to read from) 216 251.33 T
+72 395/G273085 FmPA
+( */) 216 240.33 T
+72 384/G267833 FmPA
+(  public MimetypesFileTypeMap\050InputStream is\051;) 216 229.33 T
+72 373/G267810 FmPA
+72 362/G272092 FmPA
+(/**) 216 207.33 T
+72 351/G272126 FmPA
+( * Construct a MimetypesFileTypeMap with programmatic entries) 216 196.33 T
+72 340/G272127 FmPA
+( * added from the named file.) 216 185.33 T
+72 329/G272128 FmPA
+( *) 216 174.33 T
+72 318/G273079 FmPA
+( * @param mimeTypeFileName        the file name) 216 163.33 T
+72 307/G273077 FmPA
+( */) 216 152.33 T
+72 296/G267839 FmPA
+(  public MimetypesFileTypeMap\050String mimeTypeFileName\051) 216 141.33 T
+72 285/G267806 FmPA
+(                              throws IOException;) 216 130.33 T
+72 274/G272122 FmPA
+72 263/G272093 FmPA
+(/**) 216 108.33 T
+72 252/G272183 FmPA
+( * Return the MIME type of the file object.) 216 97.33 T
+72 241/G272184 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.29/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "29" 29
+%%Page: "30" 30
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Appendix A: Class de\336nitions f) 189 739.85 T
+(or default pac) 321.84 739.85 T
+(ka) 380.67 739.85 T
+(g) 390.59 739.85 T
+(e implementations:) 396.18 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(30) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+7 F
+( * The implementation in this class calls) 198 681.33 T
+54 825/G272185 FmPA
+( * <code>getContentType\050f.getName\050\051\051</code>.) 198 670.33 T
+54 814/G272186 FmPA
+( *) 198 659.33 T
+54 803/G273095 FmPA
+( * @param f       the file) 198 648.33 T
+54 792/G273096 FmPA
+( * @return        the file\325s MIME type) 198 637.33 T
+54 781/G273093 FmPA
+( */) 198 626.33 T
+54 770/G272181 FmPA
+(  public String getContentType\050File f\051;) 198 615.33 T
+54 759/G267803 FmPA
+54 748/G272094 FmPA
+(/**) 198 593.33 T
+54 737/G272202 FmPA
+( * Return the MIME type based on the specified file name.) 198 582.33 T
+54 726/G272203 FmPA
+( * The MIME type entries are searched as described above under) 198 571.33 T
+54 715/G272204 FmPA
+( * <i>MIME types file search order</i>.) 198 560.33 T
+54 704/G272205 FmPA
+(*) 203.07 549.33 T
+(If) 213.54 549.33 T
+(no) 229.42 549.33 T
+(entry) 245.29 549.33 T
+(is) 277.36 549.33 T
+(found,) 293.24 549.33 T
+(the) 330.71 549.33 T
+(type) 351.98 549.33 T
+("application/octet-stream") 378.65 549.33 T
+(is) 524.13 549.33 T
+54 693/G272206 FmPA
+( * returned.) 198 538.33 T
+54 682/G272218 FmPA
+( *) 198 527.33 T
+54 671/G273106 FmPA
+( * @param filename        the file name) 198 516.33 T
+54 660/G273107 FmPA
+( * @return                the file\325s MIME type) 198 505.33 T
+54 649/G273104 FmPA
+( */) 198 494.33 T
+54 638/G272200 FmPA
+(  public synchronized String getContentType\050String filename\051;) 198 483.33 T
+54 627/G267805 FmPA
+54 616/G272170 FmPA
+(/**) 198 461.33 T
+54 605/G272171 FmPA
+( * Prepend the MIME type values to the registry.) 198 450.33 T
+54 594/G272172 FmPA
+( *) 198 439.33 T
+54 583/G272173 FmPA
+(*) 203.04 428.33 T
+(@param) 213.48 428.33 T
+(mime_types) 250.92 428.33 T
+(A) 315 428.33 T
+(.mime.types) 325.44 428.33 T
+(formatted) 389.88 428.33 T
+(string) 443.52 428.33 T
+(of) 480.96 428.33 T
+(entries.) 496.8 428.33 T
+54 572/G272174 FmPA
+( */) 198 417.33 T
+54 561/G272175 FmPA
+(  public synchronized void addMimeTypes\050String mime_types\051;) 198 406.33 T
+54 550/G272176 FmPA
+(}) 198 395.33 T
+54 539/G265497 FmPA
+0 10 Q
+(10.4) 160.54 365.66 T
+(MailcapCommandMap) 189 365.66 T
+54 510/G264949 FmPA
+7 9 Q
+(public class MailcapCommandMap extends CommandMap {) 198 350.33 T
+54 494/G264950 FmPA
+(/**) 198 339.33 T
+54 483/G272225 FmPA
+( * The default Constructor.) 198 328.33 T
+54 472/G272226 FmPA
+( */) 198 317.33 T
+54 461/G266708 FmPA
+(  public MailcapCommandMap\050\051;) 198 306.33 T
+54 450/G272221 FmPA
+54 439/G272234 FmPA
+(/**) 198 284.33 T
+54 428/G272241 FmPA
+( * Constructor that allows the caller to specify the path) 198 273.33 T
+54 417/G272242 FmPA
+( * of a <i>mailcap</i> file.) 198 262.33 T
+54 406/G272243 FmPA
+( *) 198 251.33 T
+54 395/G272244 FmPA
+( * @param fileName The name of the <i>mailcap</i> file to open) 198 240.33 T
+54 384/G272245 FmPA
+( */) 198 229.33 T
+54 373/G272235 FmPA
+(public) 206.55 218.33 T
+(MailcapCommandMap\050String) 243.23 218.33 T
+(filename\051) 377.1 218.33 T
+(throws) 429.98 218.33 T
+(IOException;) 466.65 218.33 T
+54 362/G265509 FmPA
+54 351/G265510 FmPA
+(/**) 198 196.33 T
+54 340/G272261 FmPA
+( * Constructor that allows the caller to specify an) 198 185.33 T
+54 329/G272262 FmPA
+( * <i>InputStream</i> containing a mailcap file.) 198 174.33 T
+54 318/G272272 FmPA
+( *) 198 163.33 T
+54 307/G272264 FmPA
+( * @param is        InputStream of the <i>mailcap</i> file to) 198 152.33 T
+54 296/G272265 FmPA
+( * open) 198 141.33 T
+54 285/G272281 FmPA
+( */) 198 130.33 T
+54 274/G272266 FmPA
+(  public MailcapCommandMap\050InputStream is\051;) 198 119.33 T
+54 263/G272259 FmPA
+54 252/G272284 FmPA
+(/**) 198 97.33 T
+54 241/G272377 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.30/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "30" 30
+%%Page: "31" 31
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Appendix A: Class de\336nitions f) 207 739.85 T
+(or default pac) 339.84 739.85 T
+(ka) 398.67 739.85 T
+(g) 408.59 739.85 T
+(e implementations:) 414.18 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(31) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+7 9 Q
+( * Add entries to the registry.  Programmatically) 216 681.33 T
+72 825/G272398 FmPA
+( * added entries are searched before other entries.<p>) 216 670.33 T
+72 814/G272399 FmPA
+( *) 216 659.33 T
+72 803/G272400 FmPA
+( * The string that is passed in should be in mailcap) 216 648.33 T
+72 792/G272401 FmPA
+( * format.) 216 637.33 T
+72 781/G272382 FmPA
+( *) 216 626.33 T
+72 770/G272383 FmPA
+( * @param mail_cap a correctly formatted mailcap string) 216 615.33 T
+72 759/G272384 FmPA
+( */) 216 604.33 T
+72 748/G265983 FmPA
+(  public synchronized void addMailCap\050String mail_cap\051;) 216 593.33 T
+72 737/G272375 FmPA
+72 726/G265882 FmPA
+(/**) 216 571.33 T
+72 715/G272334 FmPA
+( * Get all the available commands in all mailcap files known to) 216 560.33 T
+72 704/G272335 FmPA
+( * this instance of MailcapCommandMap for this MIME type.) 216 549.33 T
+72 693/G272336 FmPA
+( *) 216 538.33 T
+72 682/G272337 FmPA
+( * @return the CommandInfo objects representing all the) 216 527.33 T
+72 671/G272338 FmPA
+( * commands.) 216 516.33 T
+72 660/G272350 FmPA
+( */) 216 505.33 T
+72 649/G272331 FmPA
+(  public synchronized CommandInfo[] getAllCommands\050String) 216 494.33 T
+72 638/G265890 FmPA
+(                                                   mimeType\051;) 216 483.33 T
+72 627/G272332 FmPA
+72 616/G266725 FmPA
+(/**) 216 461.33 T
+72 605/G272357 FmPA
+(*) 220.5 450.33 T
+(Get) 230.4 450.33 T
+(the) 251.1 450.33 T
+(command) 271.8 450.33 T
+(corresponding) 314.1 450.33 T
+(to) 388.8 450.33 T
+(<code>cmdName</code>) 404.1 450.33 T
+(for) 516.6 450.33 T
+(the) 537.3 450.33 T
+72 594/G272358 FmPA
+( * MIME type.) 216 439.33 T
+72 583/G272366 FmPA
+( *) 216 428.33 T
+72 572/G272359 FmPA
+( * @return the CommandInfo object corresponding to the command.) 216 417.33 T
+72 561/G272360 FmPA
+( */) 216 406.33 T
+72 550/G266727 FmPA
+(  public synchronized CommandInfo getCommand\050String mimeType,) 216 395.33 T
+72 539/G272355 FmPA
+(                                String cmdName\051;) 216 384.33 T
+72 528/G267857 FmPA
+72 517/G265896 FmPA
+(/**) 216 362.33 T
+72 506/G272289 FmPA
+( * Get the preferred command list for a MIME Type. The) 216 351.33 T
+72 495/G272290 FmPA
+( * MailcapCommandMap searches the mailcap files as described) 216 340.33 T
+72 484/G272305 FmPA
+( * above under <i>Mailcap file search order</i>.<p>) 216 329.33 T
+72 473/G272308 FmPA
+( *) 216 318.33 T
+72 462/G272293 FmPA
+( * The result of the search is a proper subset of available) 216 307.33 T
+72 451/G272294 FmPA
+( * commands in all mailcap files known to this instance of) 216 296.33 T
+72 440/G272295 FmPA
+( * MailcapCommandMap.  The first entry for a particular command) 216 285.33 T
+72 429/G272296 FmPA
+( * is considered the preferred command.) 216 274.33 T
+72 418/G272297 FmPA
+( *) 216 263.33 T
+72 407/G272298 FmPA
+( * @return the CommandInfo objects representing the preferred) 216 252.33 T
+72 396/G272299 FmPA
+( * commands.) 216 241.33 T
+72 385/G272325 FmPA
+( */) 216 230.33 T
+72 374/G272285 FmPA
+( public synchronized CommandInfo[] getPreferredCommands\050String) 216 219.33 T
+72 363/G266721 FmPA
+(mimeType\051;) 504 208.33 T
+72 352/G272328 FmPA
+72 341/G272416 FmPA
+(/**) 216 186.33 T
+72 330/G272419 FmPA
+( * Return the DataContentHandler for the specified MIME type.) 216 175.33 T
+72 319/G272420 FmPA
+( */) 216 164.33 T
+72 308/G272421 FmPA
+( public synchronized DataContentHandler) 216 153.33 T
+72 297/G272422 FmPA
+(        createDataContentHandler\050String mimeType\051;) 216 142.33 T
+72 286/G272432 FmPA
+(}) 216 131.33 T
+72 275/G265662 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.31/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "31" 31
+%%Page: "32" 32
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Appendix A: Class de\336nitions f) 189 739.85 T
+(or default pac) 321.84 739.85 T
+(ka) 380.67 739.85 T
+(g) 390.59 739.85 T
+(e implementations:) 396.18 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(32) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+0 10 Q
+(10.5) 160.54 680.66 T
+(Activ) 189 680.66 T
+(ationDataFla) 213.25 680.66 T
+(v) 273.11 680.66 T
+(or) 278.37 680.66 T
+54 825/G267064 FmPA
+54 809/G267065 FmPA
+7 9 Q
+(public class ActivationDataFlavor extends) 198 654.33 T
+54 798/G267067 FmPA
+(                       java.awt.datatransfer.DataFlavor {) 198 643.33 T
+54 787/G267275 FmPA
+54 776/G267297 FmPA
+(/**) 198 621.33 T
+54 765/G272457 FmPA
+( * Construct a DataFlavor that represents an arbitrary) 198 610.33 T
+54 754/G272458 FmPA
+( * Java object. This constructor is an extension of the) 198 599.33 T
+54 743/G272459 FmPA
+( * JDK\325s DataFlavor in that it allows the explicit setting) 198 588.33 T
+54 732/G272460 FmPA
+( * of all three DataFlavor attributes.) 198 577.33 T
+54 721/G272461 FmPA
+( * <p>) 198 566.33 T
+54 710/G272462 FmPA
+( * The returned DataFlavor will have the following) 198 555.33 T
+54 699/G272463 FmPA
+( * characteristics:) 198 544.33 T
+54 688/G272488 FmPA
+( * <p>) 198 533.33 T
+54 677/G272464 FmPA
+( * representationClass = representationClass<br>) 198 522.33 T
+54 666/G272465 FmPA
+( * mimeType            = mimeType<br>) 198 511.33 T
+54 655/G272466 FmPA
+( * humanName           = humanName) 198 500.33 T
+54 644/G272467 FmPA
+( * <p>) 198 489.33 T
+54 633/G272468 FmPA
+( *) 198 478.33 T
+54 622/G272469 FmPA
+( * @param representationClass the class used in this DataFlavor) 198 467.33 T
+54 611/G272470 FmPA
+(*) 202.71 456.33 T
+(@param) 212.82 456.33 T
+(mimeType) 249.92 456.33 T
+(the) 297.83 456.33 T
+(MIME) 318.74 456.33 T
+(type) 345.05 456.33 T
+(of) 371.35 456.33 T
+(the) 386.86 456.33 T
+(data) 407.77 456.33 T
+(represented) 434.08 456.33 T
+(by) 498.18 456.33 T
+(this) 513.69 456.33 T
+54 600/G272471 FmPA
+( * class) 198 445.33 T
+54 589/G272505 FmPA
+(*) 202.5 434.33 T
+(@param) 212.4 434.33 T
+(humanPresentableName) 249.3 434.33 T
+(the) 361.8 434.33 T
+(human) 382.5 434.33 T
+(presentable) 414 434.33 T
+(name) 477.9 434.33 T
+(of) 504 434.33 T
+(the) 519.3 434.33 T
+54 578/G272472 FmPA
+( * flavor) 198 423.33 T
+54 567/G272508 FmPA
+(*/) 198 412.33 T
+54 556/G272455 FmPA
+( public ActivationDataFlavor\050Class representationClass,) 198 401.33 T
+54 545/G267068 FmPA
+(                             String mimeType,) 198 390.33 T
+54 534/G267069 FmPA
+(                             String humanPresentableName\051;) 198 379.33 T
+54 523/G267070 FmPA
+54 512/G272511 FmPA
+(/**) 198 357.33 T
+54 501/G272516 FmPA
+( * Construct a DataFlavor that represents a MimeType.) 198 346.33 T
+54 490/G272517 FmPA
+( * <p>) 198 335.33 T
+54 479/G272518 FmPA
+( * The returned DataFlavor will have the following) 198 324.33 T
+54 468/G272519 FmPA
+( * characteristics:) 198 313.33 T
+54 457/G272538 FmPA
+( * <p>) 198 302.33 T
+54 446/G272520 FmPA
+( * If the mimeType is "application/x-java-serialized-object;) 198 291.33 T
+54 435/G272521 FmPA
+( * class=", the result is the same as calling new) 198 280.33 T
+54 424/G272522 FmPA
+( * DataFlavor\050Class.forName\050\051\051 as above.) 198 269.33 T
+54 413/G272523 FmPA
+( * <p>) 198 258.33 T
+54 402/G272524 FmPA
+( * otherwise:) 198 247.33 T
+54 391/G272525 FmPA
+( * <p>) 198 236.33 T
+54 380/G272526 FmPA
+( * representationClass = InputStream<p>) 198 225.33 T
+54 369/G272527 FmPA
+( * mimeType = mimeType<p>) 198 214.33 T
+54 358/G272528 FmPA
+( *) 198 203.33 T
+54 347/G272941 FmPA
+( * @param representationClass the class used in this DataFlavor) 198 192.33 T
+54 336/G272942 FmPA
+(*) 202.5 181.33 T
+(@param) 212.4 181.33 T
+(humanPresentableName) 249.3 181.33 T
+(the) 361.8 181.33 T
+(human) 382.5 181.33 T
+(presentable) 414 181.33 T
+(name) 477.9 181.33 T
+(of) 504 181.33 T
+(the) 519.3 181.33 T
+54 325/G272939 FmPA
+( *                             flavor) 198 170.33 T
+54 314/G272955 FmPA
+( */) 198 159.33 T
+54 303/G272948 FmPA
+( public ActivationDataFlavor\050Class representationClass,) 198 148.33 T
+54 292/G272514 FmPA
+(                             String humanPresentableName\051;) 198 137.33 T
+54 281/G267114 FmPA
+54 270/G267115 FmPA
+(/**) 198 115.33 T
+54 259/G272563 FmPA
+( * Construct a DataFlavor that represents a MimeType.) 198 104.33 T
+54 248/G272564 FmPA
+( * <p>) 198 93.33 T
+54 237/G272565 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.32/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "32" 32
+%%Page: "33" 33
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Appendix A: Class de\336nitions f) 207 739.85 T
+(or default pac) 339.84 739.85 T
+(ka) 398.67 739.85 T
+(g) 408.59 739.85 T
+(e implementations:) 414.18 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(33) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+7 9 Q
+( * The returned DataFlavor will have the following) 216 681.33 T
+72 825/G272566 FmPA
+( * characteristics:) 216 670.33 T
+72 814/G272587 FmPA
+( * <p>) 216 659.33 T
+72 803/G272567 FmPA
+( * If the mimeType is "application/x-java-serialized-object;) 216 648.33 T
+72 792/G272568 FmPA
+( * class=", the result is the same as calling new) 216 637.33 T
+72 781/G272592 FmPA
+( * DataFlavor\050Class.forName\050\051\051 as above, otherwise:) 216 626.33 T
+72 770/G272595 FmPA
+( * <p>) 216 615.33 T
+72 759/G272571 FmPA
+( * representationClass = InputStream<p>) 216 604.33 T
+72 748/G272572 FmPA
+( * mimeType = mimeType) 216 593.33 T
+72 737/G272573 FmPA
+( *) 216 582.33 T
+72 726/G272958 FmPA
+(*) 220.71 571.33 T
+(@param) 230.82 571.33 T
+(mimeType) 267.92 571.33 T
+(the) 315.83 571.33 T
+(MIME) 336.74 571.33 T
+(type) 363.05 571.33 T
+(of) 389.35 571.33 T
+(the) 404.86 571.33 T
+(data) 425.77 571.33 T
+(represented) 452.08 571.33 T
+(by) 516.18 571.33 T
+(this) 531.69 571.33 T
+72 715/G272959 FmPA
+( *                 class) 216 560.33 T
+72 704/G272970 FmPA
+(*) 220.5 549.33 T
+(@param) 230.4 549.33 T
+(humanPresentableName) 267.3 549.33 T
+(the) 379.8 549.33 T
+(human) 400.5 549.33 T
+(presentable) 432 549.33 T
+(name) 495.9 549.33 T
+(of) 522 549.33 T
+(the) 537.3 549.33 T
+72 693/G272960 FmPA
+( *                             flavor) 216 538.33 T
+72 682/G272967 FmPA
+( */) 216 527.33 T
+72 671/G267116 FmPA
+( public ActivationDataFlavor\050String mimeType,) 216 516.33 T
+72 660/G272561 FmPA
+(                             String humanPresentableName\051;) 216 505.33 T
+72 649/G267117 FmPA
+72 638/G267118 FmPA
+(/**) 216 483.33 T
+72 627/G272610 FmPA
+( * Return the MIME type for this DataFlavor.) 216 472.33 T
+72 616/G272611 FmPA
+( *) 216 461.33 T
+72 605/G272981 FmPA
+( * @return    the MIME type) 216 450.33 T
+72 594/G272974 FmPA
+( */) 216 439.33 T
+72 583/G267121 FmPA
+( public String getMimeType\050\051;) 216 428.33 T
+72 572/G272608 FmPA
+72 561/G267127 FmPA
+(/**) 216 406.33 T
+72 550/G272626 FmPA
+( * Return the representation class.) 216 395.33 T
+72 539/G272627 FmPA
+( *) 216 384.33 T
+72 528/G272975 FmPA
+( * @return the representation class) 216 373.33 T
+72 517/G272976 FmPA
+( */) 216 362.33 T
+72 506/G267305 FmPA
+( public Class getRepresentationClass\050\051;) 216 351.33 T
+72 495/G272622 FmPA
+72 484/G267130 FmPA
+(/**) 216 329.33 T
+72 473/G272639 FmPA
+( * Return the Human Presentable name.) 216 318.33 T
+72 462/G272640 FmPA
+( *) 216 307.33 T
+72 451/G272982 FmPA
+( * @return     the human presentable name) 216 296.33 T
+72 440/G272983 FmPA
+( */) 216 285.33 T
+72 429/G272641 FmPA
+( public String getHumanPresentableName\050\051;) 216 274.33 T
+72 418/G272637 FmPA
+72 407/G272651 FmPA
+(/**) 216 252.33 T
+72 396/G272654 FmPA
+( * Set the human presentable name.) 216 241.33 T
+72 385/G272655 FmPA
+( *) 216 230.33 T
+72 374/G272988 FmPA
+( * @param humanPresentableName    the name to set) 216 219.33 T
+72 363/G272991 FmPA
+( */) 216 208.33 T
+72 352/G272652 FmPA
+( public void setHumanPresentableName\050) 216 197.33 T
+72 341/G267137 FmPA
+(                               String humanPresentableName\051;) 216 186.33 T
+72 330/G267293 FmPA
+72 319/G267143 FmPA
+(/**) 216 164.33 T
+72 308/G272667 FmPA
+(*) 221.04 153.33 T
+(Compares) 231.48 153.33 T
+(the) 279.72 153.33 T
+(DataFlavor) 300.96 153.33 T
+(passed) 360 153.33 T
+(in) 397.44 153.33 T
+(with) 413.28 153.33 T
+(this) 439.92 153.33 T
+(DataFlavor;) 466.56 153.33 T
+(calls) 531 153.33 T
+72 297/G272668 FmPA
+( * the <code>isMimeTypeEqual</code> method.) 216 142.33 T
+72 286/G272669 FmPA
+( *) 216 131.33 T
+72 275/G273000 FmPA
+( * @param dataFlavor      the DataFlavor to compare with) 216 120.33 T
+72 264/G273001 FmPA
+( * @return                true if the MIME type and) 216 109.33 T
+72 253/G273002 FmPA
+( *                        representation class are the same) 216 98.33 T
+72 242/G273013 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.33/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "33" 33
+%%Page: "34" 34
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Appendix A: Class de\336nitions f) 189 739.85 T
+(or default pac) 321.84 739.85 T
+(ka) 380.67 739.85 T
+(g) 390.59 739.85 T
+(e implementations:) 396.18 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(34) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+7 F
+( */) 198 681.33 T
+54 825/G267145 FmPA
+( public boolean equals\050DataFlavor dataFlavor\051;) 198 670.33 T
+54 814/G272665 FmPA
+54 803/G267146 FmPA
+(/**) 198 648.33 T
+54 792/G272683 FmPA
+( * Is the string representation of the MIME type passed in) 198 637.33 T
+54 781/G272684 FmPA
+( * equivalent to the MIME type of this DataFlavor. <p>) 198 626.33 T
+54 770/G272696 FmPA
+( *) 198 615.33 T
+54 759/G272686 FmPA
+( * ActivationDataFlavor delegates the comparison of MIME types) 198 604.33 T
+54 748/G272687 FmPA
+( * to the MimeType class included as part of the JavaBeans) 198 593.33 T
+54 737/G272703 FmPA
+(*) 203.04 582.33 T
+(Activation) 213.48 582.33 T
+(Framework.) 272.52 582.33 T
+(This) 331.56 582.33 T
+(provides) 358.2 582.33 T
+(a) 406.44 582.33 T
+(more) 416.88 582.33 T
+(robust) 443.52 582.33 T
+(comparison) 480.96 582.33 T
+54 726/G272706 FmPA
+( * than is normally available in the DataFlavor class.) 198 571.33 T
+54 715/G272709 FmPA
+( *) 198 560.33 T
+54 704/G273029 FmPA
+( * @param mimeType        the MIME type) 198 549.33 T
+54 693/G273030 FmPA
+( * @return                true if the same MIME type) 198 538.33 T
+54 682/G273031 FmPA
+( */) 198 527.33 T
+54 671/G273032 FmPA
+( public boolean isMimeTypeEqual\050String mimeType\051;) 198 516.33 T
+54 660/G267153 FmPA
+54 649/G267159 FmPA
+(/**) 198 494.33 T
+54 638/G272717 FmPA
+( * Called on DataFlavor for every MIME Type parameter to allow) 198 483.33 T
+54 627/G272718 FmPA
+( * DataFlavor) 198 472.33 T
+54 616/G272730 FmPA
+( * subclasses to handle special parameters like the text/plain) 198 461.33 T
+54 605/G272719 FmPA
+(*) 202.58 450.33 T
+(charset) 212.56 450.33 T
+(parameters,) 254.95 450.33 T
+(whose) 318.93 450.33 T
+(values) 350.51 450.33 T
+(are) 387.49 450.33 T
+(case) 408.27 450.33 T
+(insensitive.) 434.45 450.33 T
+(\050MIME) 508.42 450.33 T
+54 594/G272733 FmPA
+( * type parameter values are supposed to be case sensitive\051.) 198 439.33 T
+54 583/G272736 FmPA
+( * <p>) 198 428.33 T
+54 572/G272722 FmPA
+(*) 203.1 417.33 T
+(This) 213.6 417.33 T
+(method) 240.3 417.33 T
+(is) 277.8 417.33 T
+(called) 293.7 417.33 T
+(for) 331.2 417.33 T
+(each) 352.5 417.33 T
+(parameter) 379.2 417.33 T
+(name/value) 432.9 417.33 T
+(pair) 492 417.33 T
+(and) 518.7 417.33 T
+54 561/G272723 FmPA
+( * should return the normalized representation of the) 198 406.33 T
+54 550/G272743 FmPA
+( * parameterValue.) 198 395.33 T
+54 539/G272746 FmPA
+( *) 198 384.33 T
+54 528/G273039 FmPA
+( * @param parameterName   the parameter name) 198 373.33 T
+54 517/G273040 FmPA
+( * @param parameterValue  the parameter value) 198 362.33 T
+54 506/G273041 FmPA
+( * @return                the normalized parameter value) 198 351.33 T
+54 495/G273042 FmPA
+( */) 198 340.33 T
+54 484/G267161 FmPA
+( protected String normalizeMimeTypeParameter\050) 198 329.33 T
+54 473/G272749 FmPA
+(                                       String parameterName,) 198 318.33 T
+54 462/G267294 FmPA
+(                                       String parameterValue\051;) 198 307.33 T
+54 451/G267162 FmPA
+54 440/G267167 FmPA
+(/**) 198 285.33 T
+54 429/G272754 FmPA
+(*) 203.1 274.33 T
+(Called) 213.6 274.33 T
+(for) 251.1 274.33 T
+(each) 272.4 274.33 T
+(MIME) 299.1 274.33 T
+(type) 325.8 274.33 T
+(string) 352.5 274.33 T
+(to) 390 274.33 T
+(give) 405.9 274.33 T
+(DataFlavor) 432.6 274.33 T
+(subtypes) 491.7 274.33 T
+54 418/G272755 FmPA
+(*) 202.65 263.33 T
+(the) 212.7 263.33 T
+(opportunity) 233.55 263.33 T
+(to) 297.6 263.33 T
+(change) 313.05 263.33 T
+(how) 350.1 263.33 T
+(the) 370.95 263.33 T
+(normalization) 391.8 263.33 T
+(of) 466.65 263.33 T
+(MIME) 482.1 263.33 T
+(types) 508.35 263.33 T
+54 407/G272765 FmPA
+( * is accomplished.) 198 252.33 T
+54 396/G272768 FmPA
+( * One possible use would be to add default parameter/value) 198 241.33 T
+54 385/G272758 FmPA
+(*) 202.76 230.33 T
+(pairs) 212.91 230.33 T
+(in) 244.67 230.33 T
+(cases) 260.23 230.33 T
+(where) 291.99 230.33 T
+(none) 323.74 230.33 T
+(are) 350.1 230.33 T
+(present) 371.06 230.33 T
+(in) 413.61 230.33 T
+(the) 429.17 230.33 T
+(MIME) 450.13 230.33 T
+(type) 476.48 230.33 T
+(string) 502.84 230.33 T
+54 374/G272773 FmPA
+( * passed in.) 198 219.33 T
+54 363/G273055 FmPA
+( *) 198 208.33 T
+54 352/G273058 FmPA
+( * @param mimeType        the MIME type) 198 197.33 T
+54 341/G273059 FmPA
+( * @return                the normalized MIME type) 198 186.33 T
+54 330/G273060 FmPA
+( */) 198 175.33 T
+54 319/G272752 FmPA
+( protected String normalizeMimeType\050String mimeType\051;) 198 164.33 T
+54 308/G267171 FmPA
+(}) 198 153.33 T
+54 297/G267173 FmPA
+54 286/G267174 FmPA
+54 275/G267074 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.34/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "34" 34
+%%Page: "35" 35
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Document Chang) 207 739.85 T
+(e Histor) 281.59 739.85 T
+(y) 315.19 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+(Ja) 207 60.29 T
+(v) 216.87 60.29 T
+(aBeans\252 Activ) 221.7 60.29 T
+(ation Frame) 287.04 60.29 T
+(w) 337.91 60.29 T
+(ork Speci\336cation V) 344.74 60.29 T
+(er) 425.31 60.29 T
+(sion 1.0a) 433.68 60.29 T
+0 10 Q
+(35) 522.26 60.29 T
+0 9 Q
+( of) 533.38 60.29 T
+0 10 Q
+(36) 546.88 60.29 T
+72 672.33 558 675.33 C
+0 0 0 1 0 0 0 1 K
+207 674.48 558 674.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 674.48 198 674.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(11.0) 174.65 679.33 T
+(Document Chang) 207 679.33 T
+(e Histor) 306.46 679.33 T
+(y) 351.25 679.33 T
+72 823/G266916 FmPA
+1 10 Q
+(May 13,1997) 207 655.66 T
+(:) 260.33 655.66 T
+(Initial Public Draft 1) 263.11 655.66 T
+72 800/G266917 FmPA
+(Aug 1, 1997:) 207 631.66 T
+(Internal Re) 262 631.66 T
+(vie) 306.46 631.66 T
+(w Draft 2) 318.43 631.66 T
+72 776/G266919 FmPA
+5 11 Q
+(\245) 234 612.99 T
+1 10 Q
+(Added) 243 612.99 T
+2 F
+(Inte) 272.16 612.99 T
+(gr) 287.31 612.99 T
+(ation P) 296.05 612.99 T
+(oints) 324.42 612.99 T
+1 F
+( section) 343.87 612.99 T
+72 757/G266923 FmPA
+5 11 Q
+(\245) 234 596.99 T
+1 10 Q
+(Minor API changes) 243 596.99 T
+72 741/G266924 FmPA
+72 729/G266941 FmPA
+(Sept 16 1997:) 207 566.66 T
+(Second Public Draft 3) 262.56 566.66 T
+72 711/G266926 FmPA
+5 11 Q
+(\245) 234 547.99 T
+1 10 Q
+(Edited document to re\337ect change to Standard Extension) 243 547.99 T
+72 692/G266936 FmPA
+5 11 Q
+(\245) 234 531.99 T
+1 10 Q
+(Remo) 243 531.99 T
+(v) 266.74 531.99 T
+(ed URL/URLConnection section) 271.59 531.99 T
+72 676/G266937 FmPA
+5 11 Q
+(\245) 234 515.99 T
+1 10 Q
+(Minor API changes) 243 515.99 T
+72 660/G266938 FmPA
+(Oct 28 1997: Third Public Draft 4) 207 491.66 T
+72 636/G266944 FmPA
+5 11 Q
+(\245) 234 472.99 T
+1 10 Q
+(Minor API changes) 243 472.99 T
+72 617/G267334 FmPA
+5 11 Q
+(\245) 234 456.99 T
+1 10 Q
+(Add additional class descriptions) 243 456.99 T
+72 601/G267336 FmPA
+5 11 Q
+(\245) 234 440.99 T
+1 10 Q
+(Fix) 243 440.99 T
+(ed minor errata) 256.19 440.99 T
+72 585/G267337 FmPA
+(Dec 9, 1997: F) 207 416.66 T
+(ourth Public Draft 5) 266.29 416.66 T
+72 561/G267887 FmPA
+5 11 Q
+(\245) 234 397.99 T
+1 10 Q
+(Minor API changes) 243 397.99 T
+72 542/G267890 FmPA
+5 11 Q
+(\245) 234 381.99 T
+1 10 Q
+(Add additional class descriptions) 243 381.99 T
+72 526/G267891 FmPA
+5 11 Q
+(\245) 234 365.99 T
+1 10 Q
+(Fix) 243 365.99 T
+(ed minor errata) 256.19 365.99 T
+72 510/G267892 FmPA
+5 11 Q
+(\245) 234 349.99 T
+1 10 Q
+(Includes) 243 349.99 T
+3 F
+(Fr) 279.38 349.99 T
+(ozen) 289.75 349.99 T
+1 F
+( API) 309.19 349.99 T
+72 494/G267893 FmPA
+(Feb) 207 325.66 T
+(. 20, 1998: V) 221.6 325.66 T
+(ersion 0.6) 272.99 325.66 T
+72 470/G268091 FmPA
+5 11 Q
+(\245) 234 306.99 T
+1 10 Q
+(Minor typos \336x) 243 306.99 T
+(ed.) 305.08 306.99 T
+72 451/G268094 FmPA
+5 11 Q
+(\245) 234 290.99 T
+1 10 Q
+(Change bars remo) 243 290.99 T
+(v) 315.61 290.99 T
+(ed.) 320.46 290.99 T
+72 435/G269822 FmPA
+(Mar) 207 266.66 T
+(. 16, 1998: V) 223.11 266.66 T
+(ersion 1.0) 274.5 266.66 T
+72 411/G269823 FmPA
+5 11 Q
+(\245) 234 247.99 T
+1 10 Q
+( V) 243 247.99 T
+(ersion 1.0) 251.61 247.99 T
+72 392/G269827 FmPA
+(Mar) 207 223.66 T
+(. 6, 199: V) 223.11 223.66 T
+(ersion 1.0a) 264.5 223.66 T
+72 368/G269834 FmPA
+5 11 Q
+(\245) 234 204.99 T
+1 10 Q
+(Fix) 243 204.99 T
+(ed minor typos.) 256.19 204.99 T
+72 349/G269835 FmPA
+5 11 Q
+(\245) 234 188.99 T
+1 10 Q
+(Synchronized with updated ja) 243 188.99 T
+(v) 361.95 188.99 T
+(adocs) 366.7 188.99 T
+72 333/G272798 FmPA
+72 145.33 558 148.33 C
+0 0 0 1 0 0 0 1 K
+207 147.48 558 147.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 147.48 198 147.48 2 L
+0 Z
+N
+0 0 612 792 C
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(12.0) 174.65 152.33 T
+(Contacting Us) 207 152.33 T
+72 296/G269824 FmPA
+1 10 Q
+(Please send your questions and comments to:) 207 124.66 T
+72 269/G265010 FmPA
+7 F
+(activation-comments@icdev.eng.sun.com) 212 106.66 T
+72 251/G265082 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.35/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+FMENDPAGE
+%%EndPage: "35" 35
+%%Page: "36" 36
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Contacting Us) 189 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(36) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 36) 76.12 60.29 T
+0 9 Q
+(Ja) 189 60.29 T
+(v) 198.87 60.29 T
+(aBeans\252 Activ) 203.7 60.29 T
+(ation Frame) 269.04 60.29 T
+(w) 319.91 60.29 T
+(ork Speci\336cation V) 326.74 60.29 T
+(er) 407.31 60.29 T
+(sion 1.0a) 415.68 60.29 T
+54 825/G265546 FmPA
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.36/DEST FmPD2
+[/Dest/L/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+[/Page 1/View[/XYZ null 207 837 FmDC exch pop null]/Title(ReportTitle - JavaBeans\222 Activation Framework Specification Version 1.0a)/Count 12/OUT FmPD
+[/Page 1/View[/XYZ null 207 576 FmDC exch pop null]/Title(Heading1 - 1.0 Overview)/OUT FmPD
+[/Page 1/View[/XYZ null 207 354 FmDC exch pop null]/Title(Heading1 - 2.0 Goals)/OUT FmPD
+[/Page 2/View[/XYZ null 189 759 FmDC exch pop null]/Title(Heading1 - 3.0 Architectural Overview)/Count -4/OUT FmPD
+[/Page 2/View[/XYZ null 189 472 FmDC exch pop null]/Title(Heading2 - 3.1 The DataHandler Class)/OUT FmPD
+[/Page 2/View[/XYZ null 189 406 FmDC exch pop null]/Title(Heading2 - 3.2 The DataSource Interface)/OUT FmPD
+[/Page 3/View[/XYZ null 207 831 FmDC exch pop null]/Title(Heading2 - 3.3 The CommandMap Interface)/OUT FmPD
+[/Page 3/View[/XYZ null 207 573 FmDC exch pop null]/Title(Heading2 - 3.4 The Command Object Interface)/OUT FmPD
+[/Page 3/View[/XYZ null 207 490 FmDC exch pop null]/Title(Heading1 - 4.0 Using The Framework)/OUT FmPD
+[/Page 4/View[/XYZ null 189 748 FmDC exch pop null]/Title(Heading1 - 5.0 Usage Scenarios)/Count -5/OUT FmPD
+[/Page 4/View[/XYZ null 189 545 FmDC exch pop null]/Title(Heading2 - 5.1 Scenario Architecture)/OUT FmPD
+[/Page 4/View[/XYZ null 189 404 FmDC exch pop null]/Title(Heading2 - 5.2 Initialization)/OUT FmPD
+[/Page 5/View[/XYZ null 207 739 FmDC exch pop null]/Title(Heading2 - 5.3 Getting the Command List)/OUT FmPD
+[/Page 5/View[/XYZ null 207 439 FmDC exch pop null]/Title(Heading2 - 5.4 Performing a Command)/OUT FmPD
+[/Page 6/View[/XYZ null 189 791 FmDC exch pop null]/Title(Heading2 - 5.5 An Alternative Scenario)/OUT FmPD
+[/Page 6/View[/XYZ null 189 438 FmDC exch pop null]/Title(Heading1 - 6.0 Primary Framework Interfaces)/Count -7/OUT FmPD
+[/Page 6/View[/XYZ null 189 367 FmDC exch pop null]/Title(Heading2 - 6.1 The DataSource Interface)/OUT FmPD
+[/Page 8/View[/XYZ null 189 802 FmDC exch pop null]/Title(Heading2 - 6.2 The DataHandler Class)/Count -2/OUT FmPD
+[/Page 8/View[/XYZ null 189 610 FmDC exch pop null]/Title(Heading3 - 6.2.1 Data Encapsulation)/OUT FmPD
+[/Page 8/View[/XYZ null 189 466 FmDC exch pop null]/Title(Heading3 - 6.2.2 Command Binding)/OUT FmPD
+[/Page 14/View[/XYZ null 189 384 FmDC exch pop null]/Title(Heading2 - 6.3 The DataContentHandler Interface)/OUT FmPD
+[/Page 16/View[/XYZ null 189 831 FmDC exch pop null]/Title(Heading2 - 6.4 The CommandMap Interface)/OUT FmPD
+[/Page 17/View[/XYZ null 207 549 FmDC exch pop null]/Title(Heading2 - 6.5 The CommandInfo Class)/OUT FmPD
+[/Page 18/View[/XYZ null 189 340 FmDC exch pop null]/Title(Heading2 - 6.6 The CommandObject Interface)/OUT FmPD
+[/Page 19/View[/XYZ null 207 659 FmDC exch pop null]/Title(Heading2 - 6.7 The DataContentHandlerFactory)/OUT FmPD
+[/Page 19/View[/XYZ null 207 434 FmDC exch pop null]/Title(Heading1 - 7.0 Writing Beans for the Framework)/Count -9/OUT FmPD
+[/Page 19/View[/XYZ null 207 399 FmDC exch pop null]/Title(Heading2 - 7.1 Overview)/OUT FmPD
+[/Page 19/View[/XYZ null 207 309 FmDC exch pop null]/Title(Heading2 - 7.2 Viewer Goals)/Count -2/OUT FmPD
+[/Page 19/View[/XYZ null 221 293 FmDC exch pop null]/Title(Numbered1 - 1. Make the implementation of viewers and editors as simple as implementing Beans. i....)/OUT FmPD
+[/Page 19/View[/XYZ null 221 266 FmDC exch pop null]/Title(Numbered - 2. Allow developers to have a certain amount of flexibility in their implementations.)/OUT FmPD
+[/Page 20/View[/XYZ null 189 831 FmDC exch pop null]/Title(Heading2 - 7.3 General)/OUT FmPD
+[/Page 20/View[/XYZ null 189 573 FmDC exch pop null]/Title(Heading2 - 7.4 Interfaces)/OUT FmPD
+[/Page 20/View[/XYZ null 189 483 FmDC exch pop null]/Title(Heading2 - 7.5 Storage)/OUT FmPD
+[/Page 20/View[/XYZ null 189 344 FmDC exch pop null]/Title(Heading2 - 7.6 Packaging)/OUT FmPD
+[/Page 21/View[/XYZ null 207 831 FmDC exch pop null]/Title(Heading2 - 7.7 Container Support)/OUT FmPD
+[/Page 21/View[/XYZ null 207 717 FmDC exch pop null]/Title(Heading2 - 7.8 Lifecycle)/OUT FmPD
+[/Page 21/View[/XYZ null 207 615 FmDC exch pop null]/Title(Heading2 - 7.9 Command Verbs)/OUT FmPD
+[/Page 21/View[/XYZ null 207 520 FmDC exch pop null]/Title(Heading1 - 8.0 Framework Integration Points)/Count -4/OUT FmPD
+[/Page 21/View[/XYZ null 207 286 FmDC exch pop null]/Title(Heading2 - 8.1 Bean)/OUT FmPD
+[/Page 22/View[/XYZ null 189 300 FmDC exch pop null]/Title(Heading2 - 8.2 Beans)/OUT FmPD
+[/Page 23/View[/XYZ null 207 320 FmDC exch pop null]/Title(Heading2 - 8.3 Viewer Only)/OUT FmPD
+[/Page 24/View[/XYZ null 189 683 FmDC exch pop null]/Title(Heading2 - 8.4 ContentHandler Bean Only)/OUT FmPD
+[/Page 24/View[/XYZ null 189 314 FmDC exch pop null]/Title(Heading1 - 9.0 Framework Deliverables)/Count -3/OUT FmPD
+[/Page 24/View[/XYZ null 189 279 FmDC exch pop null]/Title(Heading2 - 9.1 Packaging Details)/OUT FmPD
+[/Page 25/View[/XYZ null 207 754 FmDC exch pop null]/Title(Heading2 - 9.2 Framework Core Classes)/OUT FmPD
+[/Page 26/View[/XYZ null 189 789 FmDC exch pop null]/Title(Heading2 - 9.3 Framework Auxiliary Classes)/OUT FmPD
+[/Page 27/View[/XYZ null 207 831 FmDC exch pop null]/Title(Heading1 - 10.0 Appendix A: Class definitions for default package implementations:)/Count -5/OUT FmPD
+[/Page 27/View[/XYZ null 207 782 FmDC exch pop null]/Title(Heading2 - 10.1 FileDataSource)/OUT FmPD
+[/Page 28/View[/XYZ null 189 472 FmDC exch pop null]/Title(Heading2 - 10.2 FileTypeMap)/OUT FmPD
+[/Page 29/View[/XYZ null 207 527 FmDC exch pop null]/Title(Heading2 - 10.3 MimetypesFileTypeMap)/OUT FmPD
+[/Page 30/View[/XYZ null 189 516 FmDC exch pop null]/Title(Heading2 - 10.4 MailcapCommandMap)/OUT FmPD
+[/Page 32/View[/XYZ null 189 831 FmDC exch pop null]/Title(Heading2 - 10.5 ActivationDataFlavor)/OUT FmPD
+[/Page 35/View[/XYZ null 207 831 FmDC exch pop null]/Title(Heading1 - 11.0 Document Change History)/OUT FmPD
+[/Page 35/View[/XYZ null 207 304 FmDC exch pop null]/Title(Heading1 - 12.0 Contacting Us)/OUT FmPD
+[ /PageMode /UseOutlines /Page 1 /View [/XYZ null null null] /DOCVIEW FmPD2
+FMENDPAGE
+%%EndPage: "36" 36
+%%Trailer
+FMENDDOCUMENT
+%%BoundingBox: 0 0 612 792
+%%PageOrder: Ascend
+%%Pages: 36
+%%DocumentFonts: Helvetica-Bold
+%%+ Times-Roman
+%%+ Times-Italic
+%%+ Times-Bold
+%%+ Palatino-Roman
+%%+ Courier-Bold
+%%+ Helvetica
+%%+ Courier
+%%DocumentNeedsFonts: Helvetica-Bold
+%%+ Times-Roman
+%%+ Times-Italic
+%%+ Times-Bold
+%%+ Palatino-Roman
+%%+ Courier-Bold
+%%+ Helvetica
+%%+ Courier
+%%DocumentSuppliedFonts:
+%%EOF
diff --git a/src/share/doc/spec/JAF-1.1-changes.txt b/src/share/doc/spec/JAF-1.1-changes.txt
new file mode 100644
index 0000000..531c7a3
--- /dev/null
+++ b/src/share/doc/spec/JAF-1.1-changes.txt
@@ -0,0 +1,197 @@
+
+		JavaBeans Activation Framework 1.1
+		==================================
+
+Please send comments and feedback to activation-comments@sun.com.
+
+The JavaBeans Activation Framework (JAF) 1.0 has been in use for eight
+years.  In that time it has served its original purpose quite well,
+with only a few enhancements being requested.
+
+JAF 1.1 proposes a few minor changes to the JAF APIs to address the
+most commonly requested enhancements.  Following is a description of
+the new APIs that are being introduced in JAF 1.1.  The numbers in
+parentheses are bug numbers; you can find more information about the
+bug reports at:
+
+    http://bugs.sun.com
+
+The JAF 1.1 RI will require J2SE 1.4 or later.  (The JAF 1.0.2 RI
+requires only JDK 1.1.6.)  JAF 1.1 will be included in J2EE 5.0
+and J2SE 6.0.
+
+The JAF 1.1 RI and TCK will be available under the same terms as the
+JAF 1.0 RI and TCK.
+
+
+===================================================================
+
+1.  Need way to find all known MIME types (4134676)
+---------------------------------------------------
+
+To support this we add a new method to CommandMap:
+
+    /**
+     * Get all the MIME types known to this command map.
+     * If the command map doesn't support this operation,
+     * null is returned.
+     *
+     * @return		array of MIME types as strings, or null if not supported
+     * @since	JAF 1.1
+     */
+    public String[] getMimeTypes()
+
+The default implementation of this method returns null for
+compatibility with applications that have provided a CommandMap
+implementation based on JAF 1.0.  The JAF 1.1 implementation of
+MailcapCommandMap will return all the MIME types known to the
+command map.
+
+
+===================================================================
+
+2.  CommandMap needs file name to choose proper command on Windows (5090200)
+----------------------------------------------------------------------------
+
+This RFE requests additional CommandMap methods that allow
+the CommandMap implementation to determine the file name, to
+better support systems such as Windows that use the file name
+extension to choose between the commands available to support
+a given MIME type.  We add the following methods to CommandMap:
+
+    /**
+     * Get the preferred command list from a MIME Type. The actual semantics
+     * are determined by the implementation of the CommandMap. <p>
+     *
+     * The <code>DataSource</code> provides extra information, such as
+     * the file name, that a CommandMap implementation may use to further
+     * refine the list of commands that are returned.  The implementation
+     * in this class simply calls the <code>getPreferredCommands</code>
+     * method that ignores this argument.
+     *
+     * @param mimeType	the MIME type
+     * @param ds	a DataSource for the data
+     * @return the CommandInfo classes that represent the command Beans.
+     * @since	JAF 1.1
+     */
+    public CommandInfo[] getPreferredCommands(String mimeType, DataSource ds)
+
+    /**
+     * Get all the available commands for this type. This method
+     * should return all the possible commands for this MIME type. <p>
+     *
+     * The <code>DataSource</code> provides extra information, such as
+     * the file name, that a CommandMap implementation may use to further
+     * refine the list of commands that are returned.  The implementation
+     * in this class simply calls the <code>getAllCommands</code>
+     * method that ignores this argument.
+     *
+     * @param mimeType	the MIME type
+     * @param ds	a DataSource for the data
+     * @return the CommandInfo objects representing all the commands.
+     * @since	JAF 1.1
+     */
+    public CommandInfo[] getAllCommands(String mimeType, DataSource ds)
+
+    /**
+     * Get the default command corresponding to the MIME type. <p>
+     *
+     * The <code>DataSource</code> provides extra information, such as
+     * the file name, that a CommandMap implementation may use to further
+     * refine the command that is chosen.  The implementation
+     * in this class simply calls the <code>getCommand</code>
+     * method that ignores this argument.
+     *
+     * @param mimeType	the MIME type
+     * @param cmdName	the command name
+     * @param ds	a DataSource for the data
+     * @return the CommandInfo corresponding to the command.
+     * @since	JAF 1.1
+     */
+    public CommandInfo getCommand(String mimeType, String cmdName,
+				DataSource ds)
+
+    /**
+     * Locate a DataContentHandler that corresponds to the MIME type.
+     * The mechanism and semantics for determining this are determined
+     * by the implementation of the particular CommandMap. <p>
+     *
+     * The <code>DataSource</code> provides extra information, such as
+     * the file name, that a CommandMap implementation may use to further
+     * refine the choice of DataContentHandler.  The implementation
+     * in this class simply calls the <code>createDataContentHandler</code>
+     * method that ignores this argument.
+     *
+     * @param mimeType	the MIME type
+     * @param ds	a DataSource for the data
+     * @return		the DataContentHandler for the MIME type
+     * @since	JAF 1.1
+     */
+    public DataContentHandler createDataContentHandler(String mimeType,
+				DataSource ds)
+
+
+As described, the default implementations of these methods simply
+call the existing CommandMap methods that don't require a
+DataSource object.  The DataHandler implementation is changed to
+call these new methods if created with a DataSource.
+
+The JAF 1.1 Reference Implementation would not provide a CommandMap
+implementation that uses these new methods.
+
+
+===================================================================
+
+3.  MailcapCommandMap needs support for "fallback" entries (6252930)
+--------------------------------------------------------------------
+
+This RFE describes a problem with wildcard matching and providing
+fallbacks for JAF commands, in particular DataContentHandlers used
+by JavaMail.  To support the scenario described in that bug report,
+we add a special "command" entry that can be added to a mailcap
+entry to indicate that the mailcap entry defines fallback commands
+that should only be used if no regular entry is available.  An
+attribute of the form
+
+	x-java-fallback-entry=true
+
+in the mailcap entry indicates a fallback entry.  For example:
+
+	text/*;; x-java-fallback-entry=true; x-java-view=com.sun.TextViewer
+
+The MailcapCommandMap implementation supports this attribute.
+Methods that return an array of commands will include commands
+from fallback entries after commands from regular entries.
+Methods that use or return only a single command will search
+fallback entries after regular entries.  This two level hierarchy,
+in combination with the existing search rules for mailcap files,
+is sufficient to handle the common use cases.
+
+
+===================================================================
+
+4.  MailcapCommandMap should store *ALL* mailcap entries (4848096)
+------------------------------------------------------------------
+
+This RFE requests the ability to retrieve the native command
+line associated with a mailcap entry.  To support this we add
+a method to MailcapCommandMap:
+
+    /**
+     * Get the native commands for the given MIME type.
+     * Returns an array of strings where each string is
+     * an entire mailcap file entry.  The application
+     * will need to parse the entry to extract the actual
+     * command as well as any attributes it needs. See
+     * <A HREF="http://www.ietf.org/rfc/rfc1524.txt">RFC 1524</A>
+     * for details of the mailcap entry syntax.  Only mailcap
+     * entries that specify a view command for the specified
+     * MIME type are returned.
+     *
+     * @return	array of native command entries
+     * @since	JAF 1.1
+     */
+    public String[] getNativeCommands(String mimeType)
+
+An application can choose to use these native "view" commands
+using (e.g.) the Runtime.exec method.
diff --git a/src/share/doc/spec/JAF-1.1.doc b/src/share/doc/spec/JAF-1.1.doc
new file mode 100644
index 0000000..339f9a8
--- /dev/null
+++ b/src/share/doc/spec/JAF-1.1.doc
Binary files differ
diff --git a/src/share/doc/spec/JAF-1.1.pdf b/src/share/doc/spec/JAF-1.1.pdf
new file mode 100644
index 0000000..a0d462a
--- /dev/null
+++ b/src/share/doc/spec/JAF-1.1.pdf
Binary files differ
diff --git a/src/share/doc/spec/JAF-1.1.ps b/src/share/doc/spec/JAF-1.1.ps
new file mode 100644
index 0000000..730871f
--- /dev/null
+++ b/src/share/doc/spec/JAF-1.1.ps
@@ -0,0 +1,14155 @@
+%!PS-Adobe-3.0
+%%BoundingBox: (atend)
+%%Pages: (atend)
+%%PageOrder: (atend)
+%%DocumentFonts: (atend)
+%%DocumentNeedsFonts: (atend)
+%%DocumentSuppliedFonts: (atend)
+%%Creator: Frame 7.0
+%%DocumentData: Clean7Bit
+%%EndComments
+%%BeginProlog
+%
+% Frame ps_prolog 7.0, for use with Adobe Unix Frame 7.0 products
+%
+% This ps_prolog file is Copyright (c) 1986-2002 Adobe Systems, Incoporated.
+% All rights reserved.  This ps_prolog file may be freely copied and 
+% distributed in conjunction with documents created using Adobe FrameMaker
+% as long as this copyright notice is preserved.
+/FMDocSave save def
+%
+% FrameMaker users specify the proper paper size for each print job in the
+% "Print" dialog's "Printer Paper Size" "Width" and "Height~ fields.  If the
+% printer that the PS file is sent to does not support the requested paper
+% size, or if there is no paper tray of the proper size currently installed, 
+% then the job will not be printed.  The following flag, if set to true, will
+% cause the job to print on the default paper in such cases.
+/FMAllowPaperSizeMismatch            false def
+%
+% Adobe FrameMaker normally prints colors as their true color on a color printer
+% or as shades of gray, based on luminance, on a black-and white printer. The
+% following flag, if set to true, forces all non-white colors to print as pure
+% black. This has no effect on bitmap images.
+/FMPrintAllColorsAsBlack             false def
+%
+% Adobe FrameMaker can either set their own line screens or use a printer's 
+% default settings. Three flags below control this separately for no 
+% separations, spot separations and process separations. If a flag
+% is true, then the default printer settings will not be changed. If it is
+% false, Adobe FrameMaker will use their own settings from a table based on
+% the printer's resolution.
+/FMUseDefaultNoSeparationScreen      true  def
+/FMUseDefaultSpotSeparationScreen    true  def
+/FMUseDefaultProcessSeparationScreen false def
+%
+% For any given PostScript printer resolution, Adobe FrameMaker has two sets of 
+% screen angles and frequencies for printing process separations, which are 
+% recomended by Adobe. The following variable chooses the higher frequencies
+% when set to true or the lower frequencies when set to false. This is only
+% effective if the appropriate FMUseDefault...SeparationScreen flag is false.
+/FMUseHighFrequencyScreens true def
+%
+% The following is a set of predefined optimal frequencies and angles for various
+% common dpi settings. This is taken from "Advances in Color Separation Using
+% PostScript Software Technology," from Adobe Systems (3/13/89 P.N. LPS 0043)
+% and corrolated with information which is in various PPD (4.0) files.
+%
+% The "dpiranges" figure is the minimum dots per inch device resolution which
+% can support this setting. The "low" and "high" values are controlled by the
+% setting of the FMUseHighFrequencyScreens flag above. The "TDot" flags control
+% the use of the "Yellow Triple Dot" feature whereby the frequency id divided by
+% three, but the dot function is "trippled" giving a block of 3x3 dots per cell.
+%
+% PatFreq is a compromise pattern frequency for ps Level 2 printers which is close
+% to the ideal WYSIWYG pattern frequency of 9 repetitions/inch but does not beat
+% (too badly) against the screen frequencies of any separations for that DPI.
+/dpiranges   [  2540    2400    1693     1270    1200     635      600      0      ] def
+/CMLowFreqs  [ 100.402  94.8683 89.2289 100.402  94.8683  66.9349  63.2456 47.4342 ] def
+/YLowFreqs   [  95.25   90.0    84.65    95.25   90.0     70.5556  66.6667 50.0    ] def
+/KLowFreqs   [  89.8026 84.8528 79.8088  89.8026 84.8528  74.8355  70.7107 53.033  ] def
+/CLowAngles  [  71.5651 71.5651 71.5651 71.5651  71.5651  71.5651  71.5651 71.5651 ] def
+/MLowAngles  [  18.4349 18.4349 18.4349 18.4349  18.4349  18.4349  18.4349 18.4349 ] def
+/YLowTDot    [  true    true    false    true    true     false    false   false   ] def
+/CMHighFreqs [ 133.87  126.491 133.843  108.503 102.523  100.402   94.8683 63.2456 ] def
+/YHighFreqs  [ 127.0   120.0   126.975  115.455 109.091   95.25    90.0    60.0    ] def
+/KHighFreqs  [ 119.737 113.137 119.713  128.289 121.218   89.8026  84.8528 63.6395 ] def
+/CHighAngles [  71.5651 71.5651 71.5651  70.0169 70.0169  71.5651  71.5651 71.5651 ] def
+/MHighAngles [  18.4349 18.4349 18.4349  19.9831 19.9831  18.4349  18.4349 18.4349 ] def
+/YHighTDot   [  false   false   true     false   false    true     true    false   ] def
+/PatFreq     [	10.5833 10.0     9.4055  10.5833 10.0	  10.5833  10.0	   9.375   ] def
+%
+% PostScript Level 2 printers contain an "Accurate Screens" feature which can
+% improve process separation rendering at the expense of compute time. This 
+% flag is ignored by PostScript Level 1 printers.
+/FMUseAcccurateScreens true def
+%
+% The following PostScript procedure defines the spot function that Frame
+% products will use for process separations. You may un-comment-out one of
+% the alternative functions below, or use your own.
+%
+% Dot function
+/FMSpotFunction {abs exch abs 2 copy add 1 gt 
+		{1 sub dup mul exch 1 sub dup mul add 1 sub }
+		{dup mul exch dup mul add 1 exch sub }ifelse } def
+%
+% Line function
+% /FMSpotFunction { pop } def
+%
+% Elipse function
+% /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add 
+%		sqrt 1 exch sub } def
+%
+%
+/FMversion (7.0) def 
+/fMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def
+/FMPColor
+	fMLevel1 {
+		false
+		/colorimage where {pop pop true} if
+	} {
+		true
+	} ifelse
+def
+/FrameDict 400 dict def 
+systemdict /errordict known not {/errordict 10 dict def
+		errordict /rangecheck {stop} put} if
+% The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk
+FrameDict /tmprangecheck errordict /rangecheck get put 
+errordict /rangecheck {FrameDict /bug true put} put 
+FrameDict /bug false put 
+mark 
+% Some PS machines read past the CR, so keep the following 3 lines together!
+currentfile 5 string readline
+00
+0000000000
+cleartomark 
+errordict /rangecheck FrameDict /tmprangecheck get put 
+FrameDict /bug get { 
+	/readline {
+		/gstring exch def
+		/gfile exch def
+		/gindex 0 def
+		{
+			gfile read pop 
+			dup 10 eq {exit} if 
+			dup 13 eq {exit} if 
+			gstring exch gindex exch put 
+			/gindex gindex 1 add def 
+		} loop
+		pop 
+		gstring 0 gindex getinterval true 
+		} bind def
+	} if
+/FMshowpage /showpage load def
+/FMquit /quit load def
+/FMFAILURE { 
+	2 copy exch = = flush 
+	FMshowpage 
+	/Helvetica findfont 12 scalefont setfont
+	72 200 moveto show
+	72 220 moveto show
+	FMshowpage 
+	FMquit 
+	} def 
+/FMVERSION {
+	FMversion ne {
+		(Adobe Frame product version does not match ps_prolog!  Check installation;)
+		(also check ~/fminit and ./fminit for old versions) FMFAILURE
+		} if
+	} def 
+/fmConcatProcs
+	{
+	/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def
+	newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx
+}def
+FrameDict begin [
+	/ALDsave
+	/FMdicttop
+	/FMoptop
+	/FMpointsize
+	/FMsetsize
+	/FMsaveobject
+	/b
+	/bitmapsave
+	/blut
+	/bpside
+	/bs
+	/bstring
+	/bwidth
+	/c
+	/cf
+	/cs
+	/cynu
+	/depth
+	/edown
+	/fh
+	/fillvals
+	/fw
+	/fx
+	/fy
+	/g
+	/gfile
+	/gindex
+	/grnt
+	/gryt
+	/gstring
+	/height
+	/hh
+	/i
+	/im
+	/indx
+	/is
+	/k
+	/kk
+	/landscape
+	/lb
+	/len
+	/llx
+	/lly
+	/m
+	/magu
+	/manualfeed
+	/n
+	/offbits
+	/onbits
+	/organgle
+	/orgbangle
+	/orgbfreq
+	/orgbproc
+	/orgbxfer
+	/orgfreq
+	/orggangle
+	/orggfreq
+	/orggproc
+	/orggxfer
+	/orghalftone
+	/orgmatrix
+	/orgproc
+	/orgrangle
+	/orgrfreq
+	/orgrproc
+	/orgrxfer
+	/orgxfer
+	/pagesave
+	/paperheight
+	/papersizedict
+	/paperwidth
+	/pos
+	/pwid
+	/r
+	/rad
+	/redt
+	/sl
+	/str
+	/tran
+	/u
+	/urx
+	/ury
+	/val
+	/width
+	/width
+	/ws
+	/ww
+	/x
+	/x1
+	/x2
+	/xindex
+	/xpoint
+	/xscale
+	/xx
+	/y
+	/y1
+	/y2
+	/yelu
+	/yindex
+	/ypoint
+	/yscale
+	/yy
+	/tintGray
+] { 0 def } forall
+/FmBD {bind def} bind def
+/FmPD4U true def 
+/IsDistiller5050 
+{ 
+  mark systemdict 
+  dup currentdistillerparams /CoreDistVersion get dup 5050 ge
+  {cleartomark true} 
+  {5000 lt 
+    {cleartomark false} 
+    { 
+      dup dup /product known exch /buildtime known and not
+      {cleartomark false} 
+      {dup dup /product get (Distiller) eq                      
+	{/buildtime get 985000000 gt 
+	  {cleartomark true}
+	  {cleartomark false} ifelse
+	}
+	{dup dup /product get (Mac Distiller) eq                  
+	  {/buildtime get 985000000 gt 
+	    {cleartomark true}
+	    {cleartomark false} ifelse
+	  }
+	  {dup dup /product (Acrobat Distiller Server) eq       
+	    {cleartomark true } 
+	    { 
+	      1183615869 internaldict /makeoperator known 
+	      {cleartomark true}
+	      {cleartomark false} ifelse 
+	    } ifelse
+	  } ifelse
+	} ifelse
+      } ifelse
+    } ifelse
+  } ifelse
+} bind def
+systemdict /pdfmark known systemdict /currentdistillerparams known and {
+	/fMAcrobat true def
+	
+	/FmPD /pdfmark load def
+	
+	
+	/FmPT /show load def
+	
+	
+	
+	currentdistillerparams /CoreDistVersion get 2000 ge 
+	{
+	
+		
+		/FmPD2 /pdfmark load def
+		
+		IsDistiller5050
+		{
+		  /FmPD4 /pdfmark load def
+		}
+		{
+		  /FmPD4
+		  { FmPD4U 
+	 	    {(%%[Acrobat Distiller 5.05 and higher is required to generate Tagged PDF]%%) = 
+	  	     (%%[Tagged PDF is not generated.]%%) = flush
+		    } if
+		    /FmPD4U false def
+		    cleartomark
+		  } FmBD
+		} ifelse
+		
+		
+		
+		
+	  /fmCG true def 
+	  /FmND
+	  { mark exch /Dest exch 5 3 roll /View [ /XYZ 5 -2 roll FmDC null ] /DEST FmPD 
+	  }FmBD
+	  /FmPA 
+	  { fmCG
+	    { pop pop pop }
+	    { FmND } ifelse
+	  } FmBD
+	} 
+	{
+		
+		/FmPD4 /cleartomark load def
+		/FmPD2 /cleartomark load def
+		/FmPA {pop pop pop}FmBD
+		/FmND {pop pop pop}FmBD
+	} ifelse
+} {
+	
+	/fMAcrobat false def
+	/FmPD /cleartomark load def
+	/FmPD4 /cleartomark load def
+	/FmPD2 /cleartomark load def
+	/FmPT /pop load def
+	/FmPA {pop pop pop}FmBD
+	/FmND {pop pop pop}FmBD
+} ifelse
+/FmDC {
+	transform fMDefaultMatrix defaultmatrix itransform round cvi exch round cvi exch
+}FmBD
+/FmBx {
+	dup 3 index lt {3 1 roll exch} if 
+	1 index 4 index lt {4 -1 roll 3 1 roll exch 4 1 roll} if
+}FmBD
+/FmBz {3 -1 roll sub 3 1 roll exch sub exch 0 0 4 1 roll 4 1 roll}FmBD
+/FMnone 0 def
+/FMcyan 1 def
+/FMmagenta 2 def
+/FMyellow 3 def
+/FMblack 4 def
+/FMcustom 5 def
+/fMNegative false def 
+/FrameSepIs FMnone def 
+/FrameSepBlack 0 def
+/FrameSepYellow 0 def
+/FrameSepMagenta 0 def
+/FrameSepCyan 0 def
+/FrameSepRed 1 def
+/FrameSepGreen 1 def
+/FrameSepBlue 1 def
+/FrameCurGray 1 def
+/FrameCurPat null def
+/FrameCurColors [ 0 0 0 1 0 0 0 1] def 
+/FrameColorEpsilon .001 def	
+/eqepsilon {		
+	sub dup 0 lt {neg} if
+	FrameColorEpsilon le
+} bind def
+/FrameCmpColorsCMYK { 
+	2 copy 0 get exch 0 get eqepsilon {
+		2 copy 1 get exch 1 get eqepsilon {
+			2 copy 2 get exch 2 get eqepsilon {
+				3 get exch 3 get eqepsilon
+			} {pop pop false} ifelse
+		}{pop pop false} ifelse
+	} {pop pop false} ifelse
+} bind def
+/FrameCmpColorsRGB { 
+	2 copy 4 get exch 0 get eqepsilon {
+		2 copy 5 get exch 1 get eqepsilon {
+			6 get exch 2 get eqepsilon
+		}{pop pop false} ifelse
+	} {pop pop false} ifelse
+} bind def
+/RGBtoCMYK { 
+	1 exch sub 
+	3 1 roll 
+	1 exch sub 
+	3 1 roll 
+	1 exch sub 
+	3 1 roll 
+	3 copy 
+	2 copy 
+	le { pop } { exch pop } ifelse 
+	2 copy 
+	le { pop } { exch pop } ifelse 
+	dup dup dup 
+	6 1 roll 
+	4 1 roll 
+	7 1 roll 
+	sub 
+	6 1 roll 
+	sub 
+	5 1 roll 
+	sub 
+	4 1 roll 
+} bind def
+/CMYKtoRGB { 
+	dup dup 4 -1 roll add 						  
+	5 1 roll 3 -1 roll add 						  
+	4 1 roll add 								  
+	1 exch sub dup 0 lt {pop 0} if 3 1 roll 	  
+	1 exch sub dup 0 lt {pop 0} if exch 	      
+	1 exch sub dup 0 lt {pop 0} if exch	  		  
+} bind def
+/FrameSepInit {
+	1.0 RealSetgray
+} bind def
+/FrameSetSepColor { 
+	/FrameSepBlue exch def
+	/FrameSepGreen exch def
+	/FrameSepRed exch def
+	/FrameSepBlack exch def
+	/FrameSepYellow exch def
+	/FrameSepMagenta exch def
+	/FrameSepCyan exch def
+	/FrameSepIs FMcustom def
+	setCurrentScreen	
+} bind def
+/FrameSetCyan {
+	/FrameSepBlue 1.0 def
+	/FrameSepGreen 1.0 def
+	/FrameSepRed 0.0 def
+	/FrameSepBlack 0.0 def
+	/FrameSepYellow 0.0 def
+	/FrameSepMagenta 0.0 def
+	/FrameSepCyan 1.0 def
+	/FrameSepIs FMcyan def
+	setCurrentScreen	
+} bind def
+ 
+/FrameSetMagenta {
+	/FrameSepBlue 1.0 def
+	/FrameSepGreen 0.0 def
+	/FrameSepRed 1.0 def
+	/FrameSepBlack 0.0 def
+	/FrameSepYellow 0.0 def
+	/FrameSepMagenta 1.0 def
+	/FrameSepCyan 0.0 def
+	/FrameSepIs FMmagenta def
+	setCurrentScreen
+} bind def
+ 
+/FrameSetYellow {
+	/FrameSepBlue 0.0 def
+	/FrameSepGreen 1.0 def
+	/FrameSepRed 1.0 def
+	/FrameSepBlack 0.0 def
+	/FrameSepYellow 1.0 def
+	/FrameSepMagenta 0.0 def
+	/FrameSepCyan 0.0 def
+	/FrameSepIs FMyellow def
+	setCurrentScreen
+} bind def
+ 
+/FrameSetBlack {
+	/FrameSepBlue 0.0 def
+	/FrameSepGreen 0.0 def
+	/FrameSepRed 0.0 def
+	/FrameSepBlack 1.0 def
+	/FrameSepYellow 0.0 def
+	/FrameSepMagenta 0.0 def
+	/FrameSepCyan 0.0 def
+	/FrameSepIs FMblack def
+	setCurrentScreen
+} bind def
+ 
+/FrameNoSep { 
+	/FrameSepIs FMnone def
+	setCurrentScreen
+} bind def
+/FrameSetSepColors { 
+	FrameDict begin
+	[ exch 1 add 1 roll ]
+	/FrameSepColors  
+	exch def end
+	} bind def
+/FrameColorInSepListCMYK { 
+	FrameSepColors {  
+       		exch dup 3 -1 roll 
+       		FrameCmpColorsCMYK 
+       		{ pop true exit } if
+    	} forall 
+	dup true ne {pop false} if
+	} bind def
+/FrameColorInSepListRGB { 
+	FrameSepColors {  
+       		exch dup 3 -1 roll 
+       		FrameCmpColorsRGB 
+       		{ pop true exit } if
+    	} forall 
+	dup true ne {pop false} if
+	} bind def
+/RealSetgray /setgray load def
+/RealSetrgbcolor /setrgbcolor load def
+/RealSethsbcolor /sethsbcolor load def
+end 
+/setgray { 
+	FrameDict begin
+	FrameSepIs FMnone eq
+		{ RealSetgray } 
+		{ 
+		FrameSepIs FMblack eq 
+			{ RealSetgray } 
+			{ FrameSepIs FMcustom eq 
+			  FrameSepRed 0 eq and
+			  FrameSepGreen 0 eq and
+			  FrameSepBlue 0 eq and {
+			  	RealSetgray
+			  } {
+				1 RealSetgray pop 
+			  } ifelse
+			} ifelse
+		} ifelse
+	end
+} bind def
+/setrgbcolor { 
+	FrameDict begin
+	FrameSepIs FMnone eq
+	{  RealSetrgbcolor }
+	{
+		3 copy [ 4 1 roll ] 
+		FrameColorInSepListRGB
+		{
+				FrameSepBlue eq exch 
+			 	FrameSepGreen eq and exch 
+			 	FrameSepRed eq and
+			 	{ 0 } { 1 } ifelse
+		}
+		{
+			FMPColor {
+				RealSetrgbcolor
+				currentcmykcolor
+			} {
+				RGBtoCMYK
+			} ifelse
+			FrameSepIs FMblack eq
+			{1.0 exch sub 4 1 roll pop pop pop} {
+			FrameSepIs FMyellow eq
+			{pop 1.0 exch sub 3 1 roll pop pop} {
+			FrameSepIs FMmagenta eq
+			{pop pop 1.0 exch sub exch pop } {
+			FrameSepIs FMcyan eq
+			{pop pop pop 1.0 exch sub } 
+			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
+		} ifelse
+		RealSetgray
+	} 
+	ifelse
+	end
+} bind def
+/sethsbcolor {
+	FrameDict begin
+	FrameSepIs FMnone eq 
+	{ RealSethsbcolor } 
+	{
+		RealSethsbcolor 
+		currentrgbcolor  
+		setrgbcolor 
+	} 
+	ifelse
+	end
+} bind def
+FrameDict begin
+/setcmykcolor where {
+	pop /RealSetcmykcolor /setcmykcolor load def
+} {
+	/RealSetcmykcolor {
+		4 1 roll
+		3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat 
+		RealSetrgbcolor pop
+	} bind def
+} ifelse
+userdict /setcmykcolor { 
+		FrameDict begin
+		FrameSepIs FMnone eq
+		{ RealSetcmykcolor } 
+		{
+			4 copy [ 5 1 roll ]
+			FrameColorInSepListCMYK
+			{
+				FrameSepBlack eq exch 
+				FrameSepYellow eq and exch 
+				FrameSepMagenta eq and exch 
+				FrameSepCyan eq and 
+				{ 0 } { 1 } ifelse
+			}
+			{
+				FrameSepIs FMblack eq
+				{1.0 exch sub 4 1 roll pop pop pop} {
+				FrameSepIs FMyellow eq
+				{pop 1.0 exch sub 3 1 roll pop pop} {
+				FrameSepIs FMmagenta eq
+				{pop pop 1.0 exch sub exch pop } {
+				FrameSepIs FMcyan eq
+				{pop pop pop 1.0 exch sub } 
+				{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
+			} ifelse
+			RealSetgray
+		}
+		ifelse
+		end
+	} bind put
+fMLevel1 { 
+	
+	
+	
+	/patScreenDict 7 dict dup begin
+		<0f1e3c78f0e1c387> [ 45  { pop } {exch pop} 		.5   2 sqrt] FmBD
+		<0f87c3e1f0783c1e> [ 135 { pop } {exch pop}			.5   2 sqrt] FmBD
+		<cccccccccccccccc> [ 0   { pop } dup				.5   2	   ] FmBD
+		<ffff0000ffff0000> [ 90  { pop } dup				.5   2	   ] FmBD
+		<8142241818244281> [ 45  { 2 copy lt {exch} if pop}	dup .75  2 sqrt] FmBD
+		<03060c183060c081> [ 45  { pop } {exch pop}			.875 2 sqrt] FmBD
+		<8040201008040201> [ 135 { pop } {exch pop}			.875 2 sqrt] FmBD
+	end def
+} { 
+	
+	/patProcDict 5 dict dup begin
+		<0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 
+											4 -4 moveto 12 4 lineto stroke
+											-4 4 moveto 4 12 lineto stroke} bind def
+		<0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke 
+											-4 4 moveto 4 -4 lineto stroke
+											4 12 moveto 12 4 lineto stroke} bind def
+		<8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke
+											-1 -1 moveto 9 9 lineto stroke } bind def
+		<03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 
+											4 -4 moveto 12 4 lineto stroke
+											-4 4 moveto 4 12 lineto stroke} bind def
+		<8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke 
+											-4 4 moveto 4 -4 lineto stroke
+											4 12 moveto 12 4 lineto stroke} bind def
+	end def
+	/patDict 15 dict dup begin
+		/PatternType 1 def		
+		/PaintType 2 def		
+		/TilingType 3 def		
+		/BBox [ 0 0 8 8 ] def 	
+		/XStep 8 def			
+		/YStep 8 def			
+		/PaintProc {
+			begin
+			patProcDict bstring known {
+				patProcDict bstring get exec
+			} {
+				8 8 true [1 0 0 -1 0 8] bstring imagemask
+			} ifelse
+			end
+		} bind def
+	end def
+} ifelse
+/tintCMYK {
+	1 tintGray sub FrameCurColors 0 4 getinterval aload pop 	
+	4 index mul 5 1 roll										
+	3 index mul 5 1 roll										
+	2 index mul 5 1 roll										
+	mul 4 1 roll												
+}bind def
+/tintRGB {
+	1 tintGray sub FrameCurColors 4 3 getinterval aload pop 	
+	1 exch sub 3 index mul 1 exch sub 4 1 roll					
+	1 exch sub 2 index mul 1 exch sub 4 1 roll					
+	1 exch sub mul 1 exch sub 3 1 roll							
+}bind def
+/combineColor {
+	/tintGray 1 1 FrameCurGray sub FrameCurColors 7 get mul sub def
+    FrameSepIs FMnone eq
+	{
+		graymode fMLevel1 or not {
+			
+			[/Pattern [/DeviceCMYK]] setcolorspace
+			tintCMYK FrameCurPat setcolor
+		} {
+			FrameCurColors 3 get 1.0 ge {
+				tintGray RealSetgray
+			} {
+				fMAcrobat not FMPColor graymode and and {
+					tintCMYK
+					RealSetcmykcolor
+				} {
+					tintRGB
+					RealSetrgbcolor
+				} ifelse
+			} ifelse
+		} ifelse
+	} { 
+		FrameCurColors 0 4 getinterval aload
+		FrameColorInSepListCMYK {
+			FrameSepBlack eq exch 
+			FrameSepYellow eq and exch 
+			FrameSepMagenta eq and exch 
+			FrameSepCyan eq and
+			FrameSepIs FMcustom eq and
+			{ tintGray } { 1 } ifelse
+		} {
+			FrameSepIs FMblack eq
+			{tintGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} {
+			FrameSepIs FMyellow eq
+			{pop tintGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} {
+			FrameSepIs FMmagenta eq
+			{pop pop tintGray 1.0 exch sub mul 1.0 exch sub exch pop } {
+			FrameSepIs FMcyan eq
+			{pop pop pop tintGray 1.0 exch sub mul 1.0 exch sub } 
+			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
+		} ifelse
+		graymode fMLevel1 or not {
+			
+			[/Pattern [/DeviceGray]] setcolorspace
+			FrameCurPat setcolor
+		} { 
+			graymode not fMLevel1 and {
+				
+				dup 1 lt {pop FrameCurGray} if
+			} if
+			RealSetgray
+		} ifelse
+	} ifelse
+} bind def
+/savematrix {
+	orgmatrix currentmatrix pop
+	} bind def
+/restorematrix {
+	orgmatrix setmatrix
+	} bind def
+/fMDefaultMatrix matrix def
+/fMatrix2 matrix def
+/dpi    72 0 fMDefaultMatrix defaultmatrix dtransform
+    dup mul exch   dup mul add   sqrt def
+	
+/freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def
+/sangle 1 0 fMDefaultMatrix defaultmatrix dtransform exch atan def
+	sangle fMatrix2 rotate 
+	fMDefaultMatrix defaultmatrix fMatrix2 concatmatrix 
+	dup 0 get /sflipx exch def
+	    3 get /sflipy exch def
+/screenIndex {
+	0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for
+} bind def
+/getCyanScreen {
+	FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse
+		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
+} bind def
+/getMagentaScreen {
+	FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse
+		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
+} bind def
+/getYellowScreen {
+	FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse
+		screenIndex dup 3 1 roll get 3 1 roll get { 3 div
+			{2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat
+			FMSpotFunction } } {/FMSpotFunction load } ifelse
+			0.0 exch
+} bind def
+/getBlackScreen  {
+	FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse
+		screenIndex get 45.0 /FMSpotFunction load 
+} bind def
+/getSpotScreen {
+	getBlackScreen
+} bind def
+/getCompositeScreen {
+	getBlackScreen
+} bind def
+/FMSetScreen 
+	fMLevel1 { /setscreen load 
+	}{ {
+		8 dict begin
+		/HalftoneType 1 def
+		/SpotFunction exch def
+		/Angle exch def
+		/Frequency exch def
+		/AccurateScreens FMUseAcccurateScreens def
+		currentdict end sethalftone
+	} bind } ifelse
+def
+/setDefaultScreen {
+	fMLevel1 {
+		FMPColor {
+			orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer
+		}
+		{
+			orgxfer cvx settransfer
+		} ifelse
+		orgfreq organgle orgproc cvx setscreen
+	} {
+		orghalftone sethalftone
+	}ifelse
+} bind def
+/setCurrentScreen {
+	FrameSepIs FMnone eq {
+		FMUseDefaultNoSeparationScreen {
+			setDefaultScreen
+		} {
+			getCompositeScreen FMSetScreen
+		} ifelse
+	} {
+		FrameSepIs FMcustom eq {
+			FMUseDefaultSpotSeparationScreen {
+				setDefaultScreen
+			} {
+				getSpotScreen FMSetScreen
+			} ifelse
+		} {
+			FMUseDefaultProcessSeparationScreen {
+				setDefaultScreen
+			} {
+				FrameSepIs FMcyan eq {
+					getCyanScreen FMSetScreen
+				} {
+					FrameSepIs FMmagenta eq {
+						getMagentaScreen FMSetScreen
+					} {
+						FrameSepIs FMyellow eq {
+							getYellowScreen FMSetScreen
+						} {
+							getBlackScreen FMSetScreen
+						} ifelse
+					} ifelse
+				} ifelse
+			} ifelse
+		} ifelse
+	} ifelse 
+} bind def
+end
+	
+/FMDOCUMENT { 
+	array /FMfonts exch def 
+	dup 1 gt {/#copies exch def} {pop} ifelse
+	FrameDict begin
+	0 ne /manualfeed exch def
+	/paperheight exch def
+	/paperwidth exch def
+	0 ne /fMNegative exch def 
+	0 ne /edown exch def 
+	/yscale exch def
+	/xscale exch def
+	fMLevel1 {
+		manualfeed {setmanualfeed} if
+		/FMdicttop countdictstack 1 add def 
+		/FMoptop count def 
+		setpapername 
+		manualfeed {true} {papersize} ifelse 
+		{manualpapersize} {false} ifelse 
+		{desperatepapersize} {false} ifelse 
+		{papersizefailure} if
+		count -1 FMoptop {pop pop} for
+		countdictstack -1 FMdicttop {pop end} for 
+		}
+		{2 dict
+		 dup /PageSize [paperwidth paperheight] put
+		 manualfeed {dup /ManualFeed manualfeed put} if
+		 {setpagedevice} stopped {papersizefailure} if
+		}
+	ifelse 
+	
+	fMLevel1 not {
+		/orghalftone currenthalftone def
+	}if 
+	
+	FMPColor {
+		currentcolorscreen
+			cvlit /orgproc exch def
+				  /organgle exch def 
+				  /orgfreq exch def
+			cvlit /orgbproc exch def
+				  /orgbangle exch def 
+				  /orgbfreq exch def
+			cvlit /orggproc exch def
+				  /orggangle exch def 
+				  /orggfreq exch def
+			cvlit /orgrproc exch def
+				  /orgrangle exch def 
+				  /orgrfreq exch def
+			currentcolortransfer 
+			fMNegative {
+				1 1 4 { 
+					pop { 1 exch sub } fmConcatProcs 4 1 roll
+				} for
+				4 copy
+				setcolortransfer
+			} if
+			cvlit /orgxfer exch def
+			cvlit /orgbxfer exch def
+			cvlit /orggxfer exch def
+			cvlit /orgrxfer exch def
+	} {
+		currentscreen 
+			cvlit /orgproc exch def
+				  /organgle exch def 
+				  /orgfreq exch def
+				  
+		currenttransfer 
+		fMNegative {
+			{ 1 exch sub } fmConcatProcs
+			dup settransfer
+		} if 
+		cvlit /orgxfer exch def
+	} ifelse
+	end 
+} def 
+/FMENDDOCUMENT {
+	FMDocSave restore	
+} def
+/FMBEGINPAGE { 
+	FrameDict begin 
+	/pagesave save def
+	3.86 setmiterlimit
+	0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 
+	0 paperheight lineto 0 0 lineto 1 setgray fill
+	/landscape exch 0 ne def
+	landscape { 
+		90 rotate 0 exch dup /pwid exch def neg translate pop 
+	}{
+		pop /pwid exch def
+	} ifelse
+	edown { [-1 0 0 1 pwid 0] concat } if
+	xscale yscale scale
+	/orgmatrix matrix def
+	gsave 
+} def 
+/FMENDPAGE {
+	grestore 
+	/FmPD4U FmPD4U
+	pagesave restore
+	def
+	end 
+	showpage
+	} def 
+/FMFONTDEFINE { 
+	FrameDict begin
+	findfont 
+	ReEncode 
+	1 index exch 
+	definefont 
+	FMfonts 3 1 roll 
+	put
+	end 
+	} def 
+/FMFILLS {
+	FrameDict begin dup
+	array /fillvals exch def
+	dict /patCache exch def
+	end 
+	} def 
+/FMFILL {
+	FrameDict begin
+	 fillvals 3 1 roll put
+	end 
+	} def 
+/FMNORMALIZEGRAPHICS { 
+	newpath
+	1 setlinewidth
+	0 setlinecap
+	0 0 0 sethsbcolor
+	0 setgray 
+	} bind def
+/FMBEGINEPSF { 
+	end 
+	/FMEPSF save def 
+	/showpage {} def 
+	FMNORMALIZEGRAPHICS 
+	[/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
+	fx fw 2 div add fy fh 2 div add  translate
+	rotate
+	fw 2 div neg fh 2 div neg translate
+	fw urx llx sub div fh ury lly sub div scale 
+	llx neg lly neg translate 
+	/FMdicttop countdictstack 1 add def 
+	/FMoptop count def 
+	} bind def
+/FMENDEPSF {
+	count -1 FMoptop {pop pop} for 
+	countdictstack -1 FMdicttop {pop end} for 
+	FMEPSF restore
+	FrameDict begin 
+	} bind def
+FrameDict begin 
+/setmanualfeed {
+%%BeginFeature: *ManualFeed True
+	 statusdict /manualfeed true put
+%%EndFeature
+	} bind def
+/max {2 copy lt {exch} if pop} bind def
+/min {2 copy gt {exch} if pop} bind def
+/inch {72 mul} def
+/pagedimen { 
+	paperheight sub abs 16 lt exch 
+	paperwidth sub abs 16 lt and
+	{/papername exch def} {pop} ifelse
+	} bind def
+/setpapername { 
+	/papersizedict 14 dict def 
+	papersizedict begin
+	/papername /unknown def 
+		/Letter 8.5 inch 11.0 inch pagedimen
+		/LetterSmall 7.68 inch 10.16 inch pagedimen
+		/Tabloid 11.0 inch 17.0 inch pagedimen
+		/Ledger 17.0 inch 11.0 inch pagedimen
+		/Legal 8.5 inch 14.0 inch pagedimen
+		/Statement 5.5 inch 8.5 inch pagedimen
+		/Executive 7.5 inch 10.0 inch pagedimen
+		/A3 11.69 inch 16.5 inch pagedimen
+		/A4 8.26 inch 11.69 inch pagedimen
+		/A4Small 7.47 inch 10.85 inch pagedimen
+		/B4 10.125 inch 14.33 inch pagedimen
+		/B5 7.16 inch 10.125 inch pagedimen
+	end
+	} bind def
+/papersize {
+	papersizedict begin
+		/Letter {lettertray letter} def
+		/LetterSmall {lettertray lettersmall} def
+		/Tabloid {11x17tray 11x17} def
+		/Ledger {ledgertray ledger} def
+		/Legal {legaltray legal} def
+		/Statement {statementtray statement} def
+		/Executive {executivetray executive} def
+		/A3 {a3tray a3} def
+		/A4 {a4tray a4} def
+		/A4Small {a4tray a4small} def
+		/B4 {b4tray b4} def
+		/B5 {b5tray b5} def
+		/unknown {unknown} def
+	papersizedict dup papername known {papername} {/unknown} ifelse get
+	end
+	statusdict begin stopped end 
+	} bind def
+/manualpapersize {
+	papersizedict begin
+		/Letter {letter} def
+		/LetterSmall {lettersmall} def
+		/Tabloid {11x17} def
+		/Ledger {ledger} def
+		/Legal {legal} def
+		/Statement {statement} def
+		/Executive {executive} def
+		/A3 {a3} def
+		/A4 {a4} def
+		/A4Small {a4small} def
+		/B4 {b4} def
+		/B5 {b5} def
+		/unknown {unknown} def
+	papersizedict dup papername known {papername} {/unknown} ifelse get
+	end
+	stopped 
+	} bind def
+/desperatepapersize {
+	
+	mark
+	statusdict begin 
+		/setpageparams where {
+			pop
+			paperwidth paperheight 0 1 
+			{setpageparams} stopped 
+		} { 
+			true 
+		} ifelse
+		
+		{
+			
+			/setpagedevice where {
+				pop 
+				1 dict dup begin
+					/PageSize [ paperwidth paperheight ] def
+				end 
+				{setpagedevice} stopped
+			} {
+				true	
+			} ifelse
+		} {
+			false		
+		} ifelse 
+	end
+	{cleartomark true}{cleartomark false}ifelse
+} bind def
+/papersizefailure {
+	FMAllowPaperSizeMismatch not
+		{
+(The requested paper size is not available in any currently-installed tray)
+(Edit the PS file to "FMAllowPaperSizeMismatch true" to use default tray)
+		 FMFAILURE } if
+	} def
+/DiacriticEncoding [
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
+/numbersign /dollar /percent /ampersand /quotesingle /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon
+/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
+/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
+/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
+/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
+/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
+/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
+/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
+/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
+/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
+/udieresis /dagger /.notdef /cent /sterling /section /bullet
+/paragraph /germandbls /registered /copyright /trademark /acute
+/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
+/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
+/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
+/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
+/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
+/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
+/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
+/periodcentered /quotesinglbase /quotedblbase /perthousand
+/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
+/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
+/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
+/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
+] def
+/ReEncode { 
+	dup 
+	length 
+	dict begin 
+	{
+	1 index /FID ne 
+		{def} 
+		{pop pop} ifelse 
+	} forall 
+	0 eq {/Encoding DiacriticEncoding def} if 
+	currentdict 
+	end 
+	} bind def
+FMPColor 
+	
+	{
+	/BEGINBITMAPCOLOR { 
+		BITMAPCOLOR} def
+	/BEGINBITMAPCOLORc { 
+		BITMAPCOLORc} def
+	/BEGINBITMAPTRUECOLOR { 
+		BITMAPTRUECOLOR } def
+	/BEGINBITMAPTRUECOLORc { 
+		BITMAPTRUECOLORc } def
+	/BEGINBITMAPCMYK { 
+		BITMAPCMYK } def
+	/BEGINBITMAPCMYKc { 
+		BITMAPCMYKc } def
+	}
+	
+	{
+	/BEGINBITMAPCOLOR { 
+		BITMAPGRAY} def
+	/BEGINBITMAPCOLORc { 
+		BITMAPGRAYc} def
+	/BEGINBITMAPTRUECOLOR { 
+		BITMAPTRUEGRAY } def
+	/BEGINBITMAPTRUECOLORc { 
+		BITMAPTRUEGRAYc } def
+	/BEGINBITMAPCMYK { 
+		BITMAPCMYKGRAY } def
+	/BEGINBITMAPCMYKc { 
+		BITMAPCMYKGRAYc } def
+	}
+ifelse
+/K { 
+	FMPrintAllColorsAsBlack {
+		8 1 roll
+		dup 1 eq 2 index 1 eq and 3 index 1 eq and not
+			{7 {pop} repeat 0 0 0 1 0 0 0} if
+		8 -1 roll
+	} if 
+	FrameCurColors astore 
+	pop combineColor
+} bind def
+/graymode true def
+fMLevel1 {
+	/fmGetFlip {
+		fMatrix2 exch get mul 0 lt { -1 } { 1 } ifelse
+	} FmBD
+} if
+/setPatternMode {
+	fMLevel1 {
+		2 index patScreenDict exch known {
+			pop pop
+			patScreenDict exch get aload pop 
+			freq 								
+			mul									
+			5 2 roll							
+			fMatrix2 currentmatrix 1 get 0 ne {
+				3 -1 roll 90 add 3 1 roll 		
+				sflipx 1 fmGetFlip sflipy 2 fmGetFlip neg mul
+			} {  								
+				sflipx 0 fmGetFlip sflipy 3 fmGetFlip mul 
+			} ifelse
+			0 lt {exch pop} {pop} ifelse 		
+			fMNegative { 
+				{neg} fmConcatProcs 			
+			} if
+			bind
+			
+			
+			
+			systemdict /setscreen get exec		
+			/FrameCurGray exch def
+		} {
+			/bwidth  exch def
+			/bpside  exch def
+			/bstring exch def
+			/onbits 0 def  /offbits 0 def
+			freq sangle landscape {90 add} if 
+				{/ypoint exch def
+				 /xpoint exch def
+				 /xindex xpoint 1 add 2 div bpside mul cvi def
+				 /yindex ypoint 1 add 2 div bpside mul cvi def
+				 bstring yindex bwidth mul xindex 8 idiv add get
+				 1 7 xindex 8 mod sub bitshift and 0 ne fMNegative {not} if
+				 {/onbits  onbits  1 add def 1}
+				 {/offbits offbits 1 add def 0}
+				 ifelse
+				}
+				setscreen
+			offbits offbits onbits add dup 0 ne {div} {pop pop .5} ifelse fMNegative {1.0 exch sub} if
+			/FrameCurGray exch def
+		} ifelse
+	} { 
+		pop pop
+		dup patCache exch known {
+			patCache exch get
+		} { 
+			dup
+			patDict /bstring 3 -1 roll put
+			patDict 
+			9 PatFreq screenIndex get div dup matrix scale
+			makepattern
+			dup 
+			patCache 4 -1 roll 3 -1 roll put
+		} ifelse
+		/FrameCurGray 0 def
+		/FrameCurPat exch def
+	} ifelse
+	/graymode false def
+	combineColor
+} bind def
+/setGrayScaleMode {
+	graymode not {
+		/graymode true def
+		fMLevel1 {
+			setCurrentScreen
+		} if
+	} if
+	/FrameCurGray exch def
+	combineColor
+} bind def
+/normalize {
+	transform round exch round exch itransform
+	} bind def
+/dnormalize {
+	dtransform round exch round exch idtransform
+	} bind def
+/lnormalize { 
+	0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
+	} bind def
+/H { 
+	lnormalize setlinewidth
+	} bind def
+/Z {
+	setlinecap
+	} bind def
+	
+/PFill {
+	graymode fMLevel1 or not {
+		gsave 1 setgray eofill grestore
+	} if
+} bind def
+/PStroke {
+	graymode fMLevel1 or not {
+		gsave 1 setgray stroke grestore
+	} if
+	stroke
+} bind def
+/X { 
+	fillvals exch get
+	dup type /stringtype eq
+	{8 1 setPatternMode} 
+	{setGrayScaleMode}
+	ifelse
+	} bind def
+/V { 
+	PFill gsave eofill grestore
+	} bind def
+/Vclip {
+	clip
+	} bind def
+/Vstrk {
+	currentlinewidth exch setlinewidth PStroke setlinewidth
+	} bind def
+/N { 
+	PStroke
+	} bind def
+/Nclip {
+	strokepath clip newpath
+	} bind def
+/Nstrk {
+	currentlinewidth exch setlinewidth PStroke setlinewidth
+	} bind def
+/M {newpath moveto} bind def
+/E {lineto} bind def
+/D {curveto} bind def
+/O {closepath} bind def
+/L { 
+ 	/n exch def
+	newpath
+	normalize
+	moveto 
+	2 1 n {pop normalize lineto} for
+	} bind def
+/Y { 
+	L 
+	closepath
+	} bind def
+/R { 
+	/y2 exch def
+	/x2 exch def
+	/y1 exch def
+	/x1 exch def
+	x1 y1
+	x2 y1
+	x2 y2
+	x1 y2
+	4 Y 
+	} bind def
+/rarc 
+	{rad 
+	 arcto
+	} bind def
+/RR { 
+	/rad exch def
+	normalize
+	/y2 exch def
+	/x2 exch def
+	normalize
+	/y1 exch def
+	/x1 exch def
+	mark
+	newpath
+	{
+	x1 y1 rad add moveto
+	x1 y2 x2 y2 rarc
+	x2 y2 x2 y1 rarc
+	x2 y1 x1 y1 rarc
+	x1 y1 x1 y2 rarc
+	closepath
+	} stopped {x1 y1 x2 y2 R} if 
+	cleartomark
+	} bind def
+/RRR { 
+	/rad exch def
+	normalize /y4 exch def /x4 exch def
+	normalize /y3 exch def /x3 exch def
+	normalize /y2 exch def /x2 exch def
+	normalize /y1 exch def /x1 exch def
+	newpath
+	normalize moveto 
+	mark
+	{
+	x2 y2 x3 y3 rarc
+	x3 y3 x4 y4 rarc
+	x4 y4 x1 y1 rarc
+	x1 y1 x2 y2 rarc
+	closepath
+	} stopped
+	 {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if
+	cleartomark
+	} bind def
+/C { 
+	grestore
+	gsave
+	R 
+	clip
+	setCurrentScreen
+} bind def
+/CP { 
+	grestore
+	gsave
+	Y 
+	clip
+	setCurrentScreen
+} bind def
+/F { 
+	FMfonts exch get
+	[FMsetsize 0 0 FMpointsize 0 0] makefont
+	setfont
+	} bind def
+/Q { 
+	/FMpointsize exch def
+	/FMsetsize FMpointsize def
+	F 
+	} bind def
+/QQ { 
+	/FMsetsize exch def
+	/FMpointsize exch def
+	F 
+	} bind def
+/T { 
+	moveto show
+	} bind def
+/RF { 
+	rotate
+	0 ne {-1 1 scale} if
+	} bind def
+/TF { 
+	gsave
+	moveto 
+	RF
+	show
+	grestore
+	} bind def
+/P { 
+	moveto
+	0 32 3 2 roll widthshow
+	} bind def
+/PF { 
+	gsave
+	moveto 
+	RF
+	0 32 3 2 roll widthshow
+	grestore
+	} bind def
+/S { 
+	moveto
+	0 exch ashow
+	} bind def
+/SF { 
+	gsave
+	moveto
+	RF
+	0 exch ashow
+	grestore
+	} bind def
+/B { 
+	moveto
+	0 32 4 2 roll 0 exch awidthshow
+	} bind def
+/BF { 
+	gsave
+	moveto
+	RF
+	0 32 4 2 roll 0 exch awidthshow
+	grestore
+	} bind def
+/G { 
+	gsave
+	newpath
+	normalize translate 0.0 0.0 moveto 
+	dnormalize scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	closepath 
+	PFill fill
+	grestore
+	} bind def
+/Gstrk {
+	savematrix
+    newpath
+    2 index 2 div add exch 3 index 2 div sub exch 
+    normalize 2 index 2 div sub exch 3 index 2 div add exch 
+    translate
+    scale 
+    0.0 0.0 1.0 5 3 roll arc 
+    restorematrix
+    currentlinewidth exch setlinewidth PStroke setlinewidth
+    } bind def
+/Gclip { 
+	newpath
+	savematrix
+	normalize translate 0.0 0.0 moveto 
+	dnormalize scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	closepath 
+	clip newpath
+	restorematrix
+	} bind def
+/GG { 
+	gsave
+	newpath
+	normalize translate 0.0 0.0 moveto 
+	rotate 
+	dnormalize scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	closepath
+	PFill
+	fill
+	grestore
+	} bind def
+/GGclip { 
+	savematrix
+	newpath
+    normalize translate 0.0 0.0 moveto 
+    rotate 
+    dnormalize scale 
+    0.0 0.0 1.0 5 3 roll arc 
+    closepath
+	clip newpath
+	restorematrix
+	} bind def
+/GGstrk { 
+	savematrix
+    newpath
+    normalize translate 0.0 0.0 moveto 
+    rotate 
+    dnormalize scale 
+    0.0 0.0 1.0 5 3 roll arc 
+    closepath 
+	restorematrix
+    currentlinewidth exch setlinewidth PStroke setlinewidth
+	} bind def
+/A { 
+	gsave
+	savematrix
+	newpath
+	2 index 2 div add exch 3 index 2 div sub exch 
+	normalize 2 index 2 div sub exch 3 index 2 div add exch 
+	translate 
+	scale 
+	2 copy 0.0 0.0 1.0 5 3 roll arc 
+	round cvi 360 mod exch round cvi 360 mod eq {closepath} if 
+	restorematrix
+	PStroke
+	grestore
+	} bind def
+/Aclip {
+	newpath
+	savematrix
+	normalize translate 0.0 0.0 moveto 
+	dnormalize scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	closepath 
+	strokepath clip newpath
+	restorematrix
+} bind def
+/Astrk {
+	Gstrk
+} bind def
+/AA { 
+	gsave
+	savematrix
+	newpath
+	
+	3 index 2 div add exch 4 index 2 div sub exch 
+	
+	normalize 3 index 2 div sub exch 4 index 2 div add exch
+	translate 
+	rotate 
+	scale 
+	0.0 0.0 1.0 5 3 roll arc 
+	restorematrix
+	PStroke
+	grestore
+	} bind def
+/AAclip {
+	savematrix
+	newpath
+    normalize translate 0.0 0.0 moveto 
+    rotate 
+    dnormalize scale 
+    0.0 0.0 1.0 5 3 roll arc 
+    closepath
+	strokepath clip newpath
+	restorematrix
+} bind def
+/AAstrk {
+	GGstrk
+} bind def
+/BEGINPRINTCODE { 
+	/FMdicttop countdictstack 1 add def 
+	/FMoptop count 7 sub def 
+	/FMsaveobject save def
+	userdict begin 
+	/showpage {} def 
+	FMNORMALIZEGRAPHICS 
+	3 index neg 3 index neg translate
+	} bind def
+/ENDPRINTCODE {
+	count -1 FMoptop {pop pop} for 
+	countdictstack -1 FMdicttop {pop end} for 
+	FMsaveobject restore 
+	} bind def
+/gn { 
+	0 
+	{	46 mul 
+		cf read pop 
+		32 sub 
+		dup 46 lt {exit} if 
+		46 sub add 
+		} loop
+	add 
+	} bind def
+/cfs { 
+	/str sl string def 
+	0 1 sl 1 sub {str exch val put} for 
+	str def 
+	} bind def
+/ic [ 
+	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
+	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
+	0
+	{0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
+	{10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
+	{19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
+	{13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
+	{4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
+	{13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
+	{7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
+	{0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
+	{10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
+	] def
+/ms { 
+	/sl exch def 
+	/val 255 def 
+	/ws cfs 
+	/im cfs 
+	/val 0 def 
+	/bs cfs 
+	/cs cfs 
+	} bind def
+400 ms 
+/ip { 
+	is 
+	0 
+	cf cs readline pop 
+	{	ic exch get exec 
+		add 
+		} forall 
+	pop 
+	
+	} bind def
+/rip { 
+	   
+	  
+	  bis ris copy pop 
+      is
+      0
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop 
+	  ris gis copy pop 
+	  dup is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop
+	  gis bis copy pop 
+	  dup add is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+      pop 
+      
+      } bind def
+/rip4 { 
+	   
+	  
+	  kis cis copy pop 
+      is
+      0
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop 
+	  cis mis copy pop 
+	  dup is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop
+	  mis yis copy pop 
+	  dup dup add is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+	  pop pop
+	  yis kis copy pop 
+	  3 mul is exch 
+	  
+      cf cs readline pop 
+      {       ic exch get exec 
+              add 
+              } forall 
+      pop 
+      
+      } bind def
+/wh { 
+	/len exch def 
+	/pos exch def 
+	ws 0 len getinterval im pos len getinterval copy pop
+	pos len 
+	} bind def
+/bl { 
+	/len exch def 
+	/pos exch def 
+	bs 0 len getinterval im pos len getinterval copy pop
+	pos len 
+	} bind def
+/s1 1 string def
+/fl { 
+	/len exch def 
+	/pos exch def 
+	/val cf s1 readhexstring pop 0 get def
+	pos 1 pos len add 1 sub {im exch val put} for
+	pos len 
+	} bind def
+/hx { 
+	3 copy getinterval 
+	cf exch readhexstring pop pop 
+	} bind def
+/wbytes { 
+      dup dup
+      8 gt { pop 8 idiv mul }
+      { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse
+	} bind def
+/BEGINBITMAPBWc { 
+	1 {} COMMONBITMAPc
+	} bind def
+/BEGINBITMAPGRAYc { 
+	8 {} COMMONBITMAPc
+	} bind def
+/BEGINBITMAP2BITc { 
+	2 {} COMMONBITMAPc
+	} bind def
+/COMMONBITMAPc { 
+		 
+	/cvtProc exch def
+	/depth exch def
+	gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+	/bitmapsave save def 
+	cvtProc                
+	/is im 0 lb getinterval def 
+	ws 0 lb getinterval is copy pop 
+	/cf currentfile def 
+	width height depth [width 0 0 height neg 0 height] 
+	{ip} image 
+	bitmapsave restore 
+	grestore
+	} bind def
+/BEGINBITMAPBW { 
+	1 {} COMMONBITMAP
+	} bind def
+/BEGINBITMAPGRAY { 
+	8 {} COMMONBITMAP
+	} bind def
+/BEGINBITMAP2BIT { 
+	2 {} COMMONBITMAP
+	} bind def
+/COMMONBITMAP { 
+	/cvtProc exch def
+	/depth exch def
+	gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/bitmapsave save def 
+	cvtProc              
+	/is width depth wbytes string def
+	/cf currentfile def 
+	width height depth [width 0 0 height neg 0 height] 
+	{cf is readhexstring pop} image
+	bitmapsave restore 
+	grestore
+	} bind def
+/ngrayt 256 array def
+/nredt 256 array def
+/nbluet 256 array def
+/ngreent 256 array def
+fMLevel1 {
+/colorsetup {
+	currentcolortransfer
+	/gryt exch def
+	/blut exch def
+	/grnt exch def
+	/redt exch def
+	0 1 255 {
+		/indx exch def
+		/cynu 1 red indx get 255 div sub def
+		/magu 1 green indx get 255 div sub def
+		/yelu 1 blue indx get 255 div sub def
+		/kk cynu magu min yelu min def
+		/u kk currentundercolorremoval exec def
+%		/u 0 def
+		nredt indx 1 0 cynu u sub max sub redt exec put
+		ngreent indx 1 0 magu u sub max sub grnt exec put
+		nbluet indx 1 0 yelu u sub max sub blut exec put
+		ngrayt indx 1 kk currentblackgeneration exec sub gryt exec put
+	} for
+	{255 mul cvi nredt exch get}
+	{255 mul cvi ngreent exch get}
+	{255 mul cvi nbluet exch get}
+	{255 mul cvi ngrayt exch get}
+	setcolortransfer
+	{pop 0} setundercolorremoval
+	{} setblackgeneration
+	} bind def
+}
+{
+/colorSetup2 {
+	[ /Indexed /DeviceRGB 255 
+		{dup red exch get 255 div 
+		 exch dup green exch get 255 div 
+		 exch blue exch get 255 div}
+	] setcolorspace
+} bind def
+} ifelse
+/fakecolorsetup {
+	/tran 256 string def
+	0 1 255 {/indx exch def 
+		tran indx
+		red indx get 77 mul
+		green indx get 151 mul
+		blue indx get 28 mul
+		add add 256 idiv put} for
+	currenttransfer
+	{255 mul cvi tran exch get 255.0 div}
+	exch fmConcatProcs settransfer
+} bind def
+/BITMAPCOLOR { 
+	/depth 8 def
+	gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/bitmapsave save def
+	fMLevel1 {	
+		colorsetup
+		/is width depth wbytes string def
+		/cf currentfile def 
+		width height depth [width 0 0 height neg 0 height] 
+		{cf is readhexstring pop} {is} {is} true 3 colorimage 
+	} {
+		colorSetup2
+		/is width depth wbytes string def
+		/cf currentfile def 
+		7 dict dup begin
+			/ImageType 1 def
+			/Width width def
+			/Height height def
+			/ImageMatrix [width 0 0 height neg 0 height] def
+			/DataSource {cf is readhexstring pop} bind def
+			/BitsPerComponent depth def
+			/Decode [0 255] def
+		end image	
+	} ifelse
+	bitmapsave restore 
+	grestore
+	} bind def
+/BITMAPCOLORc { 
+	/depth 8 def
+	gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+	/bitmapsave save def 
+	fMLevel1 {	
+		colorsetup
+		/is im 0 lb getinterval def 
+		ws 0 lb getinterval is copy pop 
+		/cf currentfile def 
+		width height depth [width 0 0 height neg 0 height] 
+		{ip} {is} {is} true 3 colorimage
+	} {
+		colorSetup2
+		/is im 0 lb getinterval def 
+		ws 0 lb getinterval is copy pop 
+		/cf currentfile def 
+		7 dict dup begin
+			/ImageType 1 def
+			/Width width def
+			/Height height def
+			/ImageMatrix [width 0 0 height neg 0 height] def
+			/DataSource {ip} bind def
+			/BitsPerComponent depth def
+			/Decode [0 255] def
+		end image	
+	} ifelse
+	bitmapsave restore 
+	grestore
+	} bind def
+/BITMAPTRUECOLORc { 
+	/depth 24 def
+        gsave
+ 	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+	/bitmapsave save def 
+        
+	/is im 0 lb getinterval def	
+	/ris im 0 width getinterval def	
+	/gis im width width getinterval def	
+	/bis im width 2 mul width getinterval def 
+        
+	ws 0 lb getinterval is copy pop 
+	/cf currentfile def 
+	width height 8 [width 0 0 height neg 0 height] 
+	{width rip pop ris} {gis} {bis} true 3 colorimage
+	bitmapsave restore 
+	grestore
+	} bind def
+/BITMAPCMYKc { 
+	/depth 32 def
+        gsave
+ 	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+	/bitmapsave save def 
+        
+	/is im 0 lb getinterval def	
+	/cis im 0 width getinterval def	
+	/mis im width width getinterval def	
+	/yis im width 2 mul width getinterval def 
+	/kis im width 3 mul width getinterval def 
+        
+	ws 0 lb getinterval is copy pop 
+	/cf currentfile def 
+	width height 8 [width 0 0 height neg 0 height] 
+	{width rip4 pop cis} {mis} {yis} {kis} true 4 colorimage
+	bitmapsave restore 
+	grestore
+	} bind def
+/BITMAPTRUECOLOR { 
+        gsave
+		
+		3 index 2 div add exch	
+		4 index 2 div add exch	
+		translate		
+		rotate			
+		1 index 2 div neg	
+		1 index 2 div neg	
+		translate		
+		scale			
+		/height exch def /width exch def
+        /bitmapsave save def 
+        /is width string def
+        /gis width string def
+        /bis width string def
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        { cf is readhexstring pop } 
+        { cf gis readhexstring pop } 
+        { cf bis readhexstring pop } 
+        true 3 colorimage 
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPCMYK { 
+        gsave
+		
+		3 index 2 div add exch	
+		4 index 2 div add exch	
+		translate		
+		rotate			
+		1 index 2 div neg	
+		1 index 2 div neg	
+		translate		
+		scale			
+		/height exch def /width exch def
+        /bitmapsave save def 
+        /is width string def
+        /mis width string def
+        /yis width string def
+        /kis width string def
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        { cf is readhexstring pop } 
+        { cf mis readhexstring pop } 
+        { cf yis readhexstring pop } 
+        { cf kis readhexstring pop } 
+        true 4 colorimage 
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPTRUEGRAYc { 
+	/depth 24 def
+        gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+        /bitmapsave save def 
+        
+	/is im 0 lb getinterval def	
+	/ris im 0 width getinterval def	
+	/gis im width width getinterval def	
+	/bis im width 2 mul width getinterval def 
+        ws 0 lb getinterval is copy pop 
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        {width rip pop ris gis bis width gray} image
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPCMYKGRAYc { 
+	/depth 32 def
+        gsave
+	
+	3 index 2 div add exch	
+	4 index 2 div add exch	
+	translate		
+	rotate			
+	1 index 2 div neg	
+	1 index 2 div neg	
+	translate		
+	scale			
+	/height exch def /width exch def
+	/lb width depth wbytes def 
+	sl lb lt {lb ms} if 
+        /bitmapsave save def 
+        
+	/is im 0 lb getinterval def	
+	/cis im 0 width getinterval def	
+	/mis im width width getinterval def	
+	/yis im width 2 mul width getinterval def 
+	/kis im width 3 mul width getinterval def 
+        ws 0 lb getinterval is copy pop 
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        {width rip pop cis mis yis kis width cgray} image
+        bitmapsave restore 
+        grestore
+        } bind def
+/cgray { 
+        /ww exch def
+        /k exch def
+        /y exch def
+        /m exch def
+        /c exch def
+        0 1 ww 1 sub { /i exch def c i get m i get y i get k i get CMYKtoRGB
+				.144 mul 3 1 roll .587 mul 3 1 roll .299 mul add add
+				c i 3 -1 roll floor cvi put } for
+        c
+ 		} bind def
+/gray { 
+        /ww exch def
+        /b exch def
+        /g exch def
+        /r exch def
+        0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
+			b i get .114 mul add add r i 3 -1 roll floor cvi put } for
+        r
+        } bind def
+/BITMAPTRUEGRAY { 
+        gsave
+		
+		3 index 2 div add exch	
+		4 index 2 div add exch	
+		translate		
+		rotate			
+		1 index 2 div neg	
+		1 index 2 div neg	
+		translate		
+		scale			
+		/height exch def /width exch def
+        /bitmapsave save def 
+        /is width string def
+        /gis width string def
+        /bis width string def
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        { cf is readhexstring pop 
+          cf gis readhexstring pop 
+          cf bis readhexstring pop width gray}  image
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPCMYKGRAY { 
+        gsave
+		
+		3 index 2 div add exch	
+		4 index 2 div add exch	
+		translate		
+		rotate			
+		1 index 2 div neg	
+		1 index 2 div neg	
+		translate		
+		scale			
+		/height exch def /width exch def
+        /bitmapsave save def 
+        /is width string def
+        /yis width string def
+        /mis width string def
+        /kis width string def
+        /cf currentfile def 
+        width height 8 [width 0 0 height neg 0 height] 
+        { cf is readhexstring pop 
+          cf mis readhexstring pop 
+          cf yis readhexstring pop 
+          cf kis readhexstring pop width cgray}  image
+        bitmapsave restore 
+        grestore
+        } bind def
+/BITMAPGRAY { 
+	8 {fakecolorsetup} COMMONBITMAP
+	} bind def
+/BITMAPGRAYc { 
+	8 {fakecolorsetup} COMMONBITMAPc
+	} bind def
+/ENDBITMAP {
+	} bind def
+end 
+	/ALDmatrix matrix def ALDmatrix currentmatrix pop
+/StartALD {
+	/ALDsave save def
+	 savematrix
+	 ALDmatrix setmatrix
+	} bind def
+/InALD {
+	 restorematrix
+	} bind def
+/DoneALD {
+	 ALDsave restore
+	} bind def
+/I { setdash } bind def
+/J { [] 0 setdash } bind def
+%%EndProlog
+%%BeginSetup
+(7.0) FMVERSION
+1 1 0 0 612 792 0 1 19 FMDOCUMENT
+%%IncludeFont: Helvetica-Bold
+0 0 /Helvetica-Bold FMFONTDEFINE
+%%IncludeFont: Times-Roman
+1 0 /Times-Roman FMFONTDEFINE
+%%IncludeFont: Times-Italic
+2 0 /Times-Italic FMFONTDEFINE
+%%IncludeFont: Times-Bold
+3 0 /Times-Bold FMFONTDEFINE
+%%IncludeFont: Palatino-Roman
+4 0 /Palatino-Roman FMFONTDEFINE
+%%IncludeFont: Courier-Bold
+5 0 /Courier-Bold FMFONTDEFINE
+%%IncludeFont: Helvetica
+6 0 /Helvetica FMFONTDEFINE
+%%IncludeFont: Courier
+7 0 /Courier FMFONTDEFINE
+32 FMFILLS
+0 0 FMFILL
+1 0.1 FMFILL
+2 0.3 FMFILL
+3 0.5 FMFILL
+4 0.7 FMFILL
+5 0.9 FMFILL
+6 0.97 FMFILL
+7 1 FMFILL
+8 <0f1e3c78f0e1c387> FMFILL
+9 <0f87c3e1f0783c1e> FMFILL
+10 <cccccccccccccccc> FMFILL
+11 <ffff0000ffff0000> FMFILL
+12 <8142241818244281> FMFILL
+13 <03060c183060c081> FMFILL
+14 <8040201008040201> FMFILL
+16 1 FMFILL
+17 0.9 FMFILL
+18 0.7 FMFILL
+19 0.5 FMFILL
+20 0.3 FMFILL
+21 0.1 FMFILL
+22 0.03 FMFILL
+23 0 FMFILL
+24 <f0e1c3870f1e3c78> FMFILL
+25 <f0783c1e0f87c3e1> FMFILL
+26 <3333333333333333> FMFILL
+27 <0000ffff0000ffff> FMFILL
+28 <7ebddbe7e7dbbd7e> FMFILL
+29 <fcf9f3e7cf9f3f7e> FMFILL
+30 <7fbfdfeff7fbfdfe> FMFILL
+%%EndSetup
+%%Page: "1" 1
+%%BeginPaperSize: Letter
+%%EndPaperSize
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+0 0 0 1 0 0 0 1 K
+J
+-45 -45 657 837 C
+[{Catalog} <</MarkInfo <</Marked true>>>> /PUT FmPD4
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.1/DEST FmPD2
+[/Dest/F/DEST FmPD2
+[/Subtype /Document /Lang (en-US) /StPNE FmPD4
+[/Dest/G268103/Title(ReportTitle - JavaBeans\222 Activation Framework Specification Version 1.1)/OUT FmPD2
+[/Dest/G273590/Title(ReportTitle - )/OUT FmPD2
+[/Dest/G273802/Title(Heading1 - 1.0 Overview)/OUT FmPD2
+[/Dest/G273414/Title(Heading1 - 2.0 Goals)/OUT FmPD2
+[/Dest/G264813/Title(Heading1 - 3.0 Architectural Overview)/Count -4/OUT FmPD2
+[/Dest/G264816/Title(Heading2 - 3.1 The DataHandler Class)/OUT FmPD2
+[/Dest/G265036/Title(Heading2 - 3.2 The DataSource Interface)/OUT FmPD2
+[/Dest/G264820/Title(Heading2 - 3.3 The CommandMap Interface)/OUT FmPD2
+[/Dest/G264823/Title(Heading2 - 3.4 The Command Object Interface)/OUT FmPD2
+[/Dest/G264825/Title(Heading1 - 4.0 Using The Framework)/OUT FmPD2
+[/Dest/G265043/Title(Heading1 - 5.0 Usage Scenarios)/Count -5/OUT FmPD2
+[/Dest/G264830/Title(Heading2 - 5.1 Scenario Architecture)/OUT FmPD2
+[/Dest/G264833/Title(Heading2 - 5.2 Initialization)/OUT FmPD2
+[/Dest/G266554/Title(Heading2 - 5.3 Getting the Command List)/OUT FmPD2
+[/Dest/G264839/Title(Heading2 - 5.4 Performing a Command)/OUT FmPD2
+[/Dest/G264844/Title(Heading2 - 5.5 An Alternative Scenario)/OUT FmPD2
+[/Dest/G264848/Title(Heading1 - 6.0 Primary Framework Interfaces)/Count -7/OUT FmPD2
+[/Dest/G264850/Title(Heading2 - 6.1 The DataSource Interface)/OUT FmPD2
+[/Dest/G264860/Title(Heading2 - 6.2 The DataHandler Class)/Count -2/OUT FmPD2
+[/Dest/G267592/Title(Heading3 - 6.2.1 Data Encapsulation)/OUT FmPD2
+[/Dest/G267594/Title(Heading3 - 6.2.2 Command Binding)/OUT FmPD2
+[/Dest/G264876/Title(Heading2 - 6.3 The DataContentHandler Interface)/OUT FmPD2
+[/Dest/G264881/Title(Heading2 - 6.4 The CommandMap Interface)/OUT FmPD2
+[/Dest/G264889/Title(Heading2 - 6.5 The CommandInfo Class)/OUT FmPD2
+[/Dest/G267858/Title(Heading2 - 6.6 The CommandObject Interface)/OUT FmPD2
+[/Dest/G267005/Title(Heading2 - 6.7 The DataContentHandlerFactory)/OUT FmPD2
+[/Dest/G264898/Title(Heading1 - 7.0 Writing Beans for the Framework)/Count -9/OUT FmPD2
+[/Dest/G265063/Title(Heading2 - 7.1 Overview)/OUT FmPD2
+[/Dest/G264901/Title(Heading2 - 7.2 Viewer Goals)/Count -2/OUT FmPD2
+[/Dest/G264902/Title(Numbered1 - 1. Make the implementation of viewers and editors as simple as implementing Beans. That is, require low cost of entry to be a good citizen.)/OUT FmPD2
+[/Dest/G264903/Title(Numbered - 2. Allow developers to have a certain amount of flexibility in their implementations.)/OUT FmPD2
+[/Dest/G264904/Title(Heading2 - 7.3 General)/OUT FmPD2
+[/Dest/G264907/Title(Heading2 - 7.4 Interfaces)/OUT FmPD2
+[/Dest/G264909/Title(Heading2 - 7.5 Storage)/OUT FmPD2
+[/Dest/G264913/Title(Heading2 - 7.6 Packaging)/OUT FmPD2
+[/Dest/G264915/Title(Heading2 - 7.7 Container Support)/OUT FmPD2
+[/Dest/G264917/Title(Heading2 - 7.8 Lifecycle)/OUT FmPD2
+[/Dest/G264920/Title(Heading2 - 7.9 Command Verbs)/OUT FmPD2
+[/Dest/G265985/Title(Heading1 - 8.0 Framework Integration Points)/Count -4/OUT FmPD2
+[/Dest/G266282/Title(Heading2 - 8.1 Bean)/OUT FmPD2
+[/Dest/G266294/Title(Heading2 - 8.2 Beans)/OUT FmPD2
+[/Dest/G266304/Title(Heading2 - 8.3 Viewer Only)/OUT FmPD2
+[/Dest/G266312/Title(Heading2 - 8.4 ContentHandler Bean Only)/OUT FmPD2
+[/Dest/G264922/Title(Heading1 - 9.0 Framework Deliverables)/Count -3/OUT FmPD2
+[/Dest/G266515/Title(Heading2 - 9.1 Packaging Details)/OUT FmPD2
+[/Dest/G271189/Title(Heading2 - 9.2 Framework Core Classes)/OUT FmPD2
+[/Dest/G264929/Title(Heading2 - 9.3 Framework Auxiliary Classes)/OUT FmPD2
+[/Dest/G266916/Title(Heading1 - 10.0 Document Change History)/OUT FmPD2
+[/Dest/G269824/Title(Heading1 - 11.0 Contacting Us)/OUT FmPD2
+[
+/Creator (FrameMaker 7.0)
+/CreationDate (D:19970509091352)
+/ModDate (D:20060414125401)
+/DOCINFO FmPD2
+[/Title(A)/Rect[198 459 567 702]/ARTICLE FmPD2
+[/Title(A)/Rect[63 79 567 441]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(April 14, 2006) 72 737.98 T
+66 747/G30237 FmND
+72 444.68 558 444.68 2 L
+2 Z
+N
+72 75.33 558 75.33 2 L
+0.25 H
+N
+0 10 Q
+(1) 527.82 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+66 70/G30239 FmND
+0 102 708 194 748 102.77 44.68 72.71 659.17 FMBEGINEPSF
+%%BeginDocument: <inline>
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: /home/ichiban/jwasan/sun_black.epsi
+%%Creator: IslandDraw for jwasan
+%%CreationDate: Thu Sep 19 15:11:28 1996
+%%Pages: 1
+%%BoundingBox: 102 708 194 748
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%EndComments
+save /d_sv_obj exch def
+
+userdict /IslandDrawDict 300 dict dup begin put
+
+/bdef	{bind def} bind def
+/E	{exch} bdef
+/FF	{findfont} bdef
+/MF	{makefont} bdef
+/RO	{rotate} bdef
+/SC	{scale} bdef
+/SF	{setfont} bdef
+/SG	{setgray} bdef
+/TR	{translate} bdef
+/bp	{lj lw rgb} bdef
+/bpbw	{lj lw setgray} bdef
+/c	{curveto} bdef
+/cl	{closepath} bdef
+/fi	{eofill} bdef
+/g	{setgray} bdef
+/gr	{grestore} bdef
+/gs	{gsave} bdef
+/l	{lineto} bdef
+/lj	{setlinejoin} bdef
+/lw	{setlinewidth} bdef
+/m	{moveto} bdef
+/n	{newpath} bdef
+/nx	{/x E def} bdef
+/r	{rmoveto} bdef
+/rl	{rlineto} bdef
+/rgb	{setrgbcolor} bdef
+/s	{show} bdef
+/sd	{setdash} bdef
+/sp	{x 0 rmoveto} bdef
+/ss	{currentpoint pop E m} bdef
+/st	{stroke} bdef
+%% pattern stuff
+/BPSIDE	32 def	%% pixels per pattern side
+/PATFREQ 3.0 def	%% pattern pixels per mm
+/dp_mat [PATFREQ 0 0 PATFREQ 0 0] def
+/dp_pw	BPSIDE def	%% pattern pixel width
+/dp_ph	BPSIDE def	%% pattern pixel height
+/dp_w	dp_pw PATFREQ div def	%% pattern mm width
+/dp_h	dp_ph PATFREQ div def	%% pattern mm height
+/savemat matrix def
+/topmat matrix def
+/patmat matrix def
+
+%%	catch nocurrentpoint error for:		pathbbox
+/ncpoint errordict /nocurrentpoint get def
+errordict begin
+/nocurrentpoint	{
+	dup /pathbbox load eq
+	{pop 0 0 1 1}
+	{ncpoint}
+	ifelse
+} bdef
+end
+/ar	{ %% sa ea sx sy rot tx ty
+	matrix currentmatrix 8 1 roll TR RO SC
+	n 0 0 1 5 3 roll arc setmatrix
+} bdef
+/arn	{ %% sa ea sx sy rot tx ty
+ TR RO SC
+	matrix currentmatrix 8 1 roll
+	n 0 0 1 5 3 roll arcn setmatrix
+} bdef
+/el	{ %% sx sy rot tx ty
+	matrix currentmatrix 6 1 roll TR RO SC
+	n 0 0 1 0 360 arc setmatrix cl
+} bdef
+/image_raster	{ %% sw sh sd dw dh xs ys
+	TR SC /sd E def /sh E def /sw E def
+	/imagebuf sw sd mul 7 add 8 idiv string def
+	sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop}
+	image
+} bdef
+/imagemask_raster	{
+	TR SC /sh E def /sw E def
+	/imagebuf sw 7 add 8 idiv string def
+	sw sh false [sw 0 0 sh 0 0]
+	{currentfile imagebuf readhexstring pop}
+	imagemask
+} bdef
+/dither_color_raster    { % bool sw sh sd dw dh xs ys
+	TR SC /sd E def /sh E def /sw E def
+	sd 8 eq and
+	{
+	  /imagebuf 3 string def
+	  /grayval 1 string def
+	  sw sh sd [sw 0 0 sh 0 0]
+	  {
+	    currentfile imagebuf readhexstring pop pop
+	    imagebuf 0 get 0.299 mul
+	    imagebuf 1 get 0.587 mul add
+	    imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval
+	  }
+	  image
+	}
+	{
+	  /imagebuf sw 3 mul sd mul 7 add 8 idiv string def
+	  sh { currentfile imagebuf readhexstring pop pop } repeat
+	} ifelse
+} bdef
+/image_color_raster	{ % bool sw sh sd dw dh xs ys
+	/colorimage where not
+	{ dither_color_raster }
+	{
+	  pop
+	  TR SC /sd E def /sh E def /sw E def pop
+	  /imagebuf sw 3 mul sd mul 7 add 8 idiv string def
+	  sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop}
+	  false 3 colorimage
+	} ifelse
+} bdef
+/patpath	{
+	/inv E def
+	topmat setmatrix
+	pathbbox	%% get lo - hi indecies
+	/hy E dp_h div floor cvi def
+	/hx E dp_w div floor cvi def
+	/ly E dp_h div floor cvi def
+	/lx E dp_w div floor cvi def
+	lx 1 hx	{
+	    dp_w mul
+	    ly 1 hy {
+		dp_h mul
+		E dup 3 1 roll E
+		patmat currentmatrix pop
+		TR
+		dp_pw dp_ph inv
+		dp_mat dp_proc imagemask
+		patmat setmatrix
+	    } for
+	    pop
+	} for
+} bdef
+% setpattern brush of patterns instead of gray
+/setpattern	{
+	/blue E def /green E def /red E def
+	/freq E def /bwidth E def /bpside E def
+	/bstring E def
+	/onbits 0 def /offbits 0 def
+	freq 0 {/y E def /x E def
+		/xindex x 1 add 2 div bpside mul cvi def
+		/yindex y 1 add 2 div bpside mul cvi def
+		bstring yindex bwidth mul xindex 8 idiv add get not
+		1 7 xindex 8 mod sub bitshift and 0 ne
+		{/onbits onbits 1 add def 1}
+		{/offbits offbits 1 add def 0}
+		ifelse
+	} setscreen {} settransfer
+	systemdict /setcmykcolor known
+	{ /fact 1 onbits offbits onbits add div sub def
+	1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0
+		setcmykcolor
+	}
+	{ offbits offbits onbits add div setgray}
+	ifelse
+} bdef
+/dmatrix matrix def
+/dpi 72 0 dmatrix defaultmatrix dtransform
+	dup mul E dup mul add sqrt
+def
+
+/B	{gs bp st gr} bdef %% brush: gr lw lj
+/Bbw	{gs bpbw st gr} bdef %% brush: gr lw lj
+/F	{gs rgb eofill gr} bdef %% fill: gr
+/Fbw	{gs setgray eofill gr} bdef %% fill: gr
+/PB	{gs lj lw setpattern st gr} bdef
+/PF	{gs eoclip patpath gr} bdef
+/BB	{gs rgb lj lw strokepath clip patpath gr} bdef
+/xdef {exch def} bdef
+/clip_region {
+  /ht xdef
+  /wd xdef
+  /bm xdef
+  /lm xdef
+  newpath
+      lm bm moveto
+      0 ht rlineto
+      wd 0 rlineto
+      0 ht neg rlineto
+  closepath clip
+} bdef
+%! Island text prolog Version 3.1
+%%
+%%BeginProlog
+/reencode_small_dict 12 dict def
+/ReencodeSmall {
+reencode_small_dict begin
+/new_codes_and_names exch def
+/new_font_name exch def
+/base_font_name exch def
+/base_font_dict base_font_name findfont def
+/newfont base_font_dict maxlength dict def
+base_font_dict {
+exch dup /FID ne
+{ dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put }
+ifelse
+}
+{ pop pop }
+ifelse
+} forall
+newfont /FontName new_font_name put
+new_codes_and_names aload pop
+new_codes_and_names length 2 idiv
+{ newfont /Encoding get 3 1 roll put }
+repeat
+new_font_name newfont definefont pop
+end     %reencode_small_dict
+} def
+/extended_Zapf [
+8#223 /a89
+8#224 /a90
+8#225 /a93
+8#226 /a94
+8#227 /a91
+8#230 /a92
+8#231 /a205
+8#232 /a85
+8#233 /a206
+8#234 /a86
+8#235 /a87
+8#236 /a88
+8#237 /a95
+8#240 /a96
+] def
+/extended_Standard [
+29 /thorn
+30 /yacute
+31 /divide
+128 /Acircumflex
+129 /Adieresis
+130 /Agrave
+131 /Aring
+132 /Atilde
+133 /Ccedilla
+134 /Eacute
+135 /Ecircumflex
+136 /Edieresis
+137 /Egrave
+138 /Iacute
+139 /Icircumflex
+140 /Idieresis
+141 /Igrave
+142 /Ntilde
+143 /Oacute
+144 /Ocircumflex
+145 /Odieresis
+146 /Ograve
+147 /Otilde
+148 /Scaron
+149 /Uacute
+150 /Ucircumflex
+151 /Udieresis
+152 /Ugrave
+153 /Ydieresis
+154 /Zcaron
+155 /aacute
+156 /acircumflex
+157 /adieresis
+158 /agrave
+159 /aring
+160 /atilde
+161 /exclamdown
+162 /cent
+163 /sterling
+164 /fraction
+165 /yen
+166 /florin
+167 /section
+168 /currency
+169 /quotesingle
+170 /quotedblleft
+171 /guillemotleft
+172 /guilsinglleft
+173 /guilsinglright
+174 /fi
+175 /fl
+176 /plusminus
+177 /endash
+178 /dagger
+179 /daggerdbl
+180 /periodcentered
+181 /twosuperior
+182 /paragraph
+183 /bullet
+184 /quotesinglbase
+185 /quotedblbase
+186 /quotedblright
+187 /guillemotright
+188 /ellipsis
+189 /perthousand
+190 /threesuperior
+191 /questiondown
+192 /mu
+193 /grave
+194 /acute
+195 /circumflex
+196 /tilde
+197 /macron
+198 /breve
+199 /dotaccent
+200 /dieresis
+201 /onesuperior
+202 /ring
+203 /cedilla
+204 /onequarter
+205 /hungarumlaut
+206 /ogonek
+207 /caron
+208 /emdash
+209 /ccedilla
+210 /copyright
+211 /eacute
+212 /ecircumflex
+213 /edieresis
+214 /egrave
+215 /iacute
+216 /icircumflex
+217 /idieresis
+218 /igrave
+219 /logicalnot
+220 /minus
+221 /ntilde
+222 /oacute
+223 /ocircumflex
+224 /odieresis
+225 /AE
+226 /onehalf
+227 /ordfeminine
+228 /ograve
+229 /otilde
+230 /registered
+231 /scaron
+232 /Lslash
+233 /Oslash
+234 /OE
+235 /ordmasculine
+236 /trademark
+237 /uacute
+238 /ucircumflex
+239 /udieresis
+240 /ugrave
+241 /ae
+242 /ydieresis
+243 /zcaron
+244 /Aacute
+245 /dotlessi
+246 /threequarters
+247 /Eth
+248 /lslash
+249 /oslash
+250 /oe
+251 /germandbls
+252 /multiply
+253 /Yacute
+254 /Thorn
+255 /eth
+] def
+/extended_Symbol [
+] def
+/extend_font {  % stack: fontname newfontname
+exch dup (ZapfDingbats) eq
+{ cvn exch cvn extended_Zapf ReencodeSmall }
+{ dup (Symbol) eq
+{ cvn exch cvn extended_Symbol ReencodeSmall }
+{ cvn exch cvn extended_Standard ReencodeSmall }
+ifelse
+}
+ifelse
+} bind def
+/extend_font_name { % stack: font_name_string
+dup length 1 add string /extended_font_name exch def
+extended_font_name 0 (_) putinterval
+extended_font_name 1 3 -1 roll putinterval
+extended_font_name
+} bind def
+/gf {
+/f exch def f cvn where
+{ f exch begin cvn load exec setfont end }
+{ f 0 f length 8 sub getinterval dup
+/localfont exch extend_font_name def
+localfont extend_font
+localfont findfont
+/xsz f f length 4 sub 4 getinterval cvi def
+/ysz f f length 8 sub 4 getinterval cvi def
+[ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def
+setfont
+}
+ifelse
+} bind def
+/gfns {
+/f exch def f cvn where
+{ f exch begin cvn load exec setfont end }
+{ f 0 f length 8 sub getinterval cvn findfont
+/xsz f f length 4 sub 4 getinterval cvi def
+/ysz f f length 8 sub 4 getinterval cvi def
+[ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def
+setfont
+}
+ifelse
+} bind def
+/ul { % space drop thickness
+gs currentpoint currentlinewidth 
+currentpoint n m 6 -3 roll 
+lw 0 exch r
+0 rl st lw m
+gr 
+} bind def
+/nxtab { currentpoint pop 1000.0 mul cvi tab mod
+	tab exch sub 1000.0 div 0 rmoveto } bind def
+/nx { /x exch def } bind def
+0. nx
+%%EndProlog
+gsave
+2.83465 -2.83465 scale 0 -279.4 translate
+topmat currentmatrix pop
+n 50.579 18.898 m 50.538 21.026 52.929 22.027 52.888 23.89 c
+52.888 24.404 52.499 25.739 51.136 25.712 c
+50.454 25.698 49.801 25.239 49.815 24.057 c
+49.815 23.222 l
+49.801 23.153 49.801 23.07 49.745 23 c
+49.703 22.958 49.62 22.93 49.551 22.958 c
+49.425 23.028 49.397 23.167 49.342 23.278 c
+49.273 23.64 49.189 24.015 49.119 24.377 c
+49.105 24.404 49.147 24.404 49.119 24.404 c
+49.064 24.669 49.022 24.947 49.008 25.211 c
+48.994 25.378 49.105 25.517 49.245 25.6 c
+49.759 25.878 50.413 26.073 51.136 26.087 c
+52.902 26.115 54.348 24.571 54.376 23.07 c
+54.389 21.86 53.708 21.164 52.957 20.261 c
+52.582 19.788 51.831 19.134 51.859 18.272 c
+51.859 17.577 52.429 16.798 53.472 16.812 c
+54.876 16.84 54.654 18.328 54.681 19.009 c
+54.681 19.079 54.681 19.148 54.737 19.176 c
+54.793 19.232 54.876 19.246 54.946 19.218 c
+54.987 19.176 55.015 19.148 55.029 19.106 c
+55.377 17.8 l
+55.433 17.563 55.544 17.327 55.544 17.049 c
+55.544 16.979 55.488 16.91 55.419 16.854 c
+54.681 16.465 54.237 16.409 53.555 16.395 c
+51.831 16.367 50.593 17.591 50.579 18.898 c
+cl 54.782 21.484 m 54.782 21.554 54.837 21.624 54.921 21.624 c
+55.101 21.624 55.199 21.262 55.644 20.664 c
+55.894 20.288 56.214 19.996 56.381 19.996 c
+56.506 19.996 56.52 20.094 56.52 20.177 c
+56.52 20.594 54.935 23.932 54.935 25.239 c
+54.935 25.642 55.101 26.031 55.616 26.031 c
+56.839 26.031 58.161 24.488 59.106 23.097 c
+59.148 23.056 59.176 23.056 59.162 23.125 c
+58.967 23.695 58.689 24.78 58.689 25.447 c
+58.689 25.726 58.745 26.059 59.189 26.059 c
+60.274 26.059 61.679 23.932 61.679 23.431 c
+61.679 23.348 61.651 23.264 61.553 23.264 c
+61.387 23.264 61.331 23.542 61.15 23.848 c
+60.816 24.377 60.274 25.072 60.01 25.072 c
+59.913 25.072 59.913 24.961 59.913 24.877 c
+59.913 24.168 61.609 19.538 61.609 19.399 c
+61.609 19.287 61.595 19.218 61.428 19.218 c
+61.317 19.218 61.136 19.204 60.886 19.204 c
+60.427 19.204 60.399 19.274 60.357 19.357 c
+60.135 19.788 59.801 21.164 59.134 22.374 c
+58.23 23.946 57.006 25.183 56.492 25.183 c
+56.311 25.183 56.2 25.044 56.2 24.836 c
+56.2 24.14 57.883 20.539 57.883 19.663 c
+57.883 19.454 57.771 19.037 57.271 19.037 c
+55.922 19.037 54.782 21.234 54.782 21.484 c
+cl 67.509 19.051 m 66.16 19.051 64.727 21.192 64.241 21.916 c
+64.213 21.985 64.199 21.957 64.213 21.902 c
+64.449 21.039 64.727 20.275 64.727 19.704 c
+64.727 19.357 64.561 19.009 64.116 19.009 c
+63.17 19.009 61.793 20.872 61.793 21.331 c
+61.793 21.429 61.821 21.498 61.891 21.498 c
+62.058 21.498 62.197 21.178 62.447 20.845 c
+62.767 20.455 63.156 19.955 63.393 19.955 c
+63.434 19.955 63.476 19.983 63.476 20.122 c
+63.476 20.706 62.28 24.001 61.78 25.642 c
+61.724 25.823 61.835 25.864 62.364 25.864 c
+62.739 25.864 62.92 25.92 62.989 25.628 c
+63.295 24.53 63.865 23.306 64.491 22.235 c
+65.061 21.234 66.285 19.788 66.966 19.788 c
+67.119 19.788 67.217 19.899 67.217 20.136 c
+67.217 20.831 65.437 24.154 65.492 25.42 c
+65.506 25.781 65.631 26.045 66.09 26.045 c
+67.147 26.045 68.079 24.571 68.51 23.793 c
+68.579 23.668 68.691 23.528 68.593 23.376 c
+68.565 23.32 68.51 23.292 68.44 23.292 c
+68.399 23.292 68.357 23.334 68.329 23.376 c
+68.037 23.89 67.397 25.016 66.966 25.044 c
+66.883 25.044 66.841 24.961 66.841 24.891 c
+66.841 24.39 68.399 21.151 68.399 20.052 c
+68.399 19.315 67.995 19.051 67.509 19.051 c
+cl 0 0 0 F
+n 37.927 22.069 m 37.526 22.47 36.877 22.469 36.476 22.069 c
+36.076 21.668 36.075 21.018 36.476 20.618 c
+38.852 18.242 l
+39.488 18.877 l
+37.095 21.27 l
+37.275 21.45 l
+39.667 19.057 l
+40.303 19.692 l
+37.927 22.069 l
+cl 0 0 0 F
+n 39.777 20.592 m 40.178 20.191 40.827 20.191 41.228 20.592 c
+41.629 20.992 41.629 21.642 41.228 22.043 c
+38.852 24.419 l
+38.217 23.784 l
+40.609 21.391 l
+40.43 21.211 l
+38.037 23.604 l
+37.401 22.968 l
+39.777 20.592 l
+cl 0 0 0 F
+n 42.858 25.522 m 43.259 25.922 43.259 26.572 42.858 26.972 c
+42.457 27.373 41.807 27.373 41.407 26.972 c
+39.031 24.596 l
+39.666 23.961 l
+42.059 26.354 l
+42.239 26.174 l
+39.846 23.781 l
+40.482 23.145 l
+42.858 25.522 l
+cl 0 0 0 F
+n 41.381 23.671 m 40.98 23.271 40.98 22.621 41.381 22.221 c
+41.781 21.82 42.431 21.82 42.832 22.221 c
+45.208 24.597 l
+44.573 25.232 l
+42.18 22.84 l
+42 23.019 l
+44.393 25.412 l
+43.757 26.048 l
+41.381 23.671 l
+cl 0 0 0 F
+n 44.462 22.068 m 44.062 22.469 43.412 22.468 43.012 22.068 c
+42.611 21.667 42.611 21.017 43.012 20.616 c
+45.388 18.241 l
+46.023 18.876 l
+43.631 21.269 l
+43.81 21.448 l
+46.203 19.056 l
+46.839 19.692 l
+44.462 22.068 l
+cl 0 0 0 F
+n 46.313 20.591 m 46.713 20.19 47.363 20.19 47.763 20.591 c
+48.164 20.992 48.164 21.642 47.763 22.042 c
+45.387 24.418 l
+44.752 23.782 l
+47.145 21.39 l
+46.965 21.21 l
+44.572 23.603 l
+43.936 22.967 l
+46.313 20.591 l
+cl 0 0 0 F
+n 42.858 18.987 m 43.259 19.388 43.259 20.037 42.858 20.438 c
+42.457 20.839 41.807 20.839 41.407 20.438 c
+39.031 18.062 l
+39.666 17.426 l
+42.059 19.819 l
+42.239 19.64 l
+39.846 17.247 l
+40.482 16.611 l
+42.858 18.987 l
+cl 0 0 0 F
+n 41.381 17.137 m 40.98 16.736 40.98 16.087 41.381 15.686 c
+41.781 15.286 42.431 15.286 42.832 15.686 c
+45.208 18.062 l
+44.573 18.698 l
+42.18 16.305 l
+42 16.484 l
+44.393 18.877 l
+43.757 19.513 l
+41.381 17.137 l
+cl 0 0 0 F
+n 51.433 28.821 m 51.433 27.9 l
+51.433 27.7 51.386 27.573 51.193 27.573 c
+50.981 27.573 50.779 27.79 50.779 28.136 c
+50.779 28.821 l
+50.514 28.821 l
+50.514 27.897 l
+50.514 27.718 50.475 27.573 50.273 27.573 c
+50.047 27.573 49.859 27.807 49.859 28.136 c
+49.859 28.821 l
+49.592 28.821 l
+49.592 27.386 l
+49.851 27.386 l
+49.851 27.469 49.845 27.599 49.827 27.686 c
+49.833 27.689 l
+49.919 27.487 50.109 27.357 50.347 27.357 c
+50.66 27.357 50.743 27.568 50.755 27.683 c
+50.817 27.547 50.975 27.357 51.261 27.357 c
+51.541 27.357 51.701 27.504 51.701 27.828 c
+51.701 28.821 l
+51.433 28.821 l
+cl 0 0 0 F
+n 53.723 28.841 m 53.369 28.841 53.075 28.68 53.075 28.151 c
+53.075 27.689 53.319 27.362 53.813 27.362 c
+53.929 27.362 54.045 27.38 54.149 27.409 c
+54.119 27.637 l
+54.027 27.602 53.917 27.576 53.801 27.576 c
+53.503 27.576 53.357 27.79 53.357 28.116 c
+53.357 28.396 53.453 28.619 53.78 28.619 c
+53.905 28.619 54.036 28.59 54.131 28.541 c
+54.152 28.766 l
+54.054 28.804 53.896 28.841 53.723 28.841 c
+cl 0 0 0 F
+n 55.286 27.614 m 54.973 27.562 54.825 27.784 54.825 28.244 c
+54.825 28.821 l
+54.557 28.821 l
+54.557 27.386 l
+54.816 27.386 l
+54.816 27.475 54.807 27.608 54.783 27.726 c
+54.789 27.726 l
+54.851 27.527 55.003 27.328 55.298 27.36 c
+55.286 27.614 l
+cl 0 0 0 F
+n 56.195 28.847 m 55.794 28.847 55.532 28.622 55.532 28.116 c
+55.532 27.694 55.806 27.36 56.252 27.36 c
+56.63 27.36 56.919 27.562 56.919 28.079 c
+56.919 28.512 56.633 28.847 56.195 28.847 c
+cl 56.228 27.576 m 56.014 27.576 55.811 27.735 55.811 28.09 c
+55.811 28.437 55.957 28.628 56.228 28.628 c
+56.448 28.628 56.639 28.46 56.639 28.093 c
+56.639 27.767 56.502 27.576 56.228 27.576 c
+cl 0 0 0 F
+n 57.611 28.847 m 57.501 28.847 57.391 28.838 57.299 28.821 c
+57.308 28.59 l
+57.4 28.619 57.519 28.639 57.632 28.639 c
+57.829 28.639 57.963 28.552 57.963 28.42 c
+57.963 28.099 57.275 28.296 57.275 27.79 c
+57.275 27.547 57.481 27.36 57.867 27.36 c
+57.957 27.36 58.061 27.371 58.15 27.388 c
+58.144 27.605 l
+58.052 27.576 57.945 27.559 57.847 27.559 c
+57.65 27.559 57.552 27.64 57.552 27.764 c
+57.552 28.079 58.242 27.908 58.242 28.391 c
+58.242 28.651 58.004 28.847 57.611 28.847 c
+cl 0 0 0 F
+n 59.235 28.966 m 59.063 29.41 58.923 29.555 58.596 29.555 c
+58.539 29.555 58.462 29.546 58.402 29.538 c
+58.426 29.304 l
+58.489 29.324 58.548 29.332 58.617 29.332 c
+58.78 29.332 58.867 29.26 58.971 28.983 c
+59.033 28.821 l
+58.474 27.386 l
+58.777 27.386 l
+59.057 28.131 l
+59.105 28.261 59.137 28.374 59.17 28.486 c
+59.176 28.486 l
+59.203 28.385 59.265 28.203 59.322 28.044 c
+59.56 27.386 l
+59.851 27.386 l
+59.235 28.966 l
+cl 0 0 0 F
+n 60.402 28.847 m 60.291 28.847 60.181 28.838 60.089 28.821 c
+60.098 28.59 l
+60.191 28.619 60.309 28.639 60.423 28.639 c
+60.619 28.639 60.753 28.552 60.753 28.42 c
+60.753 28.099 60.065 28.296 60.065 27.79 c
+60.065 27.547 60.271 27.36 60.657 27.36 c
+60.747 27.36 60.851 27.371 60.94 27.388 c
+60.934 27.605 l
+60.842 27.576 60.735 27.559 60.637 27.559 c
+60.44 27.559 60.342 27.64 60.342 27.764 c
+60.342 28.079 61.033 27.908 61.033 28.391 c
+61.033 28.651 60.795 28.847 60.402 28.847 c
+cl 0 0 0 F
+n 61.981 28.844 m 61.677 28.844 61.585 28.723 61.585 28.414 c
+61.585 27.588 l
+61.282 27.588 l
+61.282 27.386 l
+61.585 27.386 l
+61.585 26.92 l
+61.853 26.848 l
+61.853 27.386 l
+62.267 27.386 l
+62.267 27.588 l
+61.853 27.588 l
+61.853 28.322 l
+61.853 28.558 61.898 28.622 62.064 28.622 c
+62.133 28.622 62.207 28.61 62.267 28.596 c
+62.267 28.815 l
+62.183 28.833 62.076 28.844 61.981 28.844 c
+cl 0 0 0 F
+n 63.809 28.088 m 62.842 28.088 l
+62.83 28.472 62.994 28.636 63.309 28.636 c
+63.461 28.636 63.621 28.602 63.741 28.547 c
+63.764 28.758 l
+63.621 28.815 63.449 28.847 63.265 28.847 c
+62.809 28.847 62.565 28.616 62.565 28.11 c
+62.565 27.68 62.806 27.36 63.226 27.36 c
+63.642 27.36 63.818 27.634 63.818 27.963 c
+63.818 27.998 63.815 28.038 63.809 28.088 c
+cl 63.214 27.55 m 63.021 27.55 62.883 27.692 62.854 27.902 c
+63.544 27.902 l
+63.55 27.692 63.422 27.55 63.214 27.55 c
+cl 0 0 0 F
+n 66.085 28.821 m 66.085 27.9 l
+66.085 27.7 66.037 27.573 65.844 27.573 c
+65.633 27.573 65.431 27.79 65.431 28.136 c
+65.431 28.821 l
+65.166 28.821 l
+65.166 27.897 l
+65.166 27.718 65.127 27.573 64.925 27.573 c
+64.699 27.573 64.511 27.807 64.511 28.136 c
+64.511 28.821 l
+64.243 28.821 l
+64.243 27.386 l
+64.502 27.386 l
+64.502 27.469 64.496 27.599 64.478 27.686 c
+64.484 27.689 l
+64.571 27.487 64.761 27.357 64.999 27.357 c
+65.311 27.357 65.395 27.568 65.407 27.683 c
+65.469 27.547 65.627 27.357 65.913 27.357 c
+66.192 27.357 66.353 27.504 66.353 27.828 c
+66.353 28.821 l
+66.085 28.821 l
+cl 0 0 0 F
+n 67.116 28.847 m 67.006 28.847 66.896 28.838 66.804 28.821 c
+66.813 28.59 l
+66.905 28.619 67.024 28.639 67.137 28.639 c
+67.333 28.639 67.467 28.552 67.467 28.42 c
+67.467 28.099 66.78 28.296 66.78 27.79 c
+66.78 27.547 66.985 27.36 67.372 27.36 c
+67.461 27.36 67.565 27.371 67.655 27.388 c
+67.649 27.605 l
+67.557 27.576 67.449 27.559 67.351 27.559 c
+67.155 27.559 67.057 27.64 67.057 27.764 c
+67.057 28.079 67.747 27.908 67.747 28.391 c
+67.747 28.651 67.509 28.847 67.116 28.847 c
+cl 0 0 0 F
+n 52.454 27.149 m 52.552 27.149 52.632 27.071 52.632 26.978 c
+52.632 26.883 52.552 26.811 52.454 26.811 c
+52.355 26.811 52.275 26.886 52.275 26.978 c
+52.275 27.074 52.355 27.149 52.454 27.149 c
+cl 0 0 0 F
+n 52.103 27.382 m 52.103 27.585 l
+52.32 27.585 l
+52.32 28.821 l
+52.588 28.821 l
+52.588 27.386 l
+52.103 27.382 l
+cl 0 0 0 F
+userdict /#copies 1 put
+grestore
+
+%%Trailer
+%%DocumentNeededResources: font
+%%DocumentSuppliedResources: 
+end d_sv_obj restore
+
+
+%%EndDocument
+FMENDEPSF
+[/EMC FmPD4
+[/Subtype (Article_A) cvn /StPNE FmPD4
+[(Article_A) cvn /Art /StRoleMap FmPD4
+[/Subtype /TextSection /StPNE FmPD4
+[/_objdef {PS192579} /type /dict /OBJ FmPD4
+[{PS192579} <</O /Layout /EndIndent 108 >> /PUT FmPD4
+[/SP192579 {PS192579} /StClassMap FmPD4
+[/Subtype (_ReportTitle) cvn /Class /SP192579 /StPNE FmPD4
+[/_objdef {CS3732} /type /dict /OBJ FmPD4
+[{CS3732} <</O /Layout /LineHeight 24>> /PUT FmPD4
+[/SC3732 {CS3732} /StClassMap FmPD4
+[/Subtype /Span  /Class /SC3732 /StPNE FmPD4
+[/StBMC FmPD4
+1 24 Q
+-0.17 (Ja) 207 676.2 S
+-0.17 (v) 226.18 676.2 S
+-0.17 (aBeans) 237.42 676.2 S
+[/EMC FmPD4
+[/StPop FmPD4
+[/_objdef {CS3742} /type /dict /OBJ FmPD4
+[{CS3742} <</O /Layout /LineHeight 18 /BaselineShift 7.2>> /PUT FmPD4
+[/SC3742 {CS3742} /StClassMap FmPD4
+[/Subtype /Span  /Class /SC3742 /StPNE FmPD4
+[/StBMC FmPD4
+1 14.4 Q
+(\252) 305.74 683.4 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3732 /StPNE FmPD4
+[/StBMC FmPD4
+1 24 Q
+-0.17 ( Acti) 319.85 676.2 S
+-0.17 (v) 365.75 676.2 S
+-0.17 (ation ) 376.99 676.2 S
+201 701/G268103 FmND
+-0.17 (Frame) 207 646.2 S
+-0.17 (w) 266.89 646.2 S
+-0.17 (ork ) 283.82 646.2 S
+-0.17 (Specif) 321.07 646.2 S
+-0.17 (ication) 380.08 646.2 S
+-0.17 ( ) 444.25 646.2 S
+207 598.2 558 608.2 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+207 599.2 459 599.2 2 L
+0.25 H
+0 Z
+0 X
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+2 24 Q
+0 X
+-0.17 (V) 207 616.2 S
+-0.17 (er) 218.84 616.2 S
+-0.17 (sion 1.1) 238.26 616.2 S
+[/EMC FmPD4
+[/StPop FmPD4
+[/_objdef {PS192581} /type /dict /OBJ FmPD4
+[{PS192581} <</O /Layout /SpaceBefore 10 /EndIndent 90 >> /PUT FmPD4
+[/SP192581 {PS192581} /StClassMap FmPD4
+[/Subtype (_ReportAuthor) cvn /Class /SP192581 /StPNE FmPD4
+[/_objdef {CS3765} /type /dict /OBJ FmPD4
+[{CS3765} <</O /Layout /LineHeight 12>> /PUT FmPD4
+[/SC3765 {CS3765} /StClassMap FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+3 12 Q
+(Bart Calder) 207 574.2 T
+(, Bill Shannon) 267.55 574.2 T
+201 586/G267530 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/_objdef {PS192525} /type /dict /OBJ FmPD4
+[{PS192525} <</O /Layout /SpaceAfter 20 /SpaceBefore 26 /EndIndent 162 >> /PUT FmPD4
+[/Subtype (_ReportPurpose) cvn  /StPNE FmPD4
+[/Obj {PS192525} /StAttr FmPD4
+[/_objdef {CS3749} /type /dict /OBJ FmPD4
+[{CS3749} <</O /Layout /LineHeight 9>> /PUT FmPD4
+[/SC3749 {CS3749} /StClassMap FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+0 9 Q
+(The Ja) 207 531.8 T
+(v) 235.38 531.8 T
+(aBeans) 240.2 531.8 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/_objdef {CS3751} /type /dict /OBJ FmPD4
+[{CS3751} <</O /Layout /LineHeight 9 /BaselineShift 3.6>> /PUT FmPD4
+[/SC3751 {CS3751} /StClassMap FmPD4
+[/Subtype /Span  /Class /SC3751 /StPNE FmPD4
+[/StBMC FmPD4
+4 7.2 Q
+(\252) 272.21 535.4 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+0 9 Q
+( Activ) 279.26 531.8 T
+(ation Frame) 303.59 531.8 T
+(w) 354.47 531.8 T
+(ork ) 361.29 531.8 T
+201 543/G269523 FmND
+(Speci\336cation is a data typing and registr) 207 519.8 T
+(y ) 380.14 519.8 T
+(tec) 207 507.8 T
+(hnology that is a Standar) 219.91 507.8 T
+(d Extension to ) 327.26 507.8 T
+(the Ja) 207 495.13 T
+(v) 232.88 495.13 T
+(a) 237.7 495.13 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/_objdef {CS3755} /type /dict /OBJ FmPD4
+[{CS3755} <</O /Layout /LineHeight 10>> /PUT FmPD4
+[/SC3755 {CS3755} /StClassMap FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(\252) 242.7 495.13 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+0 9 Q
+( Platf) 252.5 495.13 T
+(orm.) 274.33 495.13 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299010 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "1" 1
+%%Page: "2" 2
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+0 0 0 1 0 0 0 1 K
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.2/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+48 749/G30230 FmND
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(2) 54 60.29 T
+0 9 Q
+( of) 59.56 60.29 T
+0 10 Q
+( 21) 70.56 60.29 T
+48 70/G30232 FmND
+54 653.33 540 663.33 C
+0 0 0 1 0 0 0 1 K
+54 654.33 306 654.33 2 L
+0.25 H
+0 Z
+0 X
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StoreName /P299010 /StRetrieve FmPD4
+[/StoreName /P299010 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_ReportTitle) cvn /Class /SP192579 /StPNE FmPD4
+48 695/G273590 FmND
+[/_objdef {PS192523} /type /dict /OBJ FmPD4
+[{PS192523} <</O /Layout /SpaceAfter 6 /SpaceBefore 12 /StartIndent 135 /TextIndent 135  /TextAlign /Justify>> /PUT FmPD4
+[/SP192523 {PS192523} /StClassMap FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+1 10 Q
+0 X
+(Speci\336cation: ) 189 628.66 T
+(Ja) 256.13 628.66 T
+(v) 264.26 628.66 T
+(aBeans ) 269.01 628.66 T
+(Acti) 310.01 628.66 T
+(v) 326.98 628.66 T
+(ation ) 331.73 628.66 T
+(Frame) 363.86 628.66 T
+(w) 389.16 628.66 T
+(ork ) 396.28 628.66 T
+(v) 421.74 628.66 T
+(ersion ) 426.59 628.66 T
+(1.1 ) 463.15 628.66 T
+(Speci\336cation) 487.78 628.66 T
+( ) 540 628.66 T
+48 639/G273759 FmND
+(\050"Speci\336cation"\051 ) 189 616.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( Status: Maintenance Release) 189 592.66 T
+48 603/G273988 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( Release: 17 April 2006) 189 568.66 T
+48 579/G273989 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( Cop) 189 544.66 T
+(yright 2006 SUN MICR) 208.07 544.66 T
+(OSYSTEMS, INC.) 304.62 544.66 T
+48 555/G273990 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(4150 Netw) 189 520.66 T
+(ork Circle, Santa Clara, California 95054, U.S.A) 233.06 520.66 T
+48 531/G273991 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(All rights reserv) 189 496.66 T
+(ed.) 253.84 496.66 T
+48 507/G273992 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( LIMITED LICENSE GRANTS) 189 472.66 T
+48 483/G273993 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 189 448.66 T
+(1. ) 191.7 448.66 T
+(License ) 201.9 448.66 T
+(for ) 235.7 448.66 T
+(Ev) 250.06 448.66 T
+(aluation ) 260.92 448.66 T
+(Purposes. ) 295.84 448.66 T
+(Sun ) 337.15 448.66 T
+(hereby ) 355.42 448.66 T
+(grants ) 385.33 448.66 T
+(you ) 412.47 448.66 T
+(a ) 430.17 448.66 T
+(fully-paid, ) 437.31 448.66 T
+(non-e) 481.95 448.66 T
+(xclusi) 504.57 448.66 T
+(v) 528.21 448.66 T
+(e,) 533.06 448.66 T
+( ) 540 448.66 T
+48 459/G273994 FmND
+(non-transferable, ) 189 436.66 T
+(w) 261.32 436.66 T
+(orldwide, ) 268.44 436.66 T
+(limited ) 310.79 436.66 T
+(license ) 343.42 436.66 T
+(\050without ) 375.49 436.66 T
+(the ) 413.67 436.66 T
+(right ) 430.19 436.66 T
+(to ) 453.37 436.66 T
+(sublicense\051, ) 465.45 436.66 T
+(under) 517.23 436.66 T
+( ) 540 436.66 T
+(Sun\325) 189 424.66 T
+(s ) 207.34 424.66 T
+(applicable ) 214.51 424.66 T
+(intellectual ) 258.89 424.66 T
+(property ) 306.61 424.66 T
+(rights ) 343.77 424.66 T
+(to ) 369.83 424.66 T
+(vie) 380.89 424.66 T
+(w) 392.86 424.66 T
+(, ) 399.43 424.66 T
+(do) 405.22 424.66 T
+(wnload, ) 414.97 424.66 T
+(use ) 450.19 424.66 T
+(and ) 466.8 424.66 T
+(reproduce ) 484.52 424.66 T
+(the) 527.78 424.66 T
+( ) 540 424.66 T
+(Speci\336cation ) 189 412.66 T
+(only ) 244.71 412.66 T
+(for ) 265.97 412.66 T
+(the ) 281.11 412.66 T
+(purpose ) 296.82 412.66 T
+(of ) 331.96 412.66 T
+(internal ) 343.78 412.66 T
+(e) 377.81 412.66 T
+(v) 382 412.66 T
+(aluation. ) 386.75 412.66 T
+(This ) 424.96 412.66 T
+(includes ) 446.22 412.66 T
+(\050i\051 ) 483.04 412.66 T
+(de) 495.96 412.66 T
+(v) 505.15 412.66 T
+(eloping) 510 412.66 T
+( ) 540 412.66 T
+(applications ) 189 400.66 T
+(intended ) 240.9 400.66 T
+(to ) 278.9 400.66 T
+(run ) 290.25 400.66 T
+(on ) 307.14 400.66 T
+(an ) 320.71 400.66 T
+(implementation ) 333.72 400.66 T
+(of ) 400.06 400.66 T
+(the ) 411.96 400.66 T
+(Speci\336cation, ) 427.75 400.66 T
+(pro) 486.03 400.66 T
+(vided ) 499.21 400.66 T
+(that) 525 400.66 T
+( ) 540 400.66 T
+(such ) 189 388.66 T
+(applications ) 210.15 388.66 T
+(do ) 261.3 388.66 T
+(not ) 274.13 388.66 T
+(themselv) 289.73 388.66 T
+(es ) 325.69 388.66 T
+(implement ) 336.84 388.66 T
+(an) 382.45 388.66 T
+(y ) 391.74 388.66 T
+(portion\050s\051 ) 399.56 388.66 T
+(of ) 441.82 388.66 T
+(the ) 452.97 388.66 T
+(Speci\336cation, ) 468.02 388.66 T
+(and) 525.56 388.66 T
+( ) 540 388.66 T
+(\050ii\051 ) 189 376.66 T
+(discussing ) 204.15 376.66 T
+(the ) 248.76 376.66 T
+(Speci\336cation ) 263.92 376.66 T
+(with ) 319.07 376.66 T
+(an) 339.79 376.66 T
+(y ) 349.08 376.66 T
+(third ) 357.01 376.66 T
+(party; ) 378.83 376.66 T
+(and ) 405.1 376.66 T
+(\050iii\051 ) 422.48 376.66 T
+(e) 440.41 376.66 T
+(xcerpting ) 444.7 376.66 T
+(brief ) 485.4 376.66 T
+(portions) 507.22 376.66 T
+( ) 540 376.66 T
+(of ) 189 364.66 T
+(the ) 200.45 364.66 T
+(Speci\336cation ) 215.8 364.66 T
+(in ) 271.14 364.66 T
+(oral ) 282.05 364.66 T
+(or ) 300.72 364.66 T
+(written ) 312.17 364.66 T
+(communications ) 343.62 364.66 T
+(which ) 412.86 364.66 T
+(discuss ) 440.42 364.66 T
+(the ) 472.44 364.66 T
+(Speci\336cation) 487.78 364.66 T
+( ) 540 364.66 T
+(pro) 189 352.66 T
+(vided ) 202.18 352.66 T
+(that ) 226.77 352.66 T
+(such ) 244.14 352.66 T
+(e) 264.85 352.66 T
+(xcerpts ) 269.14 352.66 T
+(do ) 300.39 352.66 T
+(not ) 312.76 352.66 T
+(in ) 327.91 352.66 T
+(the ) 338.07 352.66 T
+(aggre) 352.66 352.66 T
+(g) 374.72 352.66 T
+(ate ) 379.67 352.66 T
+(constitute ) 393.7 352.66 T
+(a ) 434.96 352.66 T
+(signi\336cant ) 441.77 352.66 T
+(portion ) 485.82 352.66 T
+(of ) 517.08 352.66 T
+(the) 527.78 352.66 T
+( ) 540 352.66 T
+(Speci\336cation.) 189 340.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 189 316.66 T
+(2. ) 192.43 316.66 T
+(License ) 203.35 316.66 T
+(for ) 237.88 316.66 T
+(the ) 252.97 316.66 T
+(Distrib) 268.61 316.66 T
+(ution ) 296.2 316.66 T
+(of ) 320.18 316.66 T
+(Compliant ) 331.94 316.66 T
+(Implementations. ) 377.6 316.66 T
+(Sun ) 450.74 316.66 T
+(also ) 469.73 316.66 T
+(grants ) 489.27 316.66 T
+(you ) 517.13 316.66 T
+(a) 535.56 316.66 T
+( ) 540 316.66 T
+48 327/G273995 FmND
+(perpetual, ) 189 304.66 T
+(non-e) 234.69 304.66 T
+(xclusi) 257.31 304.66 T
+(v) 280.95 304.66 T
+(e, ) 285.8 304.66 T
+(non-transferable, ) 298.71 304.66 T
+(w) 372.72 304.66 T
+(orldwide, ) 379.84 304.66 T
+(fully ) 423.86 304.66 T
+(paid-up, ) 448.73 304.66 T
+(ro) 487.75 304.66 T
+(yalty ) 495.98 304.66 T
+(free,) 521.96 304.66 T
+( ) 540 304.66 T
+(limited ) 189 292.66 T
+(license ) 221.56 292.66 T
+(\050without ) 253.55 292.66 T
+(the ) 291.66 292.66 T
+(right ) 308.1 292.66 T
+(to ) 331.2 292.66 T
+(sublicense\051 ) 343.2 292.66 T
+(under ) 392.41 292.66 T
+(an) 419.4 292.66 T
+(y ) 428.69 292.66 T
+(applicable ) 437.91 292.66 T
+(cop) 483.23 292.66 T
+(yrights ) 497.57 292.66 T
+(or) 529.57 292.66 T
+(,) 537.5 292.66 T
+( ) 540 292.66 T
+(subject ) 189 280.66 T
+(to ) 220.48 280.66 T
+(the ) 231.41 280.66 T
+(pro) 246.78 280.66 T
+(visions ) 259.96 280.66 T
+(of ) 291.46 280.66 T
+(subsection ) 302.94 280.66 T
+(4 ) 348.31 280.66 T
+(belo) 356.46 280.66 T
+(w) 373.43 280.66 T
+(, ) 380 280.66 T
+(patent ) 385.65 280.66 T
+(rights ) 413.24 280.66 T
+(it ) 439.17 280.66 T
+(may ) 447.89 280.66 T
+(ha) 468.26 280.66 T
+(v) 477.5 280.66 T
+(e ) 482.35 280.66 T
+(co) 489.94 280.66 T
+(v) 499.23 280.66 T
+(ering ) 504.08 280.66 T
+(the) 527.78 280.66 T
+( ) 540 280.66 T
+(Speci\336cation ) 189 268.66 T
+(to ) 248.03 268.66 T
+(create ) 262.61 268.66 T
+(and/or ) 293.29 268.66 T
+(distrib) 325.64 268.66 T
+(ute ) 351 268.66 T
+(an ) 370.03 268.66 T
+(Independent ) 386.27 268.66 T
+(Implementation ) 442.51 268.66 T
+(of ) 512.64 268.66 T
+(the) 527.78 268.66 T
+( ) 540 268.66 T
+(Speci\336cation ) 189 256.66 T
+(that: ) 246.15 256.66 T
+(\050a\051 ) 268.87 256.66 T
+(fully ) 284.9 256.66 T
+(implements ) 308.73 256.66 T
+(the ) 360.33 256.66 T
+(Speci\336cation ) 377.49 256.66 T
+(including ) 434.64 256.66 T
+(all ) 477.36 256.66 T
+(its ) 492.3 256.66 T
+(required) 506.68 256.66 T
+( ) 540 256.66 T
+(interf) 189 244.66 T
+(aces ) 210.56 244.66 T
+(and ) 231.08 244.66 T
+(functionality; ) 248.83 244.66 T
+(\050b\051 ) 306.03 244.66 T
+(does ) 321 244.66 T
+(not ) 342.64 244.66 T
+(modify) 358.72 244.66 T
+(, ) 386.96 244.66 T
+(subset, ) 392.77 244.66 T
+(superset ) 423.58 244.66 T
+(or ) 459.66 244.66 T
+(otherwise ) 471.3 244.66 T
+(e) 513.49 244.66 T
+(xtend) 517.78 244.66 T
+( ) 540 244.66 T
+(the ) 189 232.66 T
+(Licensor ) 204.9 232.66 T
+(Name ) 243.57 232.66 T
+(Space, ) 271.14 232.66 T
+(or ) 301.2 232.66 T
+(include ) 313.21 232.66 T
+(an) 346.33 232.66 T
+(y ) 355.62 232.66 T
+(public ) 364.31 232.66 T
+(or ) 392.99 232.66 T
+(protected ) 405 232.66 T
+(packages, ) 445.89 232.66 T
+(classes, ) 488.73 232.66 T
+(Ja) 522.68 232.66 T
+(v) 530.81 232.66 T
+(a) 535.56 232.66 T
+( ) 540 232.66 T
+(interf) 189 220.66 T
+(aces, ) 210.56 220.66 T
+(\336elds ) 232.8 220.66 T
+(or ) 256.99 220.66 T
+(methods ) 267.85 220.66 T
+(within ) 304.27 220.66 T
+(the ) 332.36 220.66 T
+(Licensor ) 347.11 220.66 T
+(Name ) 384.62 220.66 T
+(Space ) 411.03 220.66 T
+(other ) 437.44 220.66 T
+(than ) 460.52 220.66 T
+(those ) 480.26 220.66 T
+(required/) 503.9 220.66 T
+(authorized ) 189 208.66 T
+(by ) 233.88 208.66 T
+(the ) 246.55 208.66 T
+(Speci\336cation ) 261.44 208.66 T
+(or ) 316.33 208.66 T
+(Speci\336cations ) 327.33 208.66 T
+(being ) 386.11 208.66 T
+(implemented; ) 411.01 208.66 T
+(and ) 468.68 208.66 T
+(\050c\051 ) 485.79 208.66 T
+(passes ) 499.56 208.66 T
+(the) 527.78 208.66 T
+( ) 540 208.66 T
+(T) 189 196.66 T
+(echnology ) 194.41 196.66 T
+(Compatibility ) 239.35 196.66 T
+(Kit ) 298.2 196.66 T
+(\050including ) 314.25 196.66 T
+(satisfying ) 358.64 196.66 T
+(the ) 400.81 196.66 T
+(requirements ) 416.31 196.66 T
+(of ) 471.79 196.66 T
+(the ) 483.4 196.66 T
+(applicable) 498.9 196.66 T
+( ) 540 196.66 T
+(TCK ) 189 184.66 T
+(Users ) 212.45 184.66 T
+(Guide\051 ) 238.67 184.66 T
+(for ) 269.89 184.66 T
+(such ) 284.99 184.66 T
+(Speci\336cation ) 306.77 184.66 T
+(\050\322Compliant ) 362.44 184.66 T
+(Implementation\323\051. ) 415.89 184.66 T
+(In ) 492.94 184.66 T
+(addition,) 504.72 184.66 T
+( ) 540 184.66 T
+(the ) 189 172.66 T
+(fore) 204.25 172.66 T
+(going ) 220.2 172.66 T
+(license ) 246.01 172.66 T
+(is ) 276.81 172.66 T
+(e) 286.51 172.66 T
+(xpressly ) 290.8 172.66 T
+(conditioned ) 327.16 172.66 T
+(on ) 377.41 172.66 T
+(your ) 390.44 172.66 T
+(not ) 411.8 172.66 T
+(acting ) 427.61 172.66 T
+(outside ) 455.08 172.66 T
+(its ) 487 172.66 T
+(scope. ) 499.48 172.66 T
+(No) 527.78 172.66 T
+( ) 540 172.66 T
+(license ) 189 160.66 T
+(is ) 219.98 160.66 T
+(granted ) 229.85 160.66 T
+(hereunder ) 263.05 160.66 T
+(for ) 306.23 160.66 T
+(an) 321.1 160.66 T
+(y ) 330.39 160.66 T
+(other ) 338.59 160.66 T
+(purpose ) 362.35 160.66 T
+(\050including, ) 397.21 160.66 T
+(for ) 444.03 160.66 T
+(e) 458.89 160.66 T
+(xample, ) 463.18 160.66 T
+(modifying) 498.33 160.66 T
+( ) 540 160.66 T
+(the ) 189 148.66 T
+(Speci\336cation, ) 205.25 148.66 T
+(other ) 264.01 148.66 T
+(than ) 288.59 148.66 T
+(to ) 309.85 148.66 T
+(the ) 321.66 148.66 T
+(e) 337.92 148.66 T
+(xtent ) 342.2 148.66 T
+(of ) 366.24 148.66 T
+(your ) 378.6 148.66 T
+(f) 400.97 148.66 T
+(air ) 404.2 148.66 T
+(use ) 418.78 148.66 T
+(rights, ) 436.15 148.66 T
+(or ) 465.46 148.66 T
+(distrib) 477.83 148.66 T
+(uting ) 503.18 148.66 T
+(the) 527.78 148.66 T
+( ) 540 148.66 T
+(Speci\336cation ) 189 136.66 T
+(to ) 244.5 136.66 T
+(third ) 255.56 136.66 T
+(parties\051. ) 277.73 136.66 T
+(Also, ) 313.49 136.66 T
+(no ) 338.16 136.66 T
+(right, ) 351.44 136.66 T
+(title, ) 376.11 136.66 T
+(or ) 397.45 136.66 T
+(interest ) 409.06 136.66 T
+(in ) 441.78 136.66 T
+(or ) 452.83 136.66 T
+(to ) 464.44 136.66 T
+(an) 475.5 136.66 T
+(y ) 484.79 136.66 T
+(trademarks,) 493.07 136.66 T
+( ) 540 136.66 T
+(service ) 189 124.66 T
+(marks, ) 220.11 124.66 T
+(or ) 249.83 124.66 T
+(trade ) 260.95 124.66 T
+(names ) 283.73 124.66 T
+(of ) 312.07 124.66 T
+(Sun ) 323.18 124.66 T
+(or ) 341.53 124.66 T
+(Sun\325) 352.65 124.66 T
+(s ) 370.99 124.66 T
+(licensors ) 377.66 124.66 T
+(is ) 416 124.66 T
+(granted ) 425.46 124.66 T
+(hereunder) 458.23 124.66 T
+(. ) 497.67 124.66 T
+(Ja) 502.95 124.66 T
+(v) 511.08 124.66 T
+(a, ) 515.83 124.66 T
+(and) 525.56 124.66 T
+( ) 540 124.66 T
+(Ja) 189 112.66 T
+(v) 197.13 112.66 T
+(a-related ) 201.88 112.66 T
+(logos, ) 240.68 112.66 T
+(marks ) 268.66 112.66 T
+(and ) 296.92 112.66 T
+(names ) 315.17 112.66 T
+(are ) 344.54 112.66 T
+(trademarks ) 360.56 112.66 T
+(or ) 408.81 112.66 T
+(re) 420.95 112.66 T
+(gistered ) 428.57 112.66 T
+(trademarks ) 464.05 112.66 T
+(of ) 512.29 112.66 T
+(Sun) 524.44 112.66 T
+( ) 540 112.66 T
+(Microsystems, Inc. in the U.S. and other countries.) 189 100.66 T
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299105 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "2" 2
+%%Page: "3" 3
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.3/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+66 749/G30234 FmND
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(3) 527.82 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+66 70/G30235 FmND
+[/EMC FmPD4
+[/StoreName /P299105 /StRetrieve FmPD4
+[/StoreName /P299105 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+( ) 207 680.66 T
+(3. ) 209.8 680.66 T
+(P) 220.11 680.66 T
+(ass-through ) 225.52 680.66 T
+(Conditions. ) 274.98 680.66 T
+(Y) 324.18 680.66 T
+(ou ) 330.3 680.66 T
+(need ) 343.11 680.66 T
+(not ) 364.79 680.66 T
+(include ) 380.37 680.66 T
+(limitations ) 412.62 680.66 T
+(\050a\051-\050c\051 ) 458.21 680.66 T
+(from ) 486.54 680.66 T
+(the ) 508.79 680.66 T
+(pre) 523.81 680.66 T
+(vious) 536.33 680.66 T
+( ) 558 680.66 T
+66 691/G273996 FmND
+(paragraph ) 207 668.66 T
+(or ) 249.78 668.66 T
+(an) 260.91 668.66 T
+(y ) 270.2 668.66 T
+(other ) 278 668.66 T
+(particular ) 301.35 668.66 T
+(\322pass ) 342.47 668.66 T
+(through\323 ) 366.93 668.66 T
+(requirements ) 405.28 668.66 T
+(in ) 460.29 668.66 T
+(an) 470.87 668.66 T
+(y ) 480.16 668.66 T
+(license ) 487.96 668.66 T
+(Y) 518.53 668.66 T
+(ou ) 524.65 668.66 T
+(grant) 537.45 668.66 T
+( ) 558 668.66 T
+(concerning ) 207 656.66 T
+(the ) 255.23 656.66 T
+(use ) 271.24 656.66 T
+(of ) 288.36 656.66 T
+(your ) 300.49 656.66 T
+(Independent ) 322.61 656.66 T
+(Implementation ) 375.84 656.66 T
+(or ) 442.96 656.66 T
+(products ) 455.09 656.66 T
+(deri) 493.32 656.66 T
+(v) 508.62 656.66 T
+(ed ) 513.47 656.66 T
+(from ) 526.71 656.66 T
+(it.) 549.94 656.66 T
+( ) 558 656.66 T
+(Ho) 207 644.66 T
+(we) 218.97 644.66 T
+(v) 230.38 644.66 T
+(er) 235.23 644.66 T
+(, ) 242.6 644.66 T
+(e) 248.95 644.66 T
+(xcept ) 253.24 644.66 T
+(with ) 278.74 644.66 T
+(respect ) 300.37 644.66 T
+(to ) 332.54 644.66 T
+(Independent ) 344.16 644.66 T
+(Implementations ) 397.44 644.66 T
+(\050and ) 468.51 644.66 T
+(products ) 490.12 644.66 T
+(deri) 528.41 644.66 T
+(v) 543.71 644.66 T
+(ed) 548.56 644.66 T
+( ) 558 644.66 T
+(from ) 207 632.66 T
+(them\051 ) 231.63 632.66 T
+(that ) 260.16 632.66 T
+(satisfy ) 280.35 632.66 T
+(limitations ) 311.65 632.66 T
+(\050a\051-\050c\051 ) 359.64 632.66 T
+(from ) 390.36 632.66 T
+(the ) 414.99 632.66 T
+(pre) 432.41 632.66 T
+(vious ) 444.93 632.66 T
+(paragraph, ) 471.79 632.66 T
+(Y) 519.47 632.66 T
+(ou ) 525.59 632.66 T
+(may) 540.78 632.66 T
+( ) 558 632.66 T
+(neither: ) 207 620.66 T
+(\050a\051 ) 240.63 620.66 T
+(grant ) 254.82 620.66 T
+(or ) 278.45 620.66 T
+(otherwise ) 289.87 620.66 T
+(pass ) 331.83 620.66 T
+(through ) 352.14 620.66 T
+(to ) 386.33 620.66 T
+(your ) 397.2 620.66 T
+(licensees ) 418.61 620.66 T
+(an) 457.8 620.66 T
+(y ) 467.09 620.66 T
+(licenses ) 475.17 620.66 T
+(under ) 509.92 620.66 T
+(Sun\325) 535.77 620.66 T
+(s) 554.11 620.66 T
+( ) 558 620.66 T
+(applicable ) 207 608.66 T
+(intellectual ) 252.26 608.66 T
+(property ) 300.86 608.66 T
+(rights; ) 338.9 608.66 T
+(nor ) 368.62 608.66 T
+(\050b\051 ) 386.11 608.66 T
+(authorize ) 401.93 608.66 T
+(your ) 443.3 608.66 T
+(licensees ) 465.79 608.66 T
+(to ) 506.05 608.66 T
+(mak) 517.99 608.66 T
+(e ) 535.11 608.66 T
+(an) 543.71 608.66 T
+(y) 553 608.66 T
+( ) 558 608.66 T
+(claims ) 207 596.66 T
+(concerning ) 240.18 596.66 T
+(their ) 291.68 596.66 T
+(implementation\325) 317.09 596.66 T
+(s ) 382.65 596.66 T
+(compliance ) 393.61 596.66 T
+(with ) 446.78 596.66 T
+(the ) 471.64 596.66 T
+(Speci\336cation ) 490.93 596.66 T
+(in) 550.22 596.66 T
+( ) 558 596.66 T
+(question.) 207 584.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( 4. Reciprocity Concerning P) 207 560.66 T
+(atent Licenses.) 323.23 560.66 T
+66 571/G273997 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 207 536.66 T
+(a. ) 209.54 536.66 T
+(W) 219.02 536.66 T
+(ith ) 228.06 536.66 T
+(respect ) 241.16 536.66 T
+(to ) 272.02 536.66 T
+(an) 282.34 536.66 T
+(y ) 291.63 536.66 T
+(patent ) 299.17 536.66 T
+(claims ) 326.14 536.66 T
+(co) 354.79 536.66 T
+(v) 364.08 536.66 T
+(ered ) 368.93 536.66 T
+(by ) 388.68 536.66 T
+(the ) 401.22 536.66 T
+(license ) 415.98 536.66 T
+(granted ) 446.29 536.66 T
+(under ) 478.82 536.66 T
+(subparagraph) 504.13 536.66 T
+( ) 558 536.66 T
+66 547/G273998 FmND
+(2 ) 207 524.66 T
+(abo) 216.52 524.66 T
+(v) 230.81 524.66 T
+(e ) 235.66 524.66 T
+(that ) 244.62 524.66 T
+(w) 264.14 524.66 T
+(ould ) 271.26 524.66 T
+(be ) 293.55 524.66 T
+(infringed ) 307.51 524.66 T
+(by ) 348.69 524.66 T
+(all ) 363.21 524.66 T
+(technically ) 377.73 524.66 T
+(feasible ) 426.12 524.66 T
+(implementations ) 461.74 524.66 T
+(of ) 532.93 524.66 T
+(the) 545.78 524.66 T
+( ) 558 524.66 T
+(Speci\336cation, ) 207 512.66 T
+(such ) 265.62 512.66 T
+(license ) 287.85 512.66 T
+(is ) 319.52 512.66 T
+(conditioned ) 330.1 512.66 T
+(upon ) 381.22 512.66 T
+(your ) 405.12 512.66 T
+(of) 427.35 512.66 T
+(fering ) 435.43 512.66 T
+(on ) 463.21 512.66 T
+(f) 477.12 512.66 T
+(air) 480.35 512.66 T
+(, ) 490.5 512.66 T
+(reasonable ) 496.9 512.66 T
+(and) 543.56 512.66 T
+( ) 558 512.66 T
+(non-discriminatory ) 207 500.66 T
+(terms, ) 286.44 500.66 T
+(to ) 313.95 500.66 T
+(an) 324.51 500.66 T
+(y ) 333.8 500.66 T
+(party ) 341.59 500.66 T
+(seeking ) 364.92 500.66 T
+(it ) 398.26 500.66 T
+(from ) 406.6 500.66 T
+(Y) 428.83 500.66 T
+(ou, ) 434.95 500.66 T
+(a ) 450.23 500.66 T
+(perpetual, ) 457.45 500.66 T
+(non-e) 499.95 500.66 T
+(xclusi) 522.57 500.66 T
+(v) 546.21 500.66 T
+(e,) 551.06 500.66 T
+( ) 558 500.66 T
+(non-transferable, ) 207 488.66 T
+(w) 279.01 488.66 T
+(orldwide ) 286.13 488.66 T
+(license ) 325.66 488.66 T
+(under ) 357.41 488.66 T
+(Y) 384.16 488.66 T
+(our ) 390.28 488.66 T
+(patent ) 407.58 488.66 T
+(rights ) 436 488.66 T
+(which ) 462.76 488.66 T
+(are ) 491.18 488.66 T
+(or ) 507.37 488.66 T
+(w) 519.68 488.66 T
+(ould ) 526.8 488.66 T
+(be) 548.56 488.66 T
+( ) 558 488.66 T
+(infringed ) 207 476.66 T
+(by ) 247.5 476.66 T
+(all ) 261.34 476.66 T
+(technically ) 275.17 476.66 T
+(feasible ) 322.89 476.66 T
+(implementations ) 357.83 476.66 T
+(of ) 428.34 476.66 T
+(the ) 440.51 476.66 T
+(Speci\336cation ) 456.56 476.66 T
+(to ) 512.62 476.66 T
+(de) 524.24 476.66 T
+(v) 533.43 476.66 T
+(elop,) 538.28 476.66 T
+( ) 558 476.66 T
+(distrib) 207 464.66 T
+(ute and use a Compliant Implementation.) 232.36 464.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 207 440.66 T
+(b ) 209.98 440.66 T
+(W) 217.96 440.66 T
+(ith ) 227.01 440.66 T
+(respect ) 240.55 440.66 T
+(to ) 271.85 440.66 T
+(an) 282.61 440.66 T
+(y ) 291.9 440.66 T
+(patent ) 299.89 440.66 T
+(claims ) 327.31 440.66 T
+(o) 356.4 440.66 T
+(wned ) 361.15 440.66 T
+(by ) 385.79 440.66 T
+(Sun ) 398.77 440.66 T
+(and ) 417.32 440.66 T
+(co) 434.74 440.66 T
+(v) 444.03 440.66 T
+(ered ) 448.88 440.66 T
+(by ) 469.07 440.66 T
+(the ) 482.05 440.66 T
+(license ) 497.26 440.66 T
+(granted) 528.01 440.66 T
+( ) 558 440.66 T
+66 451/G273999 FmND
+(under ) 207 428.66 T
+(subparagraph ) 232.3 428.66 T
+(2, ) 288.7 428.66 T
+(whether ) 298.73 428.66 T
+(or ) 333.46 428.66 T
+(not ) 344.32 428.66 T
+(their ) 359.63 428.66 T
+(infringement ) 380.49 428.66 T
+(can ) 434.68 428.66 T
+(be ) 451.09 428.66 T
+(a) 463.05 428.66 T
+(v) 467.29 428.66 T
+(oided ) 472.09 428.66 T
+(in ) 496.84 428.66 T
+(a ) 507.15 428.66 T
+(technically) 514.12 428.66 T
+( ) 558 428.66 T
+(feasible ) 207 416.66 T
+(manner ) 240.62 416.66 T
+(when ) 273.13 416.66 T
+(implementing ) 297.31 416.66 T
+(the ) 355.39 416.66 T
+(Speci\336cation, ) 370.14 416.66 T
+(such ) 427.38 416.66 T
+(license ) 448.23 416.66 T
+(shall ) 478.52 416.66 T
+(terminate ) 499.93 416.66 T
+(with) 540.22 416.66 T
+( ) 558 416.66 T
+(respect ) 207 404.66 T
+(to ) 238.8 404.66 T
+(such ) 250.06 404.66 T
+(claims ) 271.86 404.66 T
+(if ) 301.45 404.66 T
+(Y) 311.04 404.66 T
+(ou ) 317.16 404.66 T
+(initiate ) 330.64 404.66 T
+(a ) 361.9 404.66 T
+(claim ) 369.82 404.66 T
+(ag) 395.51 404.66 T
+(ainst ) 404.9 404.66 T
+(Sun ) 427.27 404.66 T
+(that ) 446.31 404.66 T
+(it ) 464.79 404.66 T
+(has, ) 473.83 404.66 T
+(in ) 493.14 404.66 T
+(the ) 504.39 404.66 T
+(course ) 520.09 404.66 T
+(of) 549.67 404.66 T
+( ) 558 404.66 T
+(performing ) 207 392.66 T
+(its ) 255.96 392.66 T
+(responsibilities ) 269.38 392.66 T
+(as ) 333.91 392.66 T
+(the ) 346.21 392.66 T
+(Speci\336cation ) 362.4 392.66 T
+(Lead, ) 418.6 392.66 T
+(induced ) 445.06 392.66 T
+(an) 480.69 392.66 T
+(y ) 489.98 392.66 T
+(other ) 498.95 392.66 T
+(entity ) 523.47 392.66 T
+(to) 550.22 392.66 T
+( ) 558 392.66 T
+(infringe Y) 207 380.66 T
+(our patent rights.) 247.28 380.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 207 356.66 T
+(c ) 210.82 356.66 T
+(Also ) 219.09 356.66 T
+(with ) 241.8 356.66 T
+(respect ) 263.41 356.66 T
+(to ) 295.55 356.66 T
+(an) 307.16 356.66 T
+(y ) 316.45 356.66 T
+(patent ) 325.27 356.66 T
+(claims ) 353.54 356.66 T
+(o) 383.48 356.66 T
+(wned ) 388.23 356.66 T
+(by ) 413.71 356.66 T
+(Sun ) 427.54 356.66 T
+(and ) 446.92 356.66 T
+(co) 465.18 356.66 T
+(v) 474.48 356.66 T
+(ered ) 479.33 356.66 T
+(by ) 500.36 356.66 T
+(the ) 514.18 356.66 T
+(license) 530.23 356.66 T
+( ) 558 356.66 T
+66 367/G274000 FmND
+(granted ) 207 344.66 T
+(under ) 241.06 344.66 T
+(subparagraph ) 267.91 344.66 T
+(2 ) 325.85 344.66 T
+(abo) 334.93 344.66 T
+(v) 349.22 344.66 T
+(e, ) 354.07 344.66 T
+(where ) 365.08 344.66 T
+(the ) 393.58 344.66 T
+(infringement ) 409.88 344.66 T
+(of ) 465.61 344.66 T
+(such ) 478.02 344.66 T
+(claims ) 500.42 344.66 T
+(can ) 530.61 344.66 T
+(be) 548.56 344.66 T
+( ) 558 344.66 T
+(a) 207 332.66 T
+(v) 211.24 332.66 T
+(oided ) 216.04 332.66 T
+(in ) 242.52 332.66 T
+(a ) 254.55 332.66 T
+(technically ) 263.25 332.66 T
+(feasible ) 311.38 332.66 T
+(manner ) 346.74 332.66 T
+(when ) 380.99 332.66 T
+(implementing ) 406.9 332.66 T
+(the ) 466.72 332.66 T
+(Speci\336cation ) 483.19 332.66 T
+(such) 539.67 332.66 T
+( ) 558 332.66 T
+(license, ) 207 320.66 T
+(with ) 240.32 320.66 T
+(respect ) 261.16 320.66 T
+(to ) 292.53 320.66 T
+(such ) 303.36 320.66 T
+(claims, ) 324.74 320.66 T
+(shall ) 356.41 320.66 T
+(terminate ) 378.35 320.66 T
+(if ) 419.17 320.66 T
+(Y) 428.33 320.66 T
+(ou ) 434.45 320.66 T
+(initiate ) 447.51 320.66 T
+(a ) 478.34 320.66 T
+(claim ) 485.83 320.66 T
+(ag) 511.11 320.66 T
+(ainst ) 520.5 320.66 T
+(Sun) 542.44 320.66 T
+( ) 558 320.66 T
+(that ) 207 308.66 T
+(its ) 225.19 308.66 T
+(making, ) 237.83 308.66 T
+(ha) 273.52 308.66 T
+(ving ) 282.76 308.66 T
+(made, ) 303.72 308.66 T
+(using, ) 331.07 308.66 T
+(of) 358.43 308.66 T
+(fering ) 366.51 308.66 T
+(to ) 393.58 308.66 T
+(sell, ) 404.55 308.66 T
+(selling ) 424.13 308.66 T
+(or ) 453.98 308.66 T
+(importing ) 465.5 308.66 T
+(a ) 508.14 308.66 T
+(Compliant) 515.77 308.66 T
+( ) 558 308.66 T
+(Implementation infringes Y) 207 296.66 T
+(our patent rights.) 317 296.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 207 272.66 T
+(5. ) 211.34 272.66 T
+(De\336nitions. ) 223.18 272.66 T
+(F) 274.47 272.66 T
+(or ) 279.88 272.66 T
+(the ) 292.55 272.66 T
+(purposes ) 309.11 272.66 T
+(of ) 349.01 272.66 T
+(this ) 361.68 272.66 T
+(Agreement: ) 380.47 272.66 T
+(\322Independent ) 432.02 272.66 T
+(Implementation\323) 490.23 272.66 T
+( ) 558 272.66 T
+66 283/G274001 FmND
+(shall ) 207 260.66 T
+(mean ) 228.19 260.66 T
+(an ) 252.15 260.66 T
+(implementation ) 263.89 260.66 T
+(of ) 328.98 260.66 T
+(the ) 339.61 260.66 T
+(Speci\336cation ) 354.13 260.66 T
+(that ) 408.65 260.66 T
+(neither ) 425.95 260.66 T
+(deri) 456.02 260.66 T
+(v) 471.32 260.66 T
+(es ) 476.17 260.66 T
+(from ) 486.8 260.66 T
+(an) 508.55 260.66 T
+(y ) 517.84 260.66 T
+(of ) 525.14 260.66 T
+(Sun\325) 535.77 260.66 T
+(s) 554.11 260.66 T
+( ) 558 260.66 T
+(source ) 207 248.66 T
+(code ) 237.71 248.66 T
+(or ) 261.19 248.66 T
+(binary ) 274.12 248.66 T
+(code ) 304.28 248.66 T
+(materials ) 327.77 248.66 T
+(nor) 369.03 248.66 T
+(, ) 381.96 248.66 T
+(e) 389.07 248.66 T
+(xcept ) 393.36 248.66 T
+(with ) 419.62 248.66 T
+(an ) 442.01 248.66 T
+(appropriate ) 456.05 248.66 T
+(and ) 506.2 248.66 T
+(separate) 525.24 248.66 T
+( ) 558 248.66 T
+(license ) 207 236.66 T
+(from ) 237.15 236.66 T
+(Sun, ) 258.97 236.66 T
+(includes ) 279.41 236.66 T
+(an) 315.12 236.66 T
+(y ) 324.41 236.66 T
+(of ) 331.79 236.66 T
+(Sun\325) 342.5 236.66 T
+(s ) 360.84 236.66 T
+(source ) 367.11 236.66 T
+(code ) 395.59 236.66 T
+(or ) 416.85 236.66 T
+(binary ) 427.56 236.66 T
+(code ) 455.49 236.66 T
+(materials; ) 476.75 236.66 T
+(\322Licensor) 518.57 236.66 T
+( ) 558 236.66 T
+(Name ) 207 224.66 T
+(Space\323 ) 233.95 224.66 T
+(shall ) 265.35 224.66 T
+(mean ) 287.31 224.66 T
+(the ) 312.05 224.66 T
+(public ) 327.34 224.66 T
+(class ) 355.42 224.66 T
+(or ) 377.93 224.66 T
+(interf) 389.33 224.66 T
+(ace ) 410.89 224.66 T
+(declarations ) 427.29 224.66 T
+(whose ) 478.68 224.66 T
+(names ) 507.31 224.66 T
+(be) 535.93 224.66 T
+(gin) 545.22 224.66 T
+( ) 558 224.66 T
+(with ) 207 212.66 T
+(\322ja) 231.01 212.66 T
+(v) 242.47 212.66 T
+(a\323, ) 247.22 212.66 T
+(\322ja) 264.84 212.66 T
+(v) 276.3 212.66 T
+(ax\323, ) 281.05 212.66 T
+(\322com.sun\323 ) 303.66 212.66 T
+(or ) 352.38 212.66 T
+(their ) 366.95 212.66 T
+(equi) 391.51 212.66 T
+(v) 408.48 212.66 T
+(alents ) 413.23 212.66 T
+(in ) 442.79 212.66 T
+(an) 456.8 212.66 T
+(y ) 466.09 212.66 T
+(subsequent ) 477.33 212.66 T
+(naming) 528 212.66 T
+( ) 558 212.66 T
+(con) 207 200.66 T
+(v) 221.04 200.66 T
+(ention ) 225.89 200.66 T
+(adopted ) 254.7 200.66 T
+(by ) 290.17 200.66 T
+(Sun ) 303.98 200.66 T
+(through ) 323.35 200.66 T
+(the ) 358.27 200.66 T
+(Ja) 374.3 200.66 T
+(v) 382.43 200.66 T
+(a ) 387.18 200.66 T
+(Community ) 395.43 200.66 T
+(Process, ) 447.03 200.66 T
+(or ) 483.89 200.66 T
+(an) 496.03 200.66 T
+(y ) 505.32 200.66 T
+(recognized) 514.13 200.66 T
+( ) 558 200.66 T
+(successors ) 207 188.66 T
+(or ) 253.73 188.66 T
+(replacements ) 266.57 188.66 T
+(thereof; ) 323.85 188.66 T
+(and ) 359.47 188.66 T
+(\322T) 378.42 188.66 T
+(echnology ) 388.27 188.66 T
+(Compatibility ) 434.45 188.66 T
+(Kit\323 ) 494.54 188.66 T
+(or ) 516.27 188.66 T
+(\322TCK\323) 529.12 188.66 T
+( ) 558 188.66 T
+(shall ) 207 176.66 T
+(mean ) 228.77 176.66 T
+(the ) 253.31 176.66 T
+(test ) 268.41 176.66 T
+(suite ) 285.18 176.66 T
+(and ) 306.95 176.66 T
+(accompan) 324.27 176.66 T
+(ying ) 364.67 176.66 T
+(TCK ) 385.33 176.66 T
+(User\325) 408.21 176.66 T
+(s ) 429.87 176.66 T
+(Guide ) 436.64 176.66 T
+(pro) 463.96 176.66 T
+(vided ) 477.14 176.66 T
+(by ) 502.24 176.66 T
+(Sun ) 515.12 176.66 T
+(which) 533.56 176.66 T
+( ) 558 176.66 T
+(corresponds ) 207 164.66 T
+(to ) 258.61 164.66 T
+(the ) 269.67 164.66 T
+(Speci\336cation ) 285.18 164.66 T
+(and ) 340.68 164.66 T
+(that ) 358.41 164.66 T
+(w) 376.69 164.66 T
+(as ) 383.81 164.66 T
+(a) 395.43 164.66 T
+(v) 399.67 164.66 T
+(ailable ) 404.42 164.66 T
+(either ) 434.36 164.66 T
+(\050i\051 ) 460.42 164.66 T
+(from ) 473.14 164.66 T
+(Sun\325) 495.87 164.66 T
+(s ) 514.21 164.66 T
+(120 ) 521.38 164.66 T
+(days) 539.67 164.66 T
+( ) 558 164.66 T
+(before ) 207 152.66 T
+(the ) 237.05 152.66 T
+(\336rst ) 253.77 152.66 T
+(release ) 273.84 152.66 T
+(of ) 306.11 152.66 T
+(Y) 318.94 152.66 T
+(our ) 325.06 152.66 T
+(Independent ) 342.9 152.66 T
+(Implementation ) 396.84 152.66 T
+(that ) 464.67 152.66 T
+(allo) 484.18 152.66 T
+(ws ) 498.93 152.66 T
+(its ) 514.55 152.66 T
+(use ) 528.5 152.66 T
+(for) 546.34 152.66 T
+( ) 558 152.66 T
+(commercial ) 207 140.66 T
+(purposes, ) 256.94 140.66 T
+(or ) 297.72 140.66 T
+(\050ii\051 ) 308.78 140.66 T
+(more ) 323.73 140.66 T
+(recently ) 347.01 140.66 T
+(than ) 381.95 140.66 T
+(120 ) 401.9 140.66 T
+(days ) 419.63 140.66 T
+(from ) 440.69 140.66 T
+(such ) 462.86 140.66 T
+(release ) 483.92 140.66 T
+(b) 514.41 140.66 T
+(ut ) 519.21 140.66 T
+(ag) 529.72 140.66 T
+(ainst) 539.11 140.66 T
+( ) 558 140.66 T
+(which Y) 207 128.66 T
+(ou elect to test Y) 240.06 128.66 T
+(our implementation of the Speci\336cation.) 306.73 128.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 207 104.66 T
+(This ) 209.73 104.66 T
+(Agreement ) 230.24 104.66 T
+(will ) 277.4 104.66 T
+(terminate ) 295.69 104.66 T
+(immediately ) 336.19 104.66 T
+(without ) 388.92 104.66 T
+(notice ) 422.2 104.66 T
+(from ) 449.37 104.66 T
+(Sun ) 471.54 104.66 T
+(if ) 489.83 104.66 T
+(you ) 498.67 104.66 T
+(breach ) 516.4 104.66 T
+(the) 545.78 104.66 T
+( ) 558 104.66 T
+66 115/G274002 FmND
+(Agreement or act outside the scope of the licenses granted abo) 207 92.66 T
+(v) 456.79 92.66 T
+(e.) 461.64 92.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299117 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "3" 3
+%%Page: "4" 4
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.4/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(4) 54 60.29 T
+0 9 Q
+( of) 59.56 60.29 T
+0 10 Q
+( 21) 70.56 60.29 T
+[/EMC FmPD4
+[/StoreName /P299117 /StRetrieve FmPD4
+[/StoreName /P299117 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+( DISCLAIMER OF W) 189 680.66 T
+(ARRANTIES) 278.63 680.66 T
+48 691/G274003 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 189 656.66 T
+(THE ) 199.95 656.66 T
+(SPECIFICA) 230.34 656.66 T
+(TION ) 279.24 656.66 T
+(IS ) 314.07 656.66 T
+(PR) 333.91 656.66 T
+(O) 345.74 656.66 T
+(VIDED ) 352.46 656.66 T
+(\322) 394.51 656.66 T
+(AS ) 398.15 656.66 T
+(IS\323. ) 421.88 656.66 T
+(SUN ) 448.66 656.66 T
+(MAKES ) 479.61 656.66 T
+(NO) 525.56 656.66 T
+( ) 540 656.66 T
+48 667/G274004 FmND
+(REPRESENT) 189 644.66 T
+(A) 244.19 644.66 T
+(TIONS ) 250.3 644.66 T
+(OR ) 287.11 644.66 T
+(W) 308.38 644.66 T
+(ARRANTIES, ) 316.62 644.66 T
+(EITHER ) 382.6 644.66 T
+(EXPRESS ) 425.52 644.66 T
+(OR ) 475.69 644.66 T
+(IMPLIED,) 496.95 644.66 T
+( ) 540 644.66 T
+(INCLUDING ) 189 632.66 T
+(B) 248.13 632.66 T
+(UT ) 254.7 632.66 T
+(NO) 271.63 632.66 T
+(T ) 285.67 632.66 T
+(LIMITED ) 295.37 632.66 T
+(T) 340.06 632.66 T
+(O, ) 345.99 632.66 T
+(W) 359.3 632.66 T
+(ARRANTIES ) 367.54 632.66 T
+(OF ) 427.25 632.66 T
+(MERCHANT) 443.62 632.66 T
+(ABILITY) 498.8 632.66 T
+(,) 537.5 632.66 T
+( ) 540 632.66 T
+(FITNESS ) 189 620.66 T
+(FOR ) 231.51 620.66 T
+(A ) 254.02 620.66 T
+(P) 264.3 620.66 T
+(AR) 268.95 620.66 T
+(TICULAR ) 282.23 620.66 T
+(PURPOSE, ) 328.63 620.66 T
+(NON-INFRINGEMENT ) 378.09 620.66 T
+(\050INCLUDING) 481.13 620.66 T
+( ) 540 620.66 T
+(AS ) 189 608.66 T
+(A ) 206.43 608.66 T
+(CONSEQ) 218.31 608.66 T
+(UENCE ) 258.21 608.66 T
+(OF ) 296.19 608.66 T
+(ANY ) 313.63 608.66 T
+(PRA) 339.94 608.66 T
+(CTICE ) 358.99 608.66 T
+(OR ) 392.54 608.66 T
+(IMPLEMENT) 411.08 608.66 T
+(A) 468.48 608.66 T
+(TION ) 474.59 608.66 T
+(OF ) 503.12 608.66 T
+(THE) 520.56 608.66 T
+( ) 540 608.66 T
+(SPECIFICA) 189 596.66 T
+(TION\051, ) 237.9 596.66 T
+(OR ) 272.15 596.66 T
+(THA) 290.57 596.66 T
+(T ) 310.01 596.66 T
+(THE ) 320.66 596.66 T
+(CONTENTS ) 344.64 596.66 T
+(OF ) 401.39 596.66 T
+(THE ) 418.71 596.66 T
+(SPECIFICA) 442.68 596.66 T
+(TION ) 491.58 596.66 T
+(ARE) 520 596.66 T
+( ) 540 596.66 T
+(SUIT) 189 584.66 T
+(ABLE ) 210.29 584.66 T
+(FOR ) 239.03 584.66 T
+(ANY ) 261.1 584.66 T
+(PURPOSE. ) 285.39 584.66 T
+(This ) 334.41 584.66 T
+(document ) 354.82 584.66 T
+(does ) 396.89 584.66 T
+(not ) 417.84 584.66 T
+(represent ) 433.25 584.66 T
+(an) 472.52 584.66 T
+(y ) 481.81 584.66 T
+(commitment) 489.44 584.66 T
+( ) 540 584.66 T
+(to ) 189 572.66 T
+(release ) 199.46 572.66 T
+(or ) 229.89 572.66 T
+(implement ) 240.9 572.66 T
+(an) 286.35 572.66 T
+(y ) 295.64 572.66 T
+(portion ) 303.32 572.66 T
+(of ) 334.88 572.66 T
+(the ) 345.89 572.66 T
+(Speci\336cation ) 360.78 572.66 T
+(in ) 415.67 572.66 T
+(an) 426.13 572.66 T
+(y ) 435.42 572.66 T
+(product. ) 443.1 572.66 T
+(In ) 478.82 572.66 T
+(addition, ) 489.83 572.66 T
+(the) 527.78 572.66 T
+( ) 540 572.66 T
+(Speci\336cation could include technical inaccuracies or typographical errors.) 189 560.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( LIMIT) 189 536.66 T
+(A) 218.34 536.66 T
+(TION OF LIABILITY) 224.45 536.66 T
+48 547/G274005 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 189 512.66 T
+(T) 192.57 512.66 T
+(O ) 198.5 512.66 T
+(THE ) 209.28 512.66 T
+(EXTENT ) 232.29 512.66 T
+(NO) 274.73 512.66 T
+(T ) 288.77 512.66 T
+(PR) 298.45 512.66 T
+(OHIBITED ) 310.28 512.66 T
+(BY ) 361.06 512.66 T
+(LA) 378.51 512.66 T
+(W) 390.94 512.66 T
+(, ) 399.46 512.66 T
+(IN ) 405.53 512.66 T
+(NO ) 419.64 512.66 T
+(EVENT ) 437.65 512.66 T
+(WILL ) 473.99 512.66 T
+(SUN ) 502.54 512.66 T
+(OR) 526.11 512.66 T
+( ) 540 512.66 T
+48 523/G274006 FmND
+(ITS ) 189 500.66 T
+(LICENSORS ) 208.85 500.66 T
+(BE ) 268.14 500.66 T
+(LIABLE ) 285.77 500.66 T
+(FOR ) 326.17 500.66 T
+(ANY ) 350.47 500.66 T
+(D) 376.98 500.66 T
+(AMA) 383.8 500.66 T
+(GES, ) 406.73 500.66 T
+(INCLUDING ) 432.96 500.66 T
+(WITHOUT) 493.35 500.66 T
+( ) 540 500.66 T
+(LIMIT) 189 488.66 T
+(A) 215.84 488.66 T
+(TION, ) 221.95 488.66 T
+(LOST ) 255.8 488.66 T
+(REVENUE, ) 288.27 488.66 T
+(PR) 344.91 488.66 T
+(OFITS ) 356.74 488.66 T
+(OR ) 391.99 488.66 T
+(D) 413.35 488.66 T
+(A) 420.17 488.66 T
+(T) 426.28 488.66 T
+(A, ) 431.46 488.66 T
+(OR ) 448.65 488.66 T
+(FOR ) 470.02 488.66 T
+(SPECIAL,) 496.94 488.66 T
+( ) 540 488.66 T
+(INDIRECT) 189 476.66 T
+(, ) 234.92 476.66 T
+(CONSEQ) 246.64 476.66 T
+(UENTIAL, ) 286.54 476.66 T
+(INCIDENT) 341.59 476.66 T
+(AL ) 387.87 476.66 T
+(OR ) 410.42 476.66 T
+(PUNITIVE ) 433.54 476.66 T
+(D) 488.86 476.66 T
+(AMA) 495.68 476.66 T
+(GES,) 518.61 476.66 T
+( ) 540 476.66 T
+(HO) 189 464.66 T
+(WEVER ) 203.09 464.66 T
+(CA) 243.67 464.66 T
+(USED ) 257.01 464.66 T
+(AND ) 288.15 464.66 T
+(REGARDLESS ) 314.85 464.66 T
+(OF ) 384.33 464.66 T
+(THE ) 402.14 464.66 T
+(THEOR) 426.61 464.66 T
+(Y ) 459.3 464.66 T
+(OF ) 471.55 464.66 T
+(LIABILITY) 489.36 464.66 T
+(,) 537.5 464.66 T
+( ) 540 464.66 T
+(ARISING ) 189 452.66 T
+(OUT ) 237.87 452.66 T
+(OF ) 266.74 452.66 T
+(OR ) 287.84 452.66 T
+(RELA) 310.05 452.66 T
+(TED ) 335.05 452.66 T
+(IN ) 362.8 452.66 T
+(ANY ) 381.67 452.66 T
+(W) 411.65 452.66 T
+(A) 419.89 452.66 T
+(Y ) 426.06 452.66 T
+(T) 441.6 452.66 T
+(O ) 447.53 452.66 T
+(Y) 463.07 452.66 T
+(OUR ) 469.99 452.66 T
+(HA) 499.42 452.66 T
+(VING,) 512.51 452.66 T
+( ) 540 452.66 T
+(IMPLEMENTING ) 189 440.66 T
+(OR ) 268.02 440.66 T
+(O) 284.83 440.66 T
+(THER) 291.65 440.66 T
+(WISE ) 317.21 440.66 T
+(USING ) 344.57 440.66 T
+(THE ) 378.05 440.66 T
+(SPECIFICA) 400.41 440.66 T
+(TION, ) 449.31 440.66 T
+(EVEN ) 478.61 440.66 T
+(IF ) 508.19 440.66 T
+(SUN) 520 440.66 T
+( ) 540 440.66 T
+(AND/OR ) 189 428.66 T
+(ITS ) 232.02 428.66 T
+(LICENSORS ) 251.71 428.66 T
+(HA) 310.85 428.66 T
+(VE ) 323.94 428.66 T
+(BEEN ) 341.96 428.66 T
+(AD) 372.76 428.66 T
+(VISED ) 386.8 428.66 T
+(OF ) 420.93 428.66 T
+(THE ) 438.4 428.66 T
+(POSSIBILITY ) 462.53 428.66 T
+(OF) 527.22 428.66 T
+( ) 540 428.66 T
+(SUCH D) 189 416.66 T
+(AMA) 224.99 416.66 T
+(GES.) 247.92 416.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Y) 189 392.66 T
+(ou ) 195.12 392.66 T
+(will ) 208.51 392.66 T
+(indemnify) 227.46 392.66 T
+(, ) 267.92 392.66 T
+(hold ) 273.8 392.66 T
+(harmless, ) 294.97 392.66 T
+(and ) 336.41 392.66 T
+(defend ) 354.24 392.66 T
+(Sun ) 384.83 392.66 T
+(and ) 403.78 392.66 T
+(its ) 421.61 392.66 T
+(licensors ) 434.45 392.66 T
+(from ) 473.38 392.66 T
+(an) 496.21 392.66 T
+(y ) 505.5 392.66 T
+(claims) 513.89 392.66 T
+( ) 540 392.66 T
+48 403/G274007 FmND
+(arising ) 189 380.66 T
+(or ) 218.97 380.66 T
+(resulting ) 230.05 380.66 T
+(from: ) 267.8 380.66 T
+(\050i\051 ) 292.77 380.66 T
+(your ) 304.95 380.66 T
+(use ) 326.03 380.66 T
+(of ) 342.11 380.66 T
+(the ) 353.19 380.66 T
+(Speci\336cation; ) 368.16 380.66 T
+(\050ii\051 ) 425.91 380.66 T
+(the ) 440.88 380.66 T
+(use ) 455.84 380.66 T
+(or ) 471.92 380.66 T
+(distrib) 483 380.66 T
+(ution ) 508.36 380.66 T
+(of) 531.67 380.66 T
+( ) 540 380.66 T
+(your ) 189 368.66 T
+(Ja) 210.89 368.66 T
+(v) 219.02 368.66 T
+(a ) 223.77 368.66 T
+(application, ) 231.77 368.66 T
+(applet ) 282.27 368.66 T
+(and/or ) 310.26 368.66 T
+(implementation; ) 339.37 368.66 T
+(and/or ) 408.49 368.66 T
+(\050iii\051 ) 437.6 368.66 T
+(an) 456.15 368.66 T
+(y ) 465.45 368.66 T
+(claims ) 474 368.66 T
+(that ) 503.67 368.66 T
+(later) 522.23 368.66 T
+( ) 540 368.66 T
+(v) 189 356.66 T
+(ersions ) 193.85 356.66 T
+(or ) 226.18 356.66 T
+(releases ) 238.51 356.66 T
+(of ) 274.17 356.66 T
+(an) 286.5 356.66 T
+(y ) 295.79 356.66 T
+(Speci\336cation ) 304.79 356.66 T
+(furnished ) 361.01 356.66 T
+(to ) 402.78 356.66 T
+(you ) 414.56 356.66 T
+(are ) 433.57 356.66 T
+(incompatible ) 449.78 356.66 T
+(with ) 506 356.66 T
+(the) 527.78 356.66 T
+( ) 540 356.66 T
+(Speci\336cation pro) 189 344.66 T
+(vided to you under this license.) 256.9 344.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( RESTRICTED RIGHTS LEGEND) 189 320.66 T
+48 331/G274008 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 189 296.66 T
+(U.S. ) 192.5 296.66 T
+(Go) 213.77 296.66 T
+(v) 225.84 296.66 T
+(ernment: ) 230.69 296.66 T
+(If ) 269.74 296.66 T
+(this ) 279.9 296.66 T
+(Speci\336cation ) 297.84 296.66 T
+(is ) 353.56 296.66 T
+(being ) 363.73 296.66 T
+(acquired ) 389.44 296.66 T
+(by ) 427.37 296.66 T
+(or ) 440.87 296.66 T
+(on ) 452.69 296.66 T
+(behalf ) 466.19 296.66 T
+(of ) 494.68 296.66 T
+(the ) 506.5 296.66 T
+(U.S.) 522.22 296.66 T
+( ) 540 296.66 T
+48 307/G274009 FmND
+(Go) 189 284.66 T
+(v) 201.07 284.66 T
+(ernment ) 205.92 284.66 T
+(or ) 242.06 284.66 T
+(by ) 253.76 284.66 T
+(a ) 267.13 284.66 T
+(U.S. ) 274.94 284.66 T
+(Go) 296.09 284.66 T
+(v) 308.16 284.66 T
+(ernment ) 313.01 284.66 T
+(prime ) 349.15 284.66 T
+(contractor ) 375.85 284.66 T
+(or ) 419.76 284.66 T
+(subcontractor ) 431.46 284.66 T
+(\050at ) 489.26 284.66 T
+(an) 503.18 284.66 T
+(y ) 512.47 284.66 T
+(tier\051,) 520.84 284.66 T
+( ) 540 284.66 T
+(then ) 189 272.66 T
+(the ) 208.59 272.66 T
+(Go) 223.18 272.66 T
+(v) 235.24 272.66 T
+(ernment\325) 240.1 272.66 T
+(s ) 275.64 272.66 T
+(rights ) 281.9 272.66 T
+(in ) 307.05 272.66 T
+(the ) 317.2 272.66 T
+(Softw) 331.78 272.66 T
+(are ) 355.57 272.66 T
+(and ) 370.15 272.66 T
+(accompan) 386.96 272.66 T
+(ying ) 427.35 272.66 T
+(documentation ) 447.49 272.66 T
+(shall ) 509.3 272.66 T
+(be) 530.56 272.66 T
+( ) 540 272.66 T
+(only ) 189 260.66 T
+(as ) 209.83 260.66 T
+(set ) 221.2 260.66 T
+(forth ) 235.36 260.66 T
+(in ) 257.85 260.66 T
+(this ) 268.67 260.66 T
+(license; ) 286.17 260.66 T
+(this ) 319.77 260.66 T
+(is ) 337.26 260.66 T
+(in ) 346.98 260.66 T
+(accordance ) 357.81 260.66 T
+(with ) 405.82 260.66 T
+(48 ) 426.65 260.66 T
+(C.F) 439.7 260.66 T
+(.R. ) 453.63 260.66 T
+(227.7201 ) 468.34 260.66 T
+(through) 508.89 260.66 T
+( ) 540 260.66 T
+(227.7202-4 ) 189 248.66 T
+(\050for ) 237.95 248.66 T
+(Department ) 256.07 248.66 T
+(of ) 306.4 248.66 T
+(Defense ) 317.85 248.66 T
+(\050DoD\051 ) 353.73 248.66 T
+(acquisitions\051 ) 382.96 248.66 T
+(and ) 437.19 248.66 T
+(with ) 454.75 248.66 T
+(48 ) 475.65 248.66 T
+(C.F) 488.78 248.66 T
+(.R. ) 502.71 248.66 T
+(2.101) 517.5 248.66 T
+( ) 540 248.66 T
+(and 12.212 \050for non-DoD acquisitions\051.) 189 236.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( REPOR) 189 212.66 T
+(T) 223.13 212.66 T
+48 223/G274010 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 189 188.66 T
+(If ) 192.86 188.66 T
+(you ) 203.38 188.66 T
+(pro) 222.24 188.66 T
+(vide ) 235.42 188.66 T
+(Sun ) 256.5 188.66 T
+(with ) 275.92 188.66 T
+(an) 297.57 188.66 T
+(y ) 306.86 188.66 T
+(comments ) 315.72 188.66 T
+(or ) 360.69 188.66 T
+(suggestions ) 372.88 188.66 T
+(concerning ) 423.41 188.66 T
+(the ) 471.7 188.66 T
+(Speci\336cation) 487.78 188.66 T
+( ) 540 188.66 T
+48 199/G274011 FmND
+(\050\322Feedback\323\051, ) 189 176.66 T
+(you ) 247.66 176.66 T
+(hereby: ) 264.97 176.66 T
+(\050i\051 ) 297.26 176.66 T
+(agree ) 309 176.66 T
+(that ) 332.96 176.66 T
+(such ) 350.26 176.66 T
+(Feedback ) 370.89 176.66 T
+(is ) 411.52 176.66 T
+(pro) 420.49 176.66 T
+(vided ) 433.67 176.66 T
+(on ) 458.19 176.66 T
+(a ) 470.5 176.66 T
+(non-proprietary) 477.24 176.66 T
+( ) 540 176.66 T
+(and ) 189 164.66 T
+(non-con\336dential ) 207.28 164.66 T
+(basis, ) 276.66 164.66 T
+(and ) 303 164.66 T
+(\050ii\051 ) 321.28 164.66 T
+(grant ) 337.33 164.66 T
+(Sun ) 361.72 164.66 T
+(a ) 381.12 164.66 T
+(perpetual, ) 389.4 164.66 T
+(non-e) 432.94 164.66 T
+(xclusi) 455.56 164.66 T
+(v) 479.2 164.66 T
+(e, ) 484.05 164.66 T
+(w) 494.83 164.66 T
+(orldwide,) 501.95 164.66 T
+( ) 540 164.66 T
+(fully ) 189 152.66 T
+(paid-up, ) 210.41 152.66 T
+(irre) 245.98 152.66 T
+(v) 259.61 152.66 T
+(ocable ) 264.41 152.66 T
+(license, ) 293.02 152.66 T
+(with ) 325.81 152.66 T
+(the ) 346.11 152.66 T
+(right ) 360.85 152.66 T
+(to ) 382.26 152.66 T
+(sublicense ) 392.56 152.66 T
+(through ) 436.73 152.66 T
+(multiple ) 470.36 152.66 T
+(le) 506.22 152.66 T
+(v) 513.19 152.66 T
+(els ) 518.04 152.66 T
+(of) 531.67 152.66 T
+( ) 540 152.66 T
+(sublicensees, ) 189 140.66 T
+(to ) 244.6 140.66 T
+(incorporate, ) 255.5 140.66 T
+(disclose, ) 306.65 140.66 T
+(and ) 344.48 140.66 T
+(use ) 362.04 140.66 T
+(without ) 378.48 140.66 T
+(limitation ) 412.15 140.66 T
+(the ) 454.17 140.66 T
+(Feedback ) 469.5 140.66 T
+(for ) 510.94 140.66 T
+(an) 525.71 140.66 T
+(y) 535 140.66 T
+( ) 540 140.66 T
+(purpose.) 189 128.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( GENERAL TERMS) 189 104.66 T
+48 115/G274012 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299171 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "4" 4
+%%Page: "5" 5
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.5/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(5) 527.82 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+[/EMC FmPD4
+[/StoreName /P299171 /StRetrieve FmPD4
+[/StoreName /P299171 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+( ) 207 680.66 T
+(An) 212.73 680.66 T
+(y ) 224.79 680.66 T
+(action ) 235.52 680.66 T
+(related ) 265.69 680.66 T
+(to ) 298.62 680.66 T
+(this ) 312.13 680.66 T
+(Agreement ) 332.3 680.66 T
+(will ) 382.46 680.66 T
+(be ) 403.74 680.66 T
+(go) 418.91 680.66 T
+(v) 428.76 680.66 T
+(erned ) 433.61 680.66 T
+(by ) 461.54 680.66 T
+(California ) 477.27 680.66 T
+(la) 523.54 680.66 T
+(w ) 530.61 680.66 T
+(and) 543.56 680.66 T
+( ) 558 680.66 T
+66 691/G274013 FmND
+(controlling ) 207 668.66 T
+(U.S. ) 254.03 668.66 T
+(federal ) 274.95 668.66 T
+(la) 305.85 668.66 T
+(w) 312.92 668.66 T
+(. ) 319.49 668.66 T
+(The ) 325.13 668.66 T
+(U.N. ) 343.82 668.66 T
+(Con) 366.4 668.66 T
+(v) 382.67 668.66 T
+(ention ) 387.52 668.66 T
+(for ) 415.66 668.66 T
+(the ) 430.46 668.66 T
+(International ) 445.82 668.66 T
+(Sale ) 500.06 668.66 T
+(of ) 520.42 668.66 T
+(Goods) 531.89 668.66 T
+( ) 558 668.66 T
+(and the choice of la) 207 656.66 T
+(w rules of an) 285.16 656.66 T
+(y jurisdiction will not apply) 336.94 656.66 T
+(.) 447.41 656.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 207 632.66 T
+(The ) 209.49 632.66 T
+(Speci\336cation ) 227.53 632.66 T
+(is ) 282.24 632.66 T
+(subject ) 291.39 632.66 T
+(to ) 322.21 632.66 T
+(U.S. ) 332.48 632.66 T
+(e) 352.75 632.66 T
+(xport ) 357.04 632.66 T
+(control ) 380.64 632.66 T
+(la) 411.46 632.66 T
+(ws ) 418.53 632.66 T
+(and ) 432.13 632.66 T
+(may ) 449.06 632.66 T
+(be ) 468.77 632.66 T
+(subject ) 480.69 632.66 T
+(to ) 511.51 632.66 T
+(e) 521.78 632.66 T
+(xport ) 526.07 632.66 T
+(or) 549.67 632.66 T
+( ) 558 632.66 T
+66 643/G274014 FmND
+(import ) 207 620.66 T
+(re) 236.99 620.66 T
+(gulations ) 244.61 620.66 T
+(in ) 284.59 620.66 T
+(other ) 295.69 620.66 T
+(countries. ) 319.56 620.66 T
+(Licensee ) 362.03 620.66 T
+(agrees ) 400.89 620.66 T
+(to ) 429.75 620.66 T
+(comply ) 440.84 620.66 T
+(strictly ) 474.16 620.66 T
+(with ) 505.26 620.66 T
+(all ) 526.35 620.66 T
+(such) 539.67 620.66 T
+( ) 558 620.66 T
+(la) 207 608.66 T
+(ws ) 214.07 608.66 T
+(and ) 229.48 608.66 T
+(re) 248.22 608.66 T
+(gulations ) 255.84 608.66 T
+(and ) 296.8 608.66 T
+(ackno) 315.54 608.66 T
+(wledges ) 339.17 608.66 T
+(that ) 376.24 608.66 T
+(it ) 395.54 608.66 T
+(has ) 405.4 608.66 T
+(the ) 423.03 608.66 T
+(responsibility ) 439.55 608.66 T
+(to ) 498.29 608.66 T
+(obtain ) 510.37 608.66 T
+(such) 539.67 608.66 T
+( ) 558 608.66 T
+(licenses to e) 207 596.66 T
+(xport, re-e) 255.73 596.66 T
+(xport or import as may be required after deli) 297.23 596.66 T
+(v) 474.72 596.66 T
+(ery to Licensee.) 479.57 596.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 207 572.66 T
+(This ) 212.06 572.66 T
+(Agreement ) 234.9 572.66 T
+(is ) 284.39 572.66 T
+(the ) 296.12 572.66 T
+(parties\325 ) 313.4 572.66 T
+(entire ) 348.45 572.66 T
+(agreement ) 376.27 572.66 T
+(relating ) 422.98 572.66 T
+(to ) 458.59 572.66 T
+(its ) 471.43 572.66 T
+(subject ) 485.94 572.66 T
+(matter) 519.33 572.66 T
+(. ) 544.33 572.66 T
+(It) 551.89 572.66 T
+( ) 558 572.66 T
+66 583/G274015 FmND
+(supersedes ) 207 560.66 T
+(all ) 254.51 560.66 T
+(prior ) 268.7 560.66 T
+(or ) 292.33 560.66 T
+(contemporaneous ) 304.85 560.66 T
+(oral ) 379.58 560.66 T
+(or ) 399.33 560.66 T
+(written ) 411.85 560.66 T
+(communications, ) 444.37 560.66 T
+(proposals,) 517.17 560.66 T
+( ) 558 560.66 T
+(conditions, ) 207 548.66 T
+(representations ) 258.04 548.66 T
+(and ) 325.45 548.66 T
+(w) 346.76 548.66 T
+(arranties ) 353.88 548.66 T
+(and ) 395.18 548.66 T
+(pre) 416.49 548.66 T
+(v) 429.01 548.66 T
+(ails ) 433.76 548.66 T
+(o) 454.52 548.66 T
+(v) 459.37 548.66 T
+(er ) 464.22 548.66 T
+(an) 478.86 548.66 T
+(y ) 488.15 548.66 T
+(con\337icting ) 500.02 548.66 T
+(or) 549.67 548.66 T
+( ) 558 548.66 T
+(additional ) 207 536.66 T
+(terms ) 249.32 536.66 T
+(of ) 273.87 536.66 T
+(an) 284.52 536.66 T
+(y ) 293.82 536.66 T
+(quote, ) 301.14 536.66 T
+(order) 328.18 536.66 T
+(, ) 348.89 536.66 T
+(ackno) 353.71 536.66 T
+(wledgment, ) 377.34 536.66 T
+(or ) 426.61 536.66 T
+(other ) 437.26 536.66 T
+(communication ) 460.14 536.66 T
+(between) 524.68 536.66 T
+( ) 558 536.66 T
+(the ) 207 524.66 T
+(parties ) 224.75 524.66 T
+(relating ) 256.94 524.66 T
+(to ) 293.02 524.66 T
+(its ) 306.32 524.66 T
+(subject ) 321.3 524.66 T
+(matter ) 355.16 524.66 T
+(during ) 386.24 524.66 T
+(the ) 417.88 524.66 T
+(term ) 435.63 524.66 T
+(of ) 459.48 524.66 T
+(this ) 473.34 524.66 T
+(Agreement. ) 493.32 524.66 T
+(No) 545.78 524.66 T
+( ) 558 524.66 T
+(modi\336cation ) 207 512.66 T
+(to ) 261.72 512.66 T
+(this ) 273.66 512.66 T
+(Agreement ) 292.27 512.66 T
+(will ) 340.85 512.66 T
+(be ) 360.57 512.66 T
+(binding, ) 374.17 512.66 T
+(unless ) 411.39 512.66 T
+(in ) 440.55 512.66 T
+(writing ) 452.49 512.66 T
+(and ) 485.54 512.66 T
+(signed ) 504.13 512.66 T
+(by ) 534.4 512.66 T
+(an) 548.56 512.66 T
+( ) 558 512.66 T
+(authorized representati) 207 500.66 T
+(v) 298.11 500.66 T
+(e of each party) 302.96 500.66 T
+(.) 361.45 500.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+66 487/G274016 FmND
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+( Re) 207 452.66 T
+(v) 220.36 452.66 T
+(. April, 2006) 224.71 452.66 T
+66 463/G274017 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Sun/Final/Full) 207 428.66 T
+66 439/G274018 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+66 415/G274019 FmND
+[/StoreName /P299180 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "5" 5
+%%Page: "6" 6
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.6/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Over) 189 739.85 T
+(vie) 209.6 739.85 T
+(w) 221.98 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(6) 54 60.29 T
+0 9 Q
+( of) 59.56 60.29 T
+0 10 Q
+( 21) 70.56 60.29 T
+54 672.33 540 675.33 C
+0 0 0 1 0 0 0 1 K
+189 674.48 540 674.48 2 L
+0.25 H
+2 Z
+0 X
+N
+54 674.48 180 674.48 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StoreName /P299180 /StRetrieve FmPD4
+[/StPop FmPD4
+[/_objdef {PS192583} /type /dict /OBJ FmPD4
+[{PS192583} <</O /Layout /SpaceAfter 8 /SpaceBefore 23 /StartIndent 135 /EndIndent 59.3 >> /PUT FmPD4
+[/SP192583 {PS192583} /StClassMap FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(1.0) 163.32 679.33 T
+(Over) 189 679.33 T
+(vie) 216.47 679.33 T
+(w) 232.97 679.33 T
+48 691/G273802 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Ja) 189 649.93 T
+(v) 197.13 649.93 T
+(aBeans) 201.88 649.93 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3751 /StPNE FmPD4
+[/StBMC FmPD4
+1 7.2 Q
+(\252) 230.76 653.53 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+( ) 237.82 649.93 T
+(is ) 244.53 649.93 T
+(pro) 257.92 649.93 T
+(ving ) 271.1 649.93 T
+(to ) 295.59 649.93 T
+(be ) 310.09 649.93 T
+(a ) 326.24 649.93 T
+(popular ) 337.39 649.93 T
+(technology) 374.66 649.93 T
+(. ) 418.45 649.93 T
+(As ) 427.67 649.93 T
+(more ) 445.49 649.93 T
+(people ) 472.76 649.93 T
+(embrace) 506.13 649.93 T
+( ) 540 649.93 T
+48 662/G273411 FmND
+(Ja) 189 637.93 T
+(v) 197.13 637.93 T
+(aBeans\252 ) 201.88 637.93 T
+(and ) 244.97 637.93 T
+(the ) 263.83 637.93 T
+(Ja) 280.46 637.93 T
+(v) 288.59 637.93 T
+(a\252 ) 293.34 637.93 T
+(platform, ) 312 637.93 T
+(some ) 353.35 637.93 T
+(of ) 378.87 637.93 T
+(the ) 391.62 637.93 T
+(en) 408.25 637.93 T
+(vironment\325) 417.29 637.93 T
+(s ) 461.18 637.93 T
+(shortcomings ) 469.49 637.93 T
+(are) 527.79 637.93 T
+( ) 540 637.93 T
+(brought ) 189 625.93 T
+(to ) 223.57 625.93 T
+(light. ) 234.82 625.93 T
+(Ja) 259.12 625.93 T
+(v) 267.25 625.93 T
+(aBeans\252 ) 272 625.93 T
+(w) 314.14 625.93 T
+(as ) 321.26 625.93 T
+(meant ) 333.05 625.93 T
+(to ) 360.95 625.93 T
+(satisfy ) 372.2 625.93 T
+(needs ) 401.77 625.93 T
+(in ) 428 625.93 T
+(b) 439.24 625.93 T
+(uilder ) 444.05 625.93 T
+(and ) 470.84 625.93 T
+(de) 488.74 625.93 T
+(v) 497.93 625.93 T
+(elopment) 502.78 625.93 T
+( ) 540 625.93 T
+(en) 189 613.93 T
+(vironments ) 198.04 613.93 T
+(b) 248.1 613.93 T
+(ut ) 252.9 613.93 T
+(its ) 265.74 613.93 T
+(capabilities ) 280.25 613.93 T
+(f) 330.86 613.93 T
+(all ) 334.09 613.93 T
+(short ) 349.15 613.93 T
+(of ) 374.21 613.93 T
+(those ) 387.6 613.93 T
+(needed ) 413.77 613.93 T
+(to ) 447.15 613.93 T
+(deplo) 459.99 613.93 T
+(y ) 482.11 613.93 T
+(stand ) 492.17 613.93 T
+(alone) 518.34 613.93 T
+( ) 540 613.93 T
+(components as content editing and creating entities.) 189 601.93 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Neither ) 189 577.93 T
+(Ja) 223.06 577.93 T
+(v) 231.19 577.93 T
+(aBeans\252 ) 235.94 577.93 T
+(nor ) 278.68 577.93 T
+(the ) 296.08 577.93 T
+(Ja) 312.36 577.93 T
+(v) 320.49 577.93 T
+(a\252 ) 325.24 577.93 T
+(platform ) 343.55 577.93 T
+(de\336ne ) 382.06 577.93 T
+(a ) 410.56 577.93 T
+(consistent ) 419.07 577.93 T
+(strate) 463.14 577.93 T
+(gy ) 484.65 577.93 T
+(for ) 498.71 577.93 T
+(typing) 514.44 577.93 T
+( ) 540 577.93 T
+48 588/G273412 FmND
+(data, ) 189 565.93 T
+(a ) 211.97 565.93 T
+(method ) 220.21 565.93 T
+(for ) 254.02 565.93 T
+(determining ) 269.49 565.93 T
+(the ) 321.63 565.93 T
+(supported ) 337.66 565.93 T
+(data ) 380.9 565.93 T
+(types ) 401.37 565.93 T
+(of ) 426.29 565.93 T
+(a ) 438.43 565.93 T
+(softw) 446.67 565.93 T
+(are ) 468.8 565.93 T
+(component, ) 484.81 565.93 T
+(a) 535.56 565.93 T
+( ) 540 565.93 T
+(method ) 189 553.93 T
+(for ) 222.21 553.93 T
+(binding ) 237.09 553.93 T
+(typed ) 270.86 553.93 T
+(data ) 296.29 553.93 T
+(to ) 316.16 553.93 T
+(a ) 327.15 553.93 T
+(component, ) 334.81 553.93 T
+(or ) 384.96 553.93 T
+(an ) 396.5 553.93 T
+(architecture ) 409.15 553.93 T
+(and ) 459.57 553.93 T
+(implementation) 477.22 553.93 T
+( ) 540 553.93 T
+(that supports these features. ) 189 541.93 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Presumably ) 189 517.93 T
+(with ) 240.59 517.93 T
+(these ) 262.73 517.93 T
+(pieces ) 287.65 517.93 T
+(in ) 317.01 517.93 T
+(place, ) 329.16 517.93 T
+(a ) 357.12 517.93 T
+(de) 365.93 517.93 T
+(v) 375.12 517.93 T
+(eloper ) 379.97 517.93 T
+(can ) 409.33 517.93 T
+(write ) 427.58 517.93 T
+(a ) 452.49 517.93 T
+(Ja) 461.3 517.93 T
+(v) 469.43 517.93 T
+(aBeans\252 ) 474.18 517.93 T
+(based) 517.23 517.93 T
+( ) 540 517.93 T
+48 528/G273413 FmND
+(component ) 189 505.93 T
+(that ) 236.62 505.93 T
+(pro) 254.8 505.93 T
+(vides ) 267.98 505.93 T
+(helper ) 292.28 505.93 T
+(application ) 320.45 505.93 T
+(lik) 368.07 505.93 T
+(e ) 378.53 505.93 T
+(functionality ) 386.16 505.93 T
+(in ) 440.45 505.93 T
+(a ) 451.41 505.93 T
+(web ) 459.04 505.93 T
+(bro) 478.88 505.93 T
+(wser) 491.96 505.93 T
+(, ) 510.44 505.93 T
+(added) 516.12 505.93 T
+( ) 540 505.93 T
+(functionality to an of) 189 493.93 T
+(\336ce suite, or a content vie) 272.91 493.93 T
+(wer in a Ja) 375.42 493.93 T
+(v) 418.26 493.93 T
+(a\252 application.) 423.01 493.93 T
+54 450.59 540 453.59 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+189 452.75 540 452.75 2 L
+0.25 H
+2 Z
+0 X
+N
+54 452.75 180 452.75 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(2.0) 163.32 457.59 T
+(Goals) 189 457.59 T
+48 470/G273414 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(This ) 189 429.93 T
+(document ) 212.17 429.93 T
+(describes ) 256.99 429.93 T
+(the ) 299.59 429.93 T
+(Ja) 317.19 429.93 T
+(v) 325.32 429.93 T
+(aBeans\252 ) 330.07 429.93 T
+(Acti) 374.14 429.93 T
+(v) 391.11 429.93 T
+(ation ) 395.86 429.93 T
+(Frame) 421.24 429.93 T
+(w) 446.54 429.93 T
+(ork ) 453.66 429.93 T
+(\050J) 472.38 429.93 T
+(AF\051. ) 479 429.93 T
+(The ) 502.99 429.93 T
+(J) 523.93 429.93 T
+(AF) 527.22 429.93 T
+( ) 540 429.93 T
+48 440/G273415 FmND
+(implements the follo) 189 417.93 T
+(wing services: ) 271.53 417.93 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/_objdef {PS192590} /type /dict /OBJ FmPD4
+[{PS192590} <</O /Layout /SpaceBefore 3 /StartIndent 149 /TextIndent 135 >> /PUT FmPD4
+[/SP192590 {PS192590} /StClassMap FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/_objdef {CS3722} /type /dict /OBJ FmPD4
+[{CS3722} <</O /Layout /LineHeight 11>> /PUT FmPD4
+[/SC3722 {CS3722} /StClassMap FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 399.26 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(It determines the type of arbitrary data. ) 202.74 399.26 T
+48 410/G273416 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 383.26 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(It encapsulates access to data. ) 202.74 383.26 T
+48 394/G273417 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 367.26 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(It disco) 202.74 367.26 T
+(v) 232.32 367.26 T
+(ers the operations a) 237.16 367.26 T
+(v) 314.44 367.26 T
+(ailable on a particular type of data. ) 319.19 367.26 T
+48 378/G273405 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 351.26 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(It ) 202.74 351.26 T
+(instantiates ) 211.22 351.26 T
+(the ) 258.58 351.26 T
+(softw) 273.17 351.26 T
+(are ) 295.29 351.26 T
+(component ) 309.86 351.26 T
+(that ) 356.67 351.26 T
+(corresponds ) 374.04 351.26 T
+(to ) 424.72 351.26 T
+(the ) 434.86 351.26 T
+(desired ) 449.45 351.26 T
+(operation ) 480.7 351.26 T
+(on ) 520.83 351.26 T
+(a ) 533.2 351.26 T
+48 362/G265761 FmND
+(particular piece of data.) 202.74 338.93 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The J) 189 314.93 T
+(AF is packaged as a Standard Extension to the Ja) 210.34 314.93 T
+(v) 406.5 314.93 T
+(a\252 platform.) 411.25 314.93 T
+48 325/G269283 FmND
+54 271.59 540 274.59 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+189 273.75 540 273.75 2 L
+0.25 H
+2 Z
+0 X
+N
+54 273.75 180 273.75 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(3.0) 163.32 278.59 T
+(Ar) 189 278.59 T
+(c) 202.09 278.59 T
+(hitectural Over) 208.64 278.59 T
+(vie) 293.46 278.59 T
+(w) 309.96 278.59 T
+48 291/G264813 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(The ) 189 250.93 T
+(Ja) 209.25 250.93 T
+(v) 217.38 250.93 T
+(a\252 ) 222.13 250.93 T
+(platform ) 241.06 250.93 T
+(\050including ) 280.2 250.93 T
+(Ja) 326 250.93 T
+(v) 334.13 250.93 T
+(aBeans\252\051 ) 338.88 250.93 T
+(already ) 385.59 250.93 T
+(pro) 419.72 250.93 T
+(vides ) 432.9 250.93 T
+(some ) 458.7 250.93 T
+(support ) 484.51 250.93 T
+(for ) 519.2 250.93 T
+(a) 535.56 250.93 T
+( ) 540 250.93 T
+48 261/G265027 FmND
+(modest acti) 189 238.93 T
+(v) 234.58 238.93 T
+(ation frame) 239.33 238.93 T
+(w) 284.9 238.93 T
+(ork. The J) 292.02 238.93 T
+(AF le) 331.69 238.93 T
+(v) 353.94 238.93 T
+(erages as much of that e) 358.79 238.93 T
+(xisting technology as) 455 238.93 T
+( ) 540 238.93 T
+(possible. The J) 189 226.93 T
+(AF inte) 248.12 226.93 T
+(grates these mechanisms. ) 278.25 226.93 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299013 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "6" 6
+%%Page: "7" 7
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.7/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Ar) 207 739.85 T
+(c) 216.82 739.85 T
+(hitectural Over) 221.73 739.85 T
+(vie) 285.35 739.85 T
+(w) 297.72 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(7) 527.82 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+[/EMC FmPD4
+[/StoreName /P299013 /StRetrieve FmPD4
+[/StoreName /P299013 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/StoreName /P299671 /StStore FmPD4
+[/Subtype /Span /ID (S299671.1) /StPNE FmPD4
+[/_objdef {R73846} /type /dict /OBJ FmPD4
+[{R73846} <</S /R /ID (F73846) /O /Link>> /PUT FmPD4
+[/Obj {R73846} /StAttr FmPD4
+[/StoreName /S.299671.1 /StStore FmPD4
+[/StPop FmPD4
+66 691/G268523 FmND
+[/StoreName /P299671 /StRetrieve FmPD4
+[/StoreName /P299671 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(This ) 207 512.14 T
+(diagram ) 227.69 512.14 T
+(sho) 263.38 512.14 T
+(ws ) 277.02 512.14 T
+(the ) 291.04 512.14 T
+(major ) 306.17 512.14 T
+(elements ) 332.41 512.14 T
+(comprising ) 370.88 512.14 T
+(the ) 418.79 512.14 T
+(J) 433.92 512.14 T
+(AF ) 437.21 512.14 T
+(architecture. ) 452.9 512.14 T
+(Note ) 505.52 512.14 T
+(that ) 527.87 512.14 T
+(the) 545.78 512.14 T
+( ) 558 512.14 T
+66 522/G268156 FmND
+(frame) 207 500.14 T
+(w) 230.07 500.14 T
+(ork sho) 237.19 500.14 T
+(wn here is not bound to a particular application. ) 266.66 500.14 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/_objdef {PS192586} /type /dict /OBJ FmPD4
+[{PS192586} <</O /Layout /SpaceAfter 4 /SpaceBefore 18 /StartIndent 135 /TextIndent 95.3 >> /PUT FmPD4
+[/SP192586 {PS192586} /StClassMap FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(3.1) 184.1 470.14 T
+(The DataHandler Class ) 207 470.14 T
+66 480/G264816 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 207 446.14 T
+(DataHandler ) 226.41 446.14 T
+(class ) 281.36 446.14 T
+(\050sho) 304.65 446.14 T
+(wn ) 321.62 446.14 T
+(in ) 337.7 446.14 T
+(the ) 349.34 446.14 T
+(diagram ) 365.42 446.14 T
+(abo) 402.05 446.14 T
+(v) 416.34 446.14 T
+(e\051 ) 421.19 446.14 T
+(pro) 432.82 446.14 T
+(vides ) 445.99 446.14 T
+(a ) 470.96 446.14 T
+(consistent ) 479.26 446.14 T
+(interf) 523.12 446.14 T
+(ace) 544.68 446.14 T
+( ) 558 446.14 T
+66 456/G269287 FmND
+(between J) 207 434.14 T
+(AF-a) 246.11 434.14 T
+(w) 266.51 434.14 T
+(are clients and other subsystems.) 273.63 434.14 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(3.2) 184.1 404.14 T
+(The DataSour) 207 404.14 T
+(ce Interface ) 271.81 404.14 T
+66 414/G265036 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(DataSource ) 207 380.14 T
+(interf) 256.36 380.14 T
+(ace ) 277.92 380.14 T
+(encapsulates ) 293.96 380.14 T
+(an ) 347.21 380.14 T
+(object ) 359.37 380.14 T
+(that ) 386.52 380.14 T
+(contains ) 404.24 380.14 T
+(data, ) 440.29 380.14 T
+(and ) 462.16 380.14 T
+(that ) 479.32 380.14 T
+(can ) 497.03 380.14 T
+(return ) 513.62 380.14 T
+(both) 540.22 380.14 T
+( ) 558 380.14 T
+66 390/G269292 FmND
+(a ) 207 368.14 T
+(stream ) 213.75 368.14 T
+(pro) 242.72 368.14 T
+(viding ) 255.9 368.14 T
+(data ) 283.77 368.14 T
+(access, ) 302.73 368.14 T
+(and ) 333.08 368.14 T
+(a ) 349.83 368.14 T
+(string ) 356.58 368.14 T
+(de\336ning ) 381.67 368.14 T
+(the ) 416.76 368.14 T
+(MIME ) 431.29 368.14 T
+(type ) 460.81 368.14 T
+(describing ) 480.34 368.14 T
+(the ) 524.31 368.14 T
+(data.) 538.84 368.14 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Classes ) 207 344.14 T
+(can ) 240.88 344.14 T
+(be ) 258.65 344.14 T
+(implemented ) 271.97 344.14 T
+(for ) 328.07 344.14 T
+(common ) 343.62 344.14 T
+(data ) 382.5 344.14 T
+(sources ) 403.04 344.14 T
+(\050web, ) 436.92 344.14 T
+(\336le ) 463.29 344.14 T
+(system, ) 479.95 344.14 T
+(IMAP) 514.12 344.14 T
+(, ) 538.01 344.14 T
+(ftp,) 544.39 344.14 T
+( ) 558 344.14 T
+66 354/G269293 FmND
+(etc.\051. ) 207 332.14 T
+(The ) 231.35 332.14 T
+(DataSource ) 251.25 332.14 T
+(interf) 302.25 332.14 T
+(ace ) 323.81 332.14 T
+(can ) 341.49 332.14 T
+(also ) 359.72 332.14 T
+(be ) 380.19 332.14 T
+(e) 393.98 332.14 T
+(xtended ) 398.27 332.14 T
+(to ) 434.29 332.14 T
+(allo) 446.42 332.14 T
+(w ) 461.17 332.14 T
+(per ) 472.75 332.14 T
+(data ) 489.87 332.14 T
+(source ) 510.89 332.14 T
+(user) 541.34 332.14 T
+( ) 558 332.14 T
+(customizations. ) 207 320.14 T
+(Once ) 271.94 320.14 T
+(the ) 295.48 320.14 T
+(DataSource ) 310.13 320.14 T
+(is ) 359.22 320.14 T
+(set ) 368.33 320.14 T
+(in ) 381.88 320.14 T
+(the ) 392.09 320.14 T
+(DataHandler) 406.75 320.14 T
+(, ) 457.44 320.14 T
+(the ) 462.38 320.14 T
+(client ) 477.04 320.14 T
+(can ) 501.69 320.14 T
+(determine) 518.01 320.14 T
+( ) 558 320.14 T
+(the operations a) 207 308.14 T
+(v) 270.12 308.14 T
+(ailable on that data.) 274.87 308.14 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The J) 207 284.14 T
+(AF includes tw) 228.34 284.14 T
+(o DataSource class implementations for con) 289.35 284.14 T
+(v) 465.31 284.14 T
+(enience:) 470.16 284.14 T
+66 294/G268181 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 265.47 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(FileDataSource accesses data held in a \336le.) 220.74 265.47 T
+66 276/G268182 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 249.47 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(URLDataSource accesses data held at a URL.) 220.74 249.47 T
+66 260/G268187 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(3.3) 184.1 219.14 T
+(The CommandMap Interface) 207 219.14 T
+66 229/G264820 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 207 195.14 T
+(CommandMap ) 228.04 195.14 T
+(pro) 293.54 195.14 T
+(vides ) 306.72 195.14 T
+(a ) 333.32 195.14 T
+(service ) 343.26 195.14 T
+(that ) 377.07 195.14 T
+(allo) 397.57 195.14 T
+(ws ) 412.32 195.14 T
+(consumers ) 428.92 195.14 T
+(of ) 477.19 195.14 T
+(its ) 491.01 195.14 T
+(interf) 505.95 195.14 T
+(aces ) 527.52 195.14 T
+(to) 550.22 195.14 T
+( ) 558 195.14 T
+66 205/G264821 FmND
+(determine ) 207 183.14 T
+(the ) 249.89 183.14 T
+(\324commands\325 ) 265.02 183.14 T
+(a) 317.91 183.14 T
+(v) 322.15 183.14 T
+(ailable ) 326.9 183.14 T
+(on ) 356.46 183.14 T
+(a ) 369.37 183.14 T
+(particular ) 376.71 183.14 T
+(MIME ) 417.94 183.14 T
+(type ) 448.06 183.14 T
+(as ) 468.18 183.14 T
+(well ) 479.42 183.14 T
+(as ) 499.54 183.14 T
+(an ) 510.78 183.14 T
+(interf) 523.12 183.14 T
+(ace) 544.68 183.14 T
+( ) 558 183.14 T
+(to ) 207 171.14 T
+(retrie) 217.18 171.14 T
+(v) 238.03 171.14 T
+(e ) 242.88 171.14 T
+(an ) 249.73 171.14 T
+(object ) 261.57 171.14 T
+(that ) 288.41 171.14 T
+(can ) 305.81 171.14 T
+(operate ) 322.1 171.14 T
+(on ) 353.93 171.14 T
+(an ) 366.33 171.14 T
+(object ) 378.17 171.14 T
+(of ) 405.02 171.14 T
+(a ) 415.75 171.14 T
+(particular ) 422.59 171.14 T
+(MIME ) 463.31 171.14 T
+(type ) 492.94 171.14 T
+(\050ef) 512.56 171.14 T
+(fecti) 523.41 171.14 T
+(v) 540.93 171.14 T
+(ely) 545.78 171.14 T
+( ) 558 171.14 T
+(a component re) 207 159.14 T
+(gistry\051. The Command Map can generate and maintain a list of a) 268.5 159.14 T
+(v) 526.59 159.14 T
+(ailable) 531.34 159.14 T
+( ) 558 159.14 T
+(capabilities ) 207 147.14 T
+(on ) 255.32 147.14 T
+(a ) 268.1 147.14 T
+(particular ) 275.31 147.14 T
+(data ) 316.4 147.14 T
+(type ) 335.83 147.14 T
+(by ) 355.83 147.14 T
+(a ) 368.6 147.14 T
+(mechanism ) 375.81 147.14 T
+(de\336ned ) 424.14 147.14 T
+(by ) 456.35 147.14 T
+(the ) 469.12 147.14 T
+(implementation ) 484.12 147.14 T
+(of) 549.67 147.14 T
+( ) 558 147.14 T
+(the particular instance of the CommandMap. ) 207 135.14 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The ) 207 111.14 T
+(Ja) 229.99 111.14 T
+(v) 238.12 111.14 T
+(aBeans\252 ) 242.87 111.14 T
+(package ) 288.99 111.14 T
+(pro) 329.19 111.14 T
+(vides ) 342.37 111.14 T
+(the ) 370.92 111.14 T
+(programming ) 390.58 111.14 T
+(model ) 452.47 111.14 T
+(for ) 484.91 111.14 T
+(the ) 504.01 111.14 T
+(softw) 523.67 111.14 T
+(are) 545.79 111.14 T
+( ) 558 111.14 T
+66 121/G269297 FmND
+(components ) 207 99.14 T
+(that ) 260.18 99.14 T
+(implement ) 280.03 99.14 T
+(the ) 327.66 99.14 T
+(commands. ) 344.73 99.14 T
+(Each ) 395.4 99.14 T
+(Ja) 420.24 99.14 T
+(v) 428.37 99.14 T
+(aBeans\252 ) 433.12 99.14 T
+(component ) 476.65 99.14 T
+(can ) 525.94 99.14 T
+(use) 544.67 99.14 T
+( ) 558 99.14 T
+72 89.3 558 687.33 C
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299661 /StStore FmPD4
+[/StoreName /P299661 /StStore FmPD4
+[/StoreName /P299671 /StRetrieve FmPD4
+[/StoreName /S.299671.1 /StRetrieve FmPD4
+[/Subtype /Figure /ID (F73846)  /StPNE FmPD4
+[/_objdef {AF73846} /type /dict /OBJ FmPD4
+[{AF73846} <</O /Layout /Placement /Block /Width 0 647 FmDC 415 792 FmDC FmBx exch 4 -1 roll sub 3 1 roll exch sub /Height exch /BBox [107 533 FmDC 523 677 FmDC FmBx]>> /PUT FmPD4
+[/Obj {AF73846} /StAttr FmPD4
+107.32 532.8 522.68 677.33 C
+0 0 0 1 0 0 0 1 K
+107.32 532.8 522.68 677.33 R
+7 X
+V
+[/StBMC FmPD4
+271.98 561.44 363.11 612.07 R
+V
+0.5 H
+2 Z
+0 X
+N
+6 12 Q
+(DataHandler) 287.52 584.95 T
+275.08 644.03 335.83 668.74 R
+N
+297.58 627.99 301.05 625.98 297.58 613.88 294.11 625.98 4 Y
+1 H
+0 Z
+N
+297.58 627.99 301.05 625.98 297.58 613.88 294.11 625.98 4 Y
+V
+297.58 643.52 297.58 626.48 2 L
+2 Z
+N
+90 450 1.5 1.5 251.52 588.16 G
+252.02 588.16 252.02 593.28 269.89 588.16 252.02 583.04 4 Y
+0 Z
+N
+252.02 588.16 252.02 593.28 269.89 588.16 252.02 583.04 4 Y
+V
+90 450 1.5 1.5 180 242.11 588.16 GG
+241.61 588.16 241.61 583.04 223.74 588.16 241.61 593.28 4 Y
+N
+241.61 588.16 241.61 583.04 223.74 588.16 241.61 593.28 4 Y
+V
+251.52 588.16 242.11 588.16 2 L
+3 H
+N
+374.8 587.6 374.8 584.77 364.92 587.6 374.8 590.43 4 Y
+1 H
+N
+374.8 587.6 374.8 584.77 364.92 587.6 374.8 590.43 4 Y
+V
+380.67 587.6 380.67 590.43 390.55 587.6 380.67 584.77 4 Y
+N
+380.67 587.6 380.67 590.43 390.55 587.6 380.67 584.77 4 Y
+V
+375.3 587.6 380.17 587.6 2 L
+N
+392.32 564.25 435.95 608.13 R
+0.5 H
+2 Z
+N
+6 9 Q
+(Command) 393.3 587.32 T
+(Map) 404.58 579.55 T
+442.53 587.32 444.54 590.79 456.64 587.32 444.54 583.84 4 Y
+1 H
+0 Z
+N
+442.53 587.32 444.54 590.79 456.64 587.32 444.54 583.84 4 Y
+V
+436.23 587.32 444.04 587.32 2 L
+2 Z
+N
+458.73 573.53 503.73 599.97 13.22 RR
+0.5 H
+N
+(Command) 459.71 586.76 T
+(Object) 468.17 578.99 T
+6 10 Q
+(DataSource) 279.12 653.61 T
+J
+366.44 620.92 368.33 619.07 359.98 614.35 364.56 622.78 4 Y
+1 H
+0 Z
+N
+366.44 620.92 368.33 619.07 359.98 614.35 364.56 622.78 4 Y
+V
+J
+378.62 633.31 376.74 635.17 385.09 639.89 380.51 631.46 4 Y
+N
+378.62 633.31 376.74 635.17 385.09 639.89 380.51 631.46 4 Y
+V
+J
+366.79 621.28 369.42 623.95 2 L
+0.5 H
+2 Z
+N
+[10.24 8.874] 10.24 I
+369.42 623.95 375.64 630.28 2 L
+N
+J
+375.64 630.28 378.27 632.96 2 L
+N
+J
+365.74 640.71 452.19 668.84 R
+0 Z
+N
+6 9 Q
+(DataContentHandler) 369.33 653.19 T
+J
+267.07 650.66 265.3 652.63 273.92 656.84 268.84 648.7 4 Y
+1 H
+N
+267.07 650.66 265.3 652.63 273.92 656.84 268.84 648.7 4 Y
+V
+J
+230.96 618.1 232.73 616.14 224.11 611.93 229.19 620.07 4 Y
+N
+230.96 618.1 232.73 616.14 224.11 611.93 229.19 620.07 4 Y
+V
+J
+266.7 650.33 265.4 649.16 2 L
+0.5 H
+2 Z
+N
+[3.47 4.462] 3.47 I
+265.4 649.16 232.63 619.61 2 L
+N
+J
+232.63 619.61 231.33 618.44 2 L
+N
+J
+222.77 647.74 222.77 541.73 2 L
+1 H
+N
+6 12 Q
+(F) 161.84 595.21 T
+(r) 168.63 595.21 T
+(ame) 172.51 595.21 T
+(w) 195.61 595.21 T
+(or) 204.15 595.21 T
+(k) 215 595.21 T
+(Client) 176.08 587.03 T
+72 89.3 558 687.33 C
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299661 /StRetrieve FmPD4
+-45 -45 657 837 C
+0 0 0 1 0 0 0 1 K
+[/StoreName /P299661 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "7" 7
+%%Page: "8" 8
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.8/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Using The Frame) 189 739.85 T
+(w) 261.88 739.85 T
+(ork) 268.7 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(8) 54 60.29 T
+0 9 Q
+( of) 59.56 60.29 T
+0 10 Q
+( 21) 70.56 60.29 T
+[/EMC FmPD4
+[/StoreName /P299661 /StRetrieve FmPD4
+[/Subtype /Span /ID (S299661.1) /StPNE FmPD4
+[/StoreName /S.299661.1 /StStore FmPD4
+[/StPop FmPD4
+[/StoreName /S.299661.1 /StRetrieve FmPD4
+[/Class /SC3755 /StUpdate FmPD4
+[/StBMC FmPD4
+1 F
+(e) 189 680.66 T
+(xternalization, ) 193.29 680.66 T
+(or ) 253.37 680.66 T
+(can ) 264.29 680.66 T
+(implement ) 280.77 680.66 T
+(the ) 326.14 680.66 T
+2 F
+(CommandObject) 340.95 680.66 T
+1 F
+( ) 408.72 680.66 T
+(interf) 411.31 680.66 T
+(ace ) 432.87 680.66 T
+(to ) 448.78 680.66 T
+(allo) 459.15 680.66 T
+(w ) 473.9 680.66 T
+(the ) 483.72 680.66 T
+(typed ) 498.53 680.66 T
+(data) 523.34 680.66 T
+( ) 540 680.66 T
+(to be passed to it. ) 189 668.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299661 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The ) 189 644.66 T
+(J) 207.6 644.66 T
+(AF ) 210.89 644.66 T
+(de\336nes ) 226.73 644.66 T
+(the ) 258.11 644.66 T
+(CommandMap ) 273.39 644.66 T
+(interf) 336.44 644.66 T
+(ace, ) 358 644.66 T
+(which ) 376.87 644.66 T
+(pro) 404.36 644.66 T
+(vides ) 417.55 644.66 T
+(a ) 441.71 644.66 T
+(\337e) 449.2 644.66 T
+(xible ) 459.05 644.66 T
+(and ) 482.11 644.66 T
+(e) 499.6 644.66 T
+(xtensible) 503.89 644.66 T
+( ) 540 644.66 T
+48 655/G264822 FmND
+(frame) 189 632.66 T
+(w) 212.07 632.66 T
+(ork ) 219.19 632.66 T
+(for ) 236.31 632.66 T
+(the ) 251.76 632.66 T
+(CommandMap. ) 267.77 632.66 T
+(The ) 334.06 632.66 T
+(CommandMap ) 353.4 632.66 T
+(interf) 417.19 632.66 T
+(ace ) 438.75 632.66 T
+(allo) 455.86 632.66 T
+(ws ) 470.61 632.66 T
+(de) 485.51 632.66 T
+(v) 494.7 632.66 T
+(elopers ) 499.55 632.66 T
+(to) 532.22 632.66 T
+( ) 540 632.66 T
+(de) 189 620.66 T
+(v) 198.19 620.66 T
+(elop ) 203.04 620.66 T
+(their ) 225.03 620.66 T
+(o) 248.13 620.66 T
+(wn ) 252.88 620.66 T
+(solutions ) 269.86 620.66 T
+(for ) 310.75 620.66 T
+(disco) 327.18 620.66 T
+(v) 348.14 620.66 T
+(ering ) 352.99 620.66 T
+(which ) 378.31 620.66 T
+(commands ) 407.52 620.66 T
+(are ) 455.61 620.66 T
+(a) 472.59 620.66 T
+(v) 476.83 620.66 T
+(ailable ) 481.58 620.66 T
+(on ) 513.01 620.66 T
+(the) 527.78 620.66 T
+( ) 540 620.66 T
+(system. ) 189 608.66 T
+(A ) 221.57 608.66 T
+(possible ) 231.09 608.66 T
+(implementation ) 266.16 608.66 T
+(can ) 331.23 608.66 T
+(access ) 347.4 608.66 T
+(the ) 375.24 608.66 T
+(\324types ) 389.75 608.66 T
+(re) 416.48 608.66 T
+(gistry\325 ) 424.1 608.66 T
+(on ) 452.51 608.66 T
+(the ) 464.8 608.66 T
+(platform ) 479.31 608.66 T
+(or ) 516.05 608.66 T
+(use) 526.67 608.66 T
+( ) 540 608.66 T
+(a ) 189 596.66 T
+(serv) 195.98 596.66 T
+(er) 212.49 596.66 T
+(-based ) 220.06 596.66 T
+(solution. ) 248.71 596.66 T
+(The ) 285.98 596.66 T
+(J) 304.07 596.66 T
+(AF ) 307.36 596.66 T
+(pro) 322.68 596.66 T
+(vides ) 335.86 596.66 T
+(a ) 359.52 596.66 T
+(simple ) 366.5 596.66 T
+(def) 395.71 596.66 T
+(ault ) 408.38 596.66 T
+(solution ) 425.93 596.66 T
+(based ) 460.7 596.66 T
+(on ) 486.01 596.66 T
+(RFC ) 498.56 596.66 T
+(1524) 520 596.66 T
+( ) 540 596.66 T
+(\050.mailcap\051 lik) 189 584.66 T
+(e functionality) 242.78 584.66 T
+(. See \322Deli) 300.18 584.66 T
+(v) 343.53 584.66 T
+(erables\323 belo) 348.38 584.66 T
+(w) 400.61 584.66 T
+(.) 407.18 584.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(3.4) 166.1 554.66 T
+(The Command Object Interface) 189 554.66 T
+48 565/G264823 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Beans ) 189 530.66 T
+(e) 215.94 530.66 T
+(xtend ) 220.23 530.66 T
+(the ) 244.95 530.66 T
+(CommandObject ) 259.67 530.66 T
+(interf) 330.5 530.66 T
+(ace ) 352.06 530.66 T
+(in ) 367.88 530.66 T
+(order ) 378.17 530.66 T
+(to ) 401.77 530.66 T
+(interact ) 412.05 530.66 T
+(with ) 444.54 530.66 T
+(J) 464.82 530.66 T
+(AF ) 468.11 530.66 T
+(services. ) 483.39 530.66 T
+(J) 520.6 530.66 T
+(AF-) 523.89 530.66 T
+48 541/G264824 FmND
+(a) 189 518.66 T
+(w) 193.29 518.66 T
+(are ) 200.41 518.66 T
+(Ja) 215.62 518.66 T
+(v) 223.75 518.66 T
+(aBeans\252 ) 228.5 518.66 T
+(components ) 270.18 518.66 T
+(can ) 321.51 518.66 T
+(directly ) 338.39 518.66 T
+(access ) 371.95 518.66 T
+(their ) 400.49 518.66 T
+(DataSource ) 421.82 518.66 T
+(and ) 471.47 518.66 T
+(DataHandler) 488.91 518.66 T
+( ) 540 518.66 T
+(objects in order to retrie) 189 506.66 T
+(v) 284.84 506.66 T
+(e the data type and to act on the data. ) 289.69 506.66 T
+54 463.33 540 466.33 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+189 465.48 540 465.48 2 L
+0.25 H
+2 Z
+0 X
+N
+54 465.48 180 465.48 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(4.0) 163.32 470.33 T
+(Using The Frame) 189 470.33 T
+(w) 286.18 470.33 T
+(ork ) 295.27 470.33 T
+48 482/G264825 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(W) 189 442.66 T
+(e ) 197.64 442.66 T
+(intend ) 205.17 442.66 T
+(to ) 233.26 442.66 T
+(mak) 244.13 442.66 T
+(e ) 261.26 442.66 T
+(this ) 268.79 442.66 T
+(infrastructure ) 286.33 442.66 T
+(widely ) 343.29 442.66 T
+(a) 373.6 442.66 T
+(v) 377.84 442.66 T
+(ailable ) 382.59 442.66 T
+(for ) 412.34 442.66 T
+(an) 427.1 442.66 T
+(y ) 436.39 442.66 T
+(Ja) 444.48 442.66 T
+(v) 452.61 442.66 T
+(a\252 ) 457.36 442.66 T
+(Application ) 474.69 442.66 T
+(that) 525 442.66 T
+( ) 540 442.66 T
+48 453/G269303 FmND
+(needs ) 189 430.66 T
+(this ) 217.34 430.66 T
+(functionality) 237.36 430.66 T
+(. ) 287.82 430.66 T
+(The ) 295.88 430.66 T
+(\324canonical\325 ) 317 430.66 T
+(consumer ) 367.55 430.66 T
+(of ) 412 430.66 T
+(this ) 425.9 430.66 T
+(frame) 445.91 430.66 T
+(w) 468.98 430.66 T
+(ork ) 476.1 430.66 T
+(accesses ) 495 430.66 T
+(it) 534.44 430.66 T
+( ) 540 430.66 T
+(through ) 189 418.66 T
+(the ) 223.39 418.66 T
+(DataHandler ) 238.89 418.66 T
+(\050although ) 293.25 418.66 T
+(the ) 334.86 418.66 T
+(major ) 350.36 418.66 T
+(subsystems ) 376.97 418.66 T
+(are ) 425.81 418.66 T
+(designed ) 441.3 418.66 T
+(to ) 480.12 418.66 T
+(also ) 491.18 418.66 T
+(operate) 510.57 418.66 T
+( ) 540 418.66 T
+(independently\051. ) 189 406.66 T
+(An ) 255.16 406.66 T
+(underlying ) 271.05 406.66 T
+(DataSource ) 318.04 406.66 T
+(object ) 368.36 406.66 T
+(is ) 396.47 406.66 T
+(associated ) 406.81 406.66 T
+(with ) 451.57 406.66 T
+(the ) 473.02 406.66 T
+(DataHandler) 488.91 406.66 T
+( ) 540 406.66 T
+(when the DataHandler class is constructed. ) 189 394.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 375.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(The DataHandler retrie) 202.74 375.99 T
+(v) 295.23 375.99 T
+(es the data typing information from the DataSource or gets ) 300.08 375.99 T
+48 387/G269304 FmND
+(the data type directly from the constructor) 202.74 363.66 T
+(. ) 370.49 363.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 347.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Once this initialization step is complete, a list of commands that can be performed ) 202.74 347.99 T
+48 359/G269305 FmND
+(on the data item can be accessed from the DataHandler) 202.74 335.66 T
+(. ) 422.4 335.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(When ) 189 311.66 T
+(an ) 215.63 311.66 T
+(application ) 227.83 311.66 T
+(issues ) 275.02 311.66 T
+(a ) 301.67 311.66 T
+(request ) 308.86 311.66 T
+(for ) 340.5 311.66 T
+(this ) 354.91 311.66 T
+(list, ) 372.11 311.66 T
+(the ) 389.6 311.66 T
+(DataHandler ) 404.57 311.66 T
+(uses ) 458.42 311.66 T
+(the ) 478.39 311.66 T
+(MIME ) 493.36 311.66 T
+(data) 523.34 311.66 T
+( ) 540 311.66 T
+48 322/G269309 FmND
+(type ) 189 299.66 T
+(speci\336er ) 209.08 299.66 T
+(returned ) 245.81 299.66 T
+(to ) 281.99 299.66 T
+(request ) 292.63 299.66 T
+(a ) 324.36 299.66 T
+(list ) 331.66 299.66 T
+(of ) 346.75 299.66 T
+(a) 357.93 299.66 T
+(v) 362.17 299.66 T
+(ailable ) 366.92 299.66 T
+(commands ) 396.44 299.66 T
+(from ) 442.63 299.66 T
+(the ) 464.92 299.66 T
+(CommandMap) 480 299.66 T
+( ) 540 299.66 T
+(object. ) 189 287.66 T
+(The ) 220.42 287.66 T
+(CommandMap ) 240.46 287.66 T
+(has ) 304.94 287.66 T
+(kno) 322.76 287.66 T
+(wledge ) 337.51 287.66 T
+(of ) 370.87 287.66 T
+(a) 383.69 287.66 T
+(v) 387.93 287.66 T
+(ailable ) 392.68 287.66 T
+(commands ) 423.82 287.66 T
+(\050implemented ) 471.64 287.66 T
+(as) 531.67 287.66 T
+( ) 540 287.66 T
+(Beans\051 ) 189 275.66 T
+(and ) 220.12 275.66 T
+(their ) 237.91 275.66 T
+(supported ) 259.59 275.66 T
+(data ) 302.38 275.66 T
+(types. ) 322.39 275.66 T
+(The ) 349.35 275.66 T
+(CommandMap ) 368.25 275.66 T
+(returns ) 431.6 275.66 T
+(a ) 462.72 275.66 T
+(subset ) 470.51 275.66 T
+(of ) 498.86 275.66 T
+(the ) 510.54 275.66 T
+(full) 526.11 275.66 T
+( ) 540 275.66 T
+(list ) 189 263.66 T
+(of ) 205.71 263.66 T
+(all ) 218.52 263.66 T
+(commands ) 233 263.66 T
+(based ) 280.81 263.66 T
+(on ) 308.06 263.66 T
+(the ) 322.54 263.66 T
+(requested ) 339.23 263.66 T
+(MIME ) 382.03 263.66 T
+(type ) 413.73 263.66 T
+(and ) 435.43 263.66 T
+(the ) 454.35 263.66 T
+(semantics ) 471.05 263.66 T
+(of ) 514.97 263.66 T
+(the) 527.78 263.66 T
+( ) 540 263.66 T
+(CommandMap implementation, to the DataHandler) 189 251.66 T
+(. ) 394.82 251.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(When ) 189 227.66 T
+(the ) 217.04 227.66 T
+(application ) 233.42 227.66 T
+(wishes ) 282.02 227.66 T
+(to ) 313.4 227.66 T
+(apply ) 325.34 227.66 T
+(a ) 351.72 227.66 T
+(command ) 360.33 227.66 T
+(to ) 403.93 227.66 T
+(some ) 415.87 227.66 T
+(data, ) 441.14 227.66 T
+(it ) 464.46 227.66 T
+(is ) 474.18 227.66 T
+(accomplished) 485.01 227.66 T
+( ) 540 227.66 T
+48 238/G269310 FmND
+(through ) 189 215.66 T
+(the ) 225.89 215.66 T
+(appropriate ) 243.89 215.66 T
+(DataHandler ) 295.2 215.66 T
+(interf) 352.07 215.66 T
+(ace, ) 373.63 215.66 T
+(which ) 395.23 215.66 T
+(uses ) 425.45 215.66 T
+(the ) 448.44 215.66 T
+(CommandMap ) 466.44 215.66 T
+(to) 532.22 215.66 T
+( ) 540 215.66 T
+(retrie) 189 203.66 T
+(v) 209.85 203.66 T
+(e ) 214.7 203.66 T
+(the ) 222 203.66 T
+(appropriate ) 237.08 203.66 T
+(Bean ) 285.48 203.66 T
+(that ) 308.88 203.66 T
+(is ) 326.74 203.66 T
+(used ) 336.27 203.66 T
+(to ) 357.46 203.66 T
+(operate ) 368.1 203.66 T
+(on ) 400.39 203.66 T
+(the ) 413.25 203.66 T
+(data. ) 428.33 203.66 T
+(The ) 450.34 203.66 T
+(container ) 468.75 203.66 T
+(\050user ) 508.82 203.66 T
+(of) 531.67 203.66 T
+( ) 540 203.66 T
+(the frame) 189 191.66 T
+(w) 226.79 191.66 T
+(ork\051 mak) 233.91 191.66 T
+(es the association between the data and the Bean.) 270.19 191.66 T
+54 148.33 540 151.33 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+189 150.48 540 150.48 2 L
+0.25 H
+2 Z
+0 X
+N
+54 150.48 180 150.48 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(5.0) 163.32 155.33 T
+(Usa) 189 155.33 T
+(g) 210.89 155.33 T
+(e Scenarios) 218.34 155.33 T
+48 167/G265043 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(This ) 189 127.66 T
+(scenario ) 210.91 127.66 T
+(uses ) 248.37 127.66 T
+(the ) 269.72 127.66 T
+(e) 286.07 127.66 T
+(xample ) 290.36 127.66 T
+(of ) 323.93 127.66 T
+(a ) 336.4 127.66 T
+(h) 344.97 127.66 T
+(ypothetical ) 349.92 127.66 T
+(\336le ) 398.49 127.66 T
+(vie) 415.41 127.66 T
+(wer ) 427.38 127.66 T
+(application ) 446.5 127.66 T
+(in ) 495.07 127.66 T
+(order ) 506.99 127.66 T
+(to) 532.22 127.66 T
+( ) 540 127.66 T
+48 138/G269314 FmND
+(illustrate ) 189 115.66 T
+(the ) 226.53 115.66 T
+(normal ) 241.27 115.66 T
+(\337o) 272.13 115.66 T
+(w ) 282.44 115.66 T
+(of ) 292.18 115.66 T
+(tasks ) 303.04 115.66 T
+(in) 325.57 115.66 T
+(v) 332.95 115.66 T
+(olv) 337.75 115.66 T
+(ed ) 350.38 115.66 T
+(when ) 362.34 115.66 T
+(implementing ) 386.53 115.66 T
+(the ) 444.61 115.66 T
+(J) 459.36 115.66 T
+(AF) 462.65 115.66 T
+(. ) 474.63 115.66 T
+(The ) 479.66 115.66 T
+(\336le ) 497.73 115.66 T
+(vie) 513.04 115.66 T
+(wer) 525.01 115.66 T
+( ) 540 115.66 T
+(is ) 189 103.66 T
+(similar ) 198.97 103.66 T
+(to ) 230.05 103.66 T
+(the ) 241.13 103.66 T
+(W) 256.66 103.66 T
+(indo) 265.7 103.66 T
+(ws ) 283.23 103.66 T
+(Explorer ) 297.64 103.66 T
+(utility) 335.93 103.66 T
+(. ) 359.18 103.66 T
+(When ) 364.98 103.66 T
+(launched, ) 392.16 103.66 T
+(it ) 434.06 103.66 T
+(presents ) 442.92 103.66 T
+(the ) 478.99 103.66 T
+(user ) 494.52 103.66 T
+(with ) 514.48 103.66 T
+(a) 535.56 103.66 T
+( ) 540 103.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299057 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "8" 8
+%%Page: "9" 9
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.9/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Usa) 207 739.85 T
+(g) 223.42 739.85 T
+(e Scenarios) 229.01 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(9) 527.82 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+[/EMC FmPD4
+[/StoreName /P299057 /StRetrieve FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(display ) 207 680.66 T
+(of ) 239.96 680.66 T
+(a) 252.35 680.66 T
+(v) 256.6 680.66 T
+(ailable ) 261.35 680.66 T
+(\336les. ) 292.07 680.66 T
+(It ) 315.31 680.66 T
+(includes ) 325.49 680.66 T
+(a ) 362.89 680.66 T
+(function ) 371.39 680.66 T
+(lik) 408.79 680.66 T
+(e ) 419.25 680.66 T
+(Explorer\325) 427.76 680.66 T
+(s ) 465.53 680.66 T
+(\324right ) 473.48 680.66 T
+(mouse\325 ) 499.77 680.66 T
+(menu,) 533.28 680.66 T
+( ) 558 680.66 T
+(where ) 207 668.66 T
+(all ) 234.1 668.66 T
+(operations ) 246.77 668.66 T
+(that ) 291.11 668.66 T
+(can ) 308.78 668.66 T
+(be ) 325.33 668.66 T
+(performed ) 337.44 668.66 T
+(on ) 381.76 668.66 T
+(a ) 394.43 668.66 T
+(selected ) 401.55 668.66 T
+(data ) 436.43 668.66 T
+(item ) 455.76 668.66 T
+(are ) 476.21 668.66 T
+(listed ) 491.09 668.66 T
+(in ) 515.44 668.66 T
+(a ) 525.89 668.66 T
+(popup) 533 668.66 T
+( ) 558 668.66 T
+(menu for that item.) 207 656.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299057 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(A ) 207 632.66 T
+(typical ) 218.38 632.66 T
+(user ) 249.76 632.66 T
+(launches ) 270.58 632.66 T
+(this ) 309.73 632.66 T
+(application ) 328.34 632.66 T
+(to ) 376.94 632.66 T
+(vie) 388.89 632.66 T
+(w ) 400.86 632.66 T
+(a ) 412.24 632.66 T
+(directory ) 420.84 632.66 T
+(of ) 461.1 632.66 T
+(\336les. ) 473.59 632.66 T
+(When ) 496.92 632.66 T
+(the ) 524.96 632.66 T
+(user) 541.34 632.66 T
+( ) 558 632.66 T
+66 643/G269315 FmND
+(speci\336es ) 207 620.66 T
+(a ) 245.08 620.66 T
+(\336le ) 253.16 620.66 T
+(by ) 269.58 620.66 T
+(clicking ) 283.23 620.66 T
+(on ) 319.09 620.66 T
+(it, ) 332.73 620.66 T
+(the ) 344.43 620.66 T
+(application ) 360.29 620.66 T
+(displays ) 408.37 620.66 T
+(a ) 444.79 620.66 T
+(popup ) 452.87 620.66 T
+(menu ) 481.52 620.66 T
+(that ) 507.38 620.66 T
+(lists ) 526.02 620.66 T
+(the) 545.78 620.66 T
+( ) 558 620.66 T
+(a) 207 608.66 T
+(v) 211.24 608.66 T
+(ailable ) 215.99 608.66 T
+(operations ) 246.66 608.66 T
+(on ) 292.33 608.66 T
+(that ) 306.33 608.66 T
+(\336le. ) 325.34 608.66 T
+(File ) 344.63 608.66 T
+(system ) 364.2 608.66 T
+(vie) 395.99 608.66 T
+(wer ) 407.96 608.66 T
+(utilities ) 426.95 608.66 T
+(normally ) 460.97 608.66 T
+(include ) 501.09 608.66 T
+(\324edit,) 534.54 608.66 T
+(\325) 554.67 608.66 T
+( ) 558 608.66 T
+(\324vie) 207 596.66 T
+(w) 222.3 596.66 T
+(,) 228.87 596.66 T
+(\325 ) 230.67 596.66 T
+(and ) 238.46 596.66 T
+(\324print\325 ) 257.37 596.66 T
+(commands ) 287.38 596.66 T
+(as ) 335.17 596.66 T
+(a) 347.96 596.66 T
+(v) 352.2 596.66 T
+(ailable ) 356.95 596.66 T
+(operations. ) 388.08 596.66 T
+(F) 436.7 596.66 T
+(or ) 442.11 596.66 T
+(instance ) 454.9 596.66 T
+(selecting ) 492.14 596.66 T
+(\324vie) 532.15 596.66 T
+(w\325) 547.45 596.66 T
+( ) 558 596.66 T
+(causes ) 207 584.66 T
+(the ) 236.25 584.66 T
+(utility ) 251.62 584.66 T
+(to ) 278.67 584.66 T
+(open ) 289.6 584.66 T
+(the ) 312.18 584.66 T
+(selected ) 327.55 584.66 T
+(\336le ) 362.91 584.66 T
+(in ) 378.84 584.66 T
+(a ) 389.77 584.66 T
+(vie) 397.36 584.66 T
+(wer ) 409.33 584.66 T
+(that ) 427.47 584.66 T
+(can ) 445.62 584.66 T
+(display ) 462.64 584.66 T
+(data ) 494.68 584.66 T
+(of ) 514.49 584.66 T
+(the ) 525.97 584.66 T
+(data) 541.34 584.66 T
+( ) 558 584.66 T
+(type held in that \336le.) 207 572.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(5.1) 184.1 542.66 T
+(Scenario Ar) 207 542.66 T
+(c) 262.93 542.66 T
+(hitecture) 268.39 542.66 T
+66 553/G264830 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Description ) 207 518.66 T
+(of ) 257.39 518.66 T
+(tasks ) 269.45 518.66 T
+(performed ) 293.17 518.66 T
+(by ) 338.55 518.66 T
+(the ) 352.28 518.66 T
+(application ) 368.23 518.66 T
+(is ) 416.4 518.66 T
+(brok) 426.8 518.66 T
+(en ) 445.03 518.66 T
+(do) 458.2 518.66 T
+(wn ) 467.95 518.66 T
+(into ) 483.89 518.66 T
+(three ) 503.18 518.66 T
+(discrete) 526.9 518.66 T
+( ) 558 518.66 T
+66 529/G269319 FmND
+(steps, for clarity: ) 207 506.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 487.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Initialization: The application constructs a vie) 220.74 487.99 T
+(w of the \336le system. ) 404.08 487.99 T
+66 499/G269320 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 471.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Getting ) 220.74 471.99 T
+(the ) 253.06 471.99 T
+(Command ) 267.59 471.99 T
+(List: ) 311.57 471.99 T
+(The ) 332.23 471.99 T
+(application ) 350.09 471.99 T
+(presents ) 396.84 471.99 T
+(the ) 431.92 471.99 T
+(command ) 446.46 471.99 T
+(list ) 488.21 471.99 T
+(for ) 502.75 471.99 T
+(a ) 516.72 471.99 T
+(selected ) 523.48 471.99 T
+66 483/G269321 FmND
+(data item. ) 220.74 459.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 443.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Performing the Command: The application performs a command on the selected ) 220.74 443.99 T
+66 455/G269322 FmND
+(data object.) 220.74 431.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(5.2) 184.1 401.66 T
+(Initialization ) 207 401.66 T
+66 412/G264833 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(One ) 207 377.66 T
+(of ) 228.38 377.66 T
+(the ) 241.44 377.66 T
+(interf) 258.39 377.66 T
+(aces ) 279.95 377.66 T
+(mentioned ) 301.88 377.66 T
+(belo) 348.83 377.66 T
+(w ) 365.8 377.66 T
+(is ) 377.74 377.66 T
+(the ) 389.14 377.66 T
+(\324DataSource\325 ) 406.08 377.66 T
+(object. ) 464.11 377.66 T
+(Recall ) 495.78 377.66 T
+(that ) 526.05 377.66 T
+(the) 545.78 377.66 T
+( ) 558 377.66 T
+66 388/G264834 FmND
+(DataSource ) 207 365.66 T
+(object ) 256.89 365.66 T
+(encapsulates ) 284.57 365.66 T
+(the ) 338.34 365.66 T
+(underlying ) 353.8 365.66 T
+(data ) 400.37 365.66 T
+(object ) 420.27 365.66 T
+(in ) 447.94 365.66 T
+(a ) 458.96 365.66 T
+(class ) 466.64 365.66 T
+(that ) 489.32 365.66 T
+(abstracts ) 507.55 365.66 T
+(the) 545.78 365.66 T
+( ) 558 365.66 T
+(underlying ) 207 353.66 T
+(data ) 254.04 353.66 T
+(storage ) 274.4 353.66 T
+(mechanism, ) 306.99 353.66 T
+(and ) 358.74 353.66 T
+(presents ) 376.89 353.66 T
+(its ) 413.37 353.66 T
+(consumers ) 426.52 353.66 T
+(with ) 473 353.66 T
+(a ) 494.49 353.66 T
+(common ) 502.63 353.66 T
+(data) 541.34 353.66 T
+( ) 558 353.66 T
+(access ) 207 341.66 T
+(and ) 236.05 341.66 T
+(typing ) 253.99 341.66 T
+(interf) 283.06 341.66 T
+(ace. ) 304.62 341.66 T
+(The ) 323.95 341.66 T
+(\336le ) 343 341.66 T
+(vie) 359.29 341.66 T
+(wer ) 371.26 341.66 T
+(application ) 389.75 341.66 T
+(queries ) 437.7 341.66 T
+(the ) 470.08 341.66 T
+(\336le ) 485.81 341.66 T
+(system ) 502.1 341.66 T
+(for ) 533.38 341.66 T
+(its) 548.55 341.66 T
+( ) 558 341.66 T
+(contents.) 207 329.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The ) 207 305.66 T
+(vie) 227.25 305.66 T
+(wer ) 239.22 305.66 T
+(instantiates ) 258.92 305.66 T
+(a ) 308.62 305.66 T
+(DataSource ) 317.76 305.66 T
+(object ) 369.11 305.66 T
+(for ) 398.26 305.66 T
+(each ) 414.62 305.66 T
+(\336le ) 437.64 305.66 T
+(in ) 455.13 305.66 T
+(the ) 467.61 305.66 T
+(directory) 484.53 305.66 T
+(. ) 519.98 305.66 T
+(Then ) 527.19 305.66 T
+(it) 552.44 305.66 T
+( ) 558 305.66 T
+66 316/G268682 FmND
+(instantiates ) 207 293.66 T
+(a ) 256.63 293.66 T
+(a ) 265.71 293.66 T
+(DataHandler ) 274.78 293.66 T
+(with ) 330.5 293.66 T
+(the ) 352.92 293.66 T
+(DataSource ) 369.77 293.66 T
+(as ) 421.05 293.66 T
+(its ) 434.02 293.66 T
+(constructor ) 448.1 293.66 T
+(ar) 497.73 293.66 T
+(gument. ) 505.32 293.66 T
+(The) 542.45 293.66 T
+( ) 558 293.66 T
+(DataHandler ) 207 281.66 T
+(object ) 261.74 281.66 T
+(pro) 289.83 281.66 T
+(vides ) 303.01 281.66 T
+(the ) 327.76 281.66 T
+(client ) 343.63 281.66 T
+(application ) 369.5 281.66 T
+(with ) 417.59 281.66 T
+(access ) 439.02 281.66 T
+(to ) 468.2 281.66 T
+(the ) 479.63 281.66 T
+(CommandMap,) 495.5 281.66 T
+( ) 558 281.66 T
+(which ) 207 269.66 T
+(pro) 234.17 269.66 T
+(vides ) 247.35 269.66 T
+(a ) 271.18 269.66 T
+(service ) 278.35 269.66 T
+(that ) 309.4 269.66 T
+(enables ) 327.13 269.66 T
+(access ) 359.84 269.66 T
+(to ) 388.11 269.66 T
+(commands ) 398.62 269.66 T
+(that ) 444.67 269.66 T
+(can ) 462.4 269.66 T
+(operate ) 479.01 269.66 T
+(on ) 511.17 269.66 T
+(the ) 523.89 269.66 T
+(data.) 538.84 269.66 T
+( ) 558 269.66 T
+(The ) 207 257.66 T
+(application ) 227.06 257.66 T
+(maintains ) 276.01 257.66 T
+(a ) 319.41 257.66 T
+(list ) 328.36 257.66 T
+(of ) 345.1 257.66 T
+(the ) 357.93 257.66 T
+(DataHandler ) 374.66 257.66 T
+(objects, ) 430.26 257.66 T
+(queries ) 465.6 257.66 T
+(them ) 498.99 257.66 T
+(for ) 523.5 257.66 T
+(their) 539.67 257.66 T
+( ) 558 257.66 T
+(names to generate its display) 207 245.66 T
+(. ) 321.89 245.66 T
+( ) 326.89 245.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/_objdef {PS192587} /type /dict /OBJ FmPD4
+[{PS192587} <</O /Layout /StartIndent 144 /TextIndent 144 >> /PUT FmPD4
+[/SP192587 {PS192587} /StClassMap FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(// for each file in the directory: ) 216 228.33 T
+66 237/G265095 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(File file = new File\050file_name\051; ) 216 217.33 T
+66 226/G265096 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(DataSource ds = new FileDataSource\050file\051; ) 216 206.33 T
+66 215/G266552 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(DataHandler dh = new DataHandler\050ds\051;) 216 195.33 T
+66 204/G266553 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 10 Q
+(5.3) 184.1 165.66 T
+(Getting the Command List) 207 165.66 T
+66 176/G266554 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Once ) 207 141.66 T
+(the ) 230.74 141.66 T
+(application ) 245.61 141.66 T
+(has ) 292.69 141.66 T
+(been ) 308.66 141.66 T
+(initialized ) 330.19 141.66 T
+(and ) 372.83 141.66 T
+(has ) 389.91 141.66 T
+(presented ) 405.89 141.66 T
+(a ) 446.85 141.66 T
+(list ) 453.93 141.66 T
+(of ) 468.8 141.66 T
+(\336les ) 479.78 141.66 T
+(to ) 499.09 141.66 T
+(the ) 509.51 141.66 T
+(user) 524.38 141.66 T
+(, ) 540.64 141.66 T
+(the) 545.78 141.66 T
+( ) 558 141.66 T
+66 152/G264836 FmND
+(user ) 207 129.66 T
+(can ) 226.63 129.66 T
+(select ) 243.48 129.66 T
+(a ) 269.22 129.66 T
+(\336le ) 276.63 129.66 T
+(on ) 292.38 129.66 T
+(the ) 305.35 129.66 T
+(list. ) 320.54 129.66 T
+(When ) 338.24 129.66 T
+(the ) 365.1 129.66 T
+(user ) 380.29 129.66 T
+(selects ) 399.92 129.66 T
+(a ) 429.55 129.66 T
+(\336le, ) 436.96 129.66 T
+(the ) 455.21 129.66 T
+(application ) 470.4 129.66 T
+(displays ) 517.81 129.66 T
+(a) 553.56 129.66 T
+( ) 558 129.66 T
+(popup menu that lists the a) 207 117.66 T
+(v) 314.3 117.66 T
+(ailable operations on that \336le. ) 319.05 117.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299065 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "9" 9
+%%Page: "10" 10
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.10/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Usa) 189 739.85 T
+(g) 205.42 739.85 T
+(e Scenarios) 211.01 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(10) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 21) 76.12 60.29 T
+[/EMC FmPD4
+[/StoreName /P299065 /StRetrieve FmPD4
+[/StoreName /P299065 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 189 680.66 T
+(application ) 210.42 680.66 T
+(implements ) 260.73 680.66 T
+(this ) 313.27 680.66 T
+(functionality ) 333.59 680.66 T
+(by ) 390.57 680.66 T
+(requesting ) 406.43 680.66 T
+(the ) 453.96 680.66 T
+(list ) 472.05 680.66 T
+(of ) 490.15 680.66 T
+(a) 504.35 680.66 T
+(v) 508.59 680.66 T
+(ailable) 513.34 680.66 T
+( ) 540 680.66 T
+48 691/G269326 FmND
+(commands ) 189 668.66 T
+(from ) 237.85 668.66 T
+(the ) 262.82 668.66 T
+(DataHandler ) 280.56 668.66 T
+(object ) 337.18 668.66 T
+(associated ) 367.14 668.66 T
+(with ) 413.76 668.66 T
+(a ) 437.07 668.66 T
+(\336le. ) 447.03 668.66 T
+(The ) 467.84 668.66 T
+(DataHandler) 488.91 668.66 T
+( ) 540 668.66 T
+(retrie) 189 656.66 T
+(v) 209.85 656.66 T
+(es ) 214.7 656.66 T
+(the ) 228.01 656.66 T
+(MIME ) 245.22 656.66 T
+(type ) 277.43 656.66 T
+(of ) 299.63 656.66 T
+(the ) 312.95 656.66 T
+(data ) 330.15 656.66 T
+(from ) 351.8 656.66 T
+(the ) 376.22 656.66 T
+(DataSource ) 393.43 656.66 T
+(object ) 445.06 656.66 T
+(and ) 474.49 656.66 T
+(queries ) 493.91 656.66 T
+(the) 527.78 656.66 T
+( ) 540 656.66 T
+(CommandMap ) 189 644.66 T
+(for ) 251.94 644.66 T
+(operations ) 266.54 644.66 T
+(that ) 311.14 644.66 T
+(are ) 329.08 644.66 T
+(a) 344.23 644.66 T
+(v) 348.47 644.66 T
+(ailable ) 353.22 644.66 T
+(on ) 382.82 644.66 T
+(that ) 395.76 644.66 T
+(type. ) 413.7 644.66 T
+(The ) 436.36 644.66 T
+(application ) 454.85 644.66 T
+(interprets) 502.23 644.66 T
+( ) 540 644.66 T
+(the ) 189 632.66 T
+(list ) 204.66 632.66 T
+(and ) 220.33 632.66 T
+(presents ) 238.2 632.66 T
+(it ) 274.41 632.66 T
+(to ) 283.41 632.66 T
+(the ) 294.63 632.66 T
+(user ) 310.28 632.66 T
+(on ) 330.38 632.66 T
+(a ) 343.82 632.66 T
+(popup ) 351.7 632.66 T
+(menu. ) 380.14 632.66 T
+(The ) 408.29 632.66 T
+(user ) 427.28 632.66 T
+(then ) 447.38 632.66 T
+(selects ) 468.04 632.66 T
+(one ) 498.13 632.66 T
+(of ) 516.01 632.66 T
+(the) 527.78 632.66 T
+( ) 540 632.66 T
+(operations from that list.) 189 620.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(// get the command list for an object ) 198 603.33 T
+48 612/G264837 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(CommandInfo cmdInfo[] = dh.getPreferredCommands\050\051;) 198 592.33 T
+48 601/G265100 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+48 590/G265549 FmND
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(PopupMenu popup = new PopupMenu\050\322Item Menu\323\051;) 198 570.33 T
+48 579/G265103 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+48 568/G264838 FmND
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(// populate the popup with available commands ) 198 548.33 T
+48 557/G265550 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(for \050i = 0; i < cmdInfo.length; i++\051) 198 537.33 T
+48 546/G265104 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(   popup.add\050cmdInfo[i].getCommandName\050\051\051; ) 198 526.33 T
+( ) 430.2 526.33 T
+48 535/G265105 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+48 524/G265106 FmND
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(// add and show popup ) 198 504.33 T
+48 513/G265551 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(add\050popup\051; ) 198 493.33 T
+48 502/G265107 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(popup.show\050x_pos, y_pos\051; ) 198 482.33 T
+48 491/G265108 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 10 Q
+(5.4) 166.1 452.66 T
+(P) 189 452.66 T
+(erf) 195.37 452.66 T
+(orming a Command) 207.95 452.66 T
+48 463/G264839 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(After ) 189 428.66 T
+(the ) 213.25 428.66 T
+(user ) 228.62 428.66 T
+(has ) 248.43 428.66 T
+(selected ) 264.92 428.66 T
+(a ) 300.28 428.66 T
+(command ) 307.87 428.66 T
+(from ) 350.46 428.66 T
+(the ) 373.05 428.66 T
+(popup ) 388.42 428.66 T
+(menu, ) 416.57 428.66 T
+(the ) 444.45 428.66 T
+(application ) 459.82 428.66 T
+(uses ) 507.41 428.66 T
+(the) 527.78 428.66 T
+( ) 540 428.66 T
+48 439/G264840 FmND
+(appropriate ) 189 416.66 T
+(CommandInfo ) 238.31 416.66 T
+(class ) 300.41 416.66 T
+(to ) 323.62 416.66 T
+(retrie) 335.17 416.66 T
+(v) 356.02 416.66 T
+(e ) 360.87 416.66 T
+(the ) 369.08 416.66 T
+(Bean ) 385.07 416.66 T
+(that ) 409.39 416.66 T
+(corresponds ) 428.16 416.66 T
+(to ) 480.25 416.66 T
+(the ) 491.8 416.66 T
+(selected) 507.79 416.66 T
+( ) 540 416.66 T
+(command, ) 189 404.66 T
+(and ) 235.25 404.66 T
+(associates ) 254.01 404.66 T
+(the ) 298.31 404.66 T
+(data ) 314.84 404.66 T
+(with ) 335.81 404.66 T
+(that ) 357.91 404.66 T
+(Bean ) 377.22 404.66 T
+(using ) 402.08 404.66 T
+(the ) 428.06 404.66 T
+(appropriate ) 444.6 404.66 T
+(mechanism) 494.45 404.66 T
+( ) 540 404.66 T
+(\050DataHandler) 189 392.66 T
+(, ) 243.02 392.66 T
+(Externalization ) 248.55 392.66 T
+(etc.\051. ) 312.68 392.66 T
+(Some ) 335.7 392.66 T
+(CommandObjects ) 361.51 392.66 T
+(\050vie) 436.76 392.66 T
+(wers ) 452.06 392.66 T
+(for ) 473.97 392.66 T
+(instance\051 ) 488.66 392.66 T
+(are) 527.79 392.66 T
+( ) 540 392.66 T
+(subclassed ) 189 380.66 T
+(from ) 234.42 380.66 T
+(ja) 256.51 380.66 T
+(v) 263.53 380.66 T
+(a.a) 268.28 380.66 T
+(wt.Component ) 279.51 380.66 T
+(and ) 341.33 380.66 T
+(require ) 358.43 380.66 T
+(that ) 389.4 380.66 T
+(the) 407.05 380.66 T
+(y ) 419.12 380.66 T
+(are ) 426.77 380.66 T
+(gi) 441.63 380.66 T
+(v) 449.16 380.66 T
+(en ) 454.01 380.66 T
+(a ) 466.11 380.66 T
+(parent ) 473.2 380.66 T
+(container) 500.84 380.66 T
+(.) 537.5 380.66 T
+( ) 540 380.66 T
+(Others ) 189 368.66 T
+(\050lik) 218.97 368.66 T
+(e ) 232.76 368.66 T
+(a ) 240.5 368.66 T
+(def) 248.25 368.66 T
+(ault ) 260.92 368.66 T
+(print ) 279.23 368.66 T
+(Command\051 ) 301.42 368.66 T
+(might ) 349.73 368.66 T
+(not ) 376.38 368.66 T
+(present ) 392.46 368.66 T
+(a ) 424.65 368.66 T
+(user ) 432.4 368.66 T
+(interf) 452.37 368.66 T
+(ace. ) 473.93 368.66 T
+(This ) 493.05 368.66 T
+(allo) 514.14 368.66 T
+(ws) 528.89 368.66 T
+( ) 540 368.66 T
+(them ) 189 356.66 T
+(to ) 213.24 356.66 T
+(be ) 225.25 356.66 T
+(\337e) 238.93 356.66 T
+(xible ) 248.78 356.66 T
+(enough ) 273.01 356.66 T
+(to ) 306.69 356.66 T
+(function ) 318.7 356.66 T
+(as ) 356.27 356.66 T
+(stand ) 368.83 356.66 T
+(alone ) 394.18 356.66 T
+(vie) 420.07 356.66 T
+(wer/editors, ) 432.04 356.66 T
+(or ) 483.77 356.66 T
+(perhaps ) 496.33 356.66 T
+(as) 531.67 356.66 T
+( ) 540 356.66 T
+(components ) 189 344.66 T
+(in ) 242.13 344.66 T
+(a ) 254.71 344.66 T
+(compound ) 263.94 344.66 T
+(document ) 310.96 344.66 T
+(system. ) 355.2 344.66 T
+(The ) 390.28 344.66 T
+(\324application\325 ) 410.63 344.66 T
+(is ) 466.52 344.66 T
+(responsible ) 477.99 344.66 T
+(for) 528.34 344.66 T
+( ) 540 344.66 T
+(pro) 189 332.66 T
+(viding ) 202.18 332.66 T
+(the ) 237.78 332.66 T
+(proper ) 260.04 332.66 T
+(en) 296.18 332.66 T
+(vironment ) 305.22 332.66 T
+(\050containment, ) 356.37 332.66 T
+(life ) 421.68 332.66 T
+(c) 445.06 332.66 T
+(ycle, ) 449.35 332.66 T
+(etc.\051 ) 478.55 332.66 T
+(for ) 506.08 332.66 T
+(the) 527.78 332.66 T
+( ) 540 332.66 T
+(CommandObject ) 189 320.66 T
+(to ) 259.77 320.66 T
+(e) 269.98 320.66 T
+(x) 274.27 320.66 T
+(ecute ) 279.12 320.66 T
+(in. ) 302.66 320.66 T
+(W) 315.38 320.66 T
+(e ) 324.02 320.66 T
+(e) 330.89 320.66 T
+(xpect ) 335.18 320.66 T
+(that ) 359.28 320.66 T
+(the ) 376.72 320.66 T
+(requirements ) 391.37 320.66 T
+(will ) 446.02 320.66 T
+(be ) 464.02 320.66 T
+(lightweight ) 475.89 320.66 T
+(\050not) 523.89 320.66 T
+( ) 540 320.66 T
+(much be) 189 308.66 T
+(yond Ja) 223.01 308.66 T
+(v) 253.64 308.66 T
+(aBeans\252 containers and A) 258.39 308.66 T
+(WT containment for visible components\051.) 366.43 308.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(// get the command object ) 198 291.33 T
+48 300/G264841 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(Object cmdBean = cmdInfo[cmd_id].getCommandObject\050dh,) 198 280.33 T
+48 289/G265109 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(                                           ) 198 269.33 T
+(this.getClassLoader\050\051\051; ) 410.85 269.33 T
+48 278/G267541 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(  ... // use serialization/externalization where appropriate) 198 258.33 T
+48 267/G265113 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+48 256/G264843 FmND
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(my_awt_container.add\050\050Component\051cmdBean\051;) 198 236.33 T
+48 245/G265555 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 10 Q
+(5.5) 166.1 206.66 T
+(An Alternative Scenario) 189 206.66 T
+48 217/G264844 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 189 182.66 T
+(\336rst ) 208.66 182.66 T
+(scenario ) 228.32 182.66 T
+(w) 265.75 182.66 T
+(as ) 272.87 182.66 T
+(the ) 285.3 182.66 T
+(\324canonical\325 ) 301.63 182.66 T
+(case. ) 350.71 182.66 T
+(There ) 374.53 182.66 T
+(are ) 401.96 182.66 T
+(also ) 418.27 182.66 T
+(circumstances ) 438.49 182.66 T
+(where ) 499.24 182.66 T
+(the) 527.78 182.66 T
+( ) 540 182.66 T
+48 193/G264845 FmND
+(application ) 189 170.66 T
+(has ) 236.35 170.66 T
+(already ) 252.6 170.66 T
+(created ) 284.95 170.66 T
+(objects ) 316.73 170.66 T
+(to ) 347.98 170.66 T
+(represent ) 358.67 170.66 T
+(its ) 398.23 170.66 T
+(data. ) 410.6 170.66 T
+(In ) 432.67 170.66 T
+(this ) 443.92 170.66 T
+(case ) 461.29 170.66 T
+(creating ) 481.41 170.66 T
+(an ) 516.53 170.66 T
+(in-) 528.89 170.66 T
+(memory ) 189 158.66 T
+(instance ) 224.98 158.66 T
+(of ) 260.39 158.66 T
+(a ) 271.37 158.66 T
+(DataSource ) 278.46 158.66 T
+(that ) 327.75 158.66 T
+(con) 345.4 158.66 T
+(v) 359.44 158.66 T
+(erted ) 364.29 158.66 T
+(an ) 386.93 158.66 T
+(e) 399.01 158.66 T
+(xisting ) 403.3 158.66 T
+(object ) 433.18 158.66 T
+(into ) 460.27 158.66 T
+(an ) 478.47 158.66 T
+(InputStream) 490.56 158.66 T
+( ) 540 158.66 T
+(is an inef) 189 146.66 T
+(\336cient use of system resources and can result in a loss of data \336delity) 225.41 146.66 T
+(.) 501.11 146.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(In ) 189 122.66 T
+(these ) 206.87 122.66 T
+(cases, ) 236.95 122.66 T
+(the ) 270.08 122.66 T
+(application ) 291.84 122.66 T
+(can ) 345.82 122.66 T
+(instantiate ) 369.23 122.66 T
+(a ) 419.88 122.66 T
+(DataHandler) 433.85 122.66 T
+(, ) 484.54 122.66 T
+(using ) 496.58 122.66 T
+(the) 527.78 122.66 T
+( ) 540 122.66 T
+48 133/G268749 FmND
+(DataHandler\050Object ) 189 110.66 T
+(obj, ) 274 110.66 T
+(String ) 293.19 110.66 T
+(mimeT) 321.56 110.66 T
+(ype\051 ) 349.65 110.66 T
+(constructor) 371.33 110.66 T
+(. ) 415.77 110.66 T
+(DataHandler ) 422.19 110.66 T
+(implements ) 477.19 110.66 T
+(the) 527.78 110.66 T
+( ) 540 110.66 T
+(T) 189 98.66 T
+(ransferable ) 194.76 98.66 T
+(interf) 242.86 98.66 T
+(ace, ) 264.42 98.66 T
+(so ) 283.92 98.66 T
+(the ) 296.5 98.66 T
+(consuming ) 312.4 98.66 T
+(Bean ) 359.97 98.66 T
+(can ) 384.2 98.66 T
+(request ) 401.76 98.66 T
+(representations ) 434.33 98.66 T
+(other ) 498.55 98.66 T
+(than) 522.78 98.66 T
+( ) 540 98.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299678 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "10" 10
+%%Page: "11" 11
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.11/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 207 739.85 T
+(y Frame) 235.6 739.85 T
+(w) 269.98 739.85 T
+(ork Interfaces) 276.8 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(11) 522.26 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+[/EMC FmPD4
+[/StoreName /P299678 /StRetrieve FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(InputStreams. ) 207 680.66 T
+(The ) 268.54 680.66 T
+(DataHandler ) 289.79 680.66 T
+(also ) 346.59 680.66 T
+(constructs ) 368.4 680.66 T
+(a ) 414.66 680.66 T
+(DataSource ) 424.8 680.66 T
+(for ) 477.16 680.66 T
+(consumers ) 494.52 680.66 T
+(that) 543 680.66 T
+( ) 558 680.66 T
+(request ) 207 668.66 T
+(it. ) 239.72 668.66 T
+(The ) 251.62 668.66 T
+(DataContentHandler ) 271.01 668.66 T
+(mechanism ) 357.61 668.66 T
+(is ) 406.99 668.66 T
+(e) 417.5 668.66 T
+(xtended ) 421.79 668.66 T
+(to ) 457.29 668.66 T
+(also ) 468.91 668.66 T
+(allo) 488.86 668.66 T
+(w ) 503.61 668.66 T
+(con) 514.67 668.66 T
+(v) 528.71 668.66 T
+(ersion) 533.56 668.66 T
+( ) 558 668.66 T
+(from Objects to InputStreams.) 207 656.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299678 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The ) 207 632.66 T
+(follo) 224.84 632.66 T
+(wing ) 243.48 632.66 T
+(code ) 265.77 632.66 T
+(is ) 286.94 632.66 T
+(an ) 295.89 632.66 T
+(e) 307.62 632.66 T
+(xample ) 311.91 632.66 T
+(of ) 343.64 632.66 T
+(a ) 354.26 632.66 T
+(data ) 360.99 632.66 T
+(base ) 379.94 632.66 T
+(front ) 400 632.66 T
+(end ) 421.73 632.66 T
+(using ) 438.45 632.66 T
+(the ) 462.41 632.66 T
+(J) 476.92 632.66 T
+(AF) 480.21 632.66 T
+(, ) 492.19 632.66 T
+(which ) 496.98 632.66 T
+(pro) 523.71 632.66 T
+(vides) 536.89 632.66 T
+( ) 558 632.66 T
+66 643/G268758 FmND
+(query results in terms of objects. ) 207 620.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+( /**) 216 603.33 T
+66 612/G264846 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(  * Get the viewer to view my query results:) 216 592.33 T
+66 601/G265114 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(  */) 216 581.33 T
+66 590/G265115 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+( Component getQueryViewer\050QueryObject qo\051 throws Exception {) 216 570.33 T
+66 579/G265116 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(    String mime_type = qo.getType\050\051;) 216 559.33 T
+66 568/G265118 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(    Object q_result = qo.getResultObject\050\051;) 216 548.33 T
+66 557/G265119 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(    DataHandler my_dh = new DataHandler\050q_result, mime_type\051;) 216 537.33 T
+66 546/G265120 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+66 535/G265559 FmND
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(   return \050Component\051my_dh.getCommand\050\322view\323\051.) 216 515.33 T
+66 524/G265123 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(                     getCommandObject\050my_dh, null\051\051;) 216 504.33 T
+66 513/G273709 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(  }) 216 493.33 T
+66 502/G265124 FmND
+72 450.33 558 453.33 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+207 452.48 558 452.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 452.48 198 452.48 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(6.0) 181.32 457.33 T
+(Primar) 207 457.33 T
+(y Frame) 245.14 457.33 T
+(w) 290.98 457.33 T
+(ork Interfaces) 300.07 457.33 T
+66 469/G264848 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(This ) 207 429.66 T
+(section ) 227.46 429.66 T
+(describes ) 258.46 429.66 T
+(interf) 298.35 429.66 T
+(aces ) 319.91 429.66 T
+(required ) 339.8 429.66 T
+(to ) 375.8 429.66 T
+(implement ) 386.25 429.66 T
+(the ) 431.71 429.66 T
+(J) 446.61 429.66 T
+(AF ) 449.9 429.66 T
+(architecture ) 465.35 429.66 T
+(introduced) 515.23 429.66 T
+( ) 558 429.66 T
+66 440/G264849 FmND
+(in Section Three.) 207 417.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(6.1) 184.1 387.66 T
+(The DataSour) 207 387.66 T
+(ce Interface) 271.81 387.66 T
+66 398/G264850 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 207 363.66 T
+(DataSource ) 227.66 363.66 T
+(interf) 279.41 363.66 T
+(ace ) 300.97 363.66 T
+(is ) 319.4 363.66 T
+(used ) 331.18 363.66 T
+(by ) 354.62 363.66 T
+(the ) 369.72 363.66 T
+(DataHandler ) 387.05 363.66 T
+(\050and ) 443.25 363.66 T
+(possibly ) 466.12 363.66 T
+(other ) 504.57 363.66 T
+(classes) 530.23 363.66 T
+( ) 558 363.66 T
+66 374/G264851 FmND
+(else) 207 351.66 T
+(where\051 ) 222.3 351.66 T
+(to ) 255.11 351.66 T
+(access ) 267.94 351.66 T
+(the ) 298.53 351.66 T
+(underlying ) 315.8 351.66 T
+(data. ) 364.18 351.66 T
+(The ) 388.4 351.66 T
+(DataSource ) 409 351.66 T
+(object ) 460.7 351.66 T
+(encapsulates ) 490.19 351.66 T
+(the) 545.78 351.66 T
+( ) 558 351.66 T
+(underlying ) 207 339.66 T
+(data ) 253.7 339.66 T
+(object ) 273.73 339.66 T
+(in ) 301.55 339.66 T
+(a ) 312.7 339.66 T
+(class ) 320.51 339.66 T
+(that ) 343.32 339.66 T
+(abstracts ) 361.69 339.66 T
+(the ) 400.05 339.66 T
+(underlying ) 415.64 339.66 T
+(data ) 462.35 339.66 T
+(storage ) 482.38 339.66 T
+(and ) 514.63 339.66 T
+(typing) 532.44 339.66 T
+( ) 558 339.66 T
+(mechanism, and presents its consumers with a common data access interf) 207 327.66 T
+(ace. ) 500.46 327.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The ) 207 303.66 T
+(J) 226.7 303.66 T
+(AF ) 229.99 303.66 T
+(pro) 246.92 303.66 T
+(vides ) 260.1 303.66 T
+(DataSource ) 285.36 303.66 T
+(implementations ) 336.16 303.66 T
+(that ) 406.98 303.66 T
+(support ) 426.12 303.66 T
+(\336le ) 460.27 303.66 T
+(systems ) 477.2 303.66 T
+(and ) 513.02 303.66 T
+(URLs.) 531.61 303.66 T
+66 314/G268257 FmND
+(Application ) 207 291.66 T
+(system ) 257.64 291.66 T
+(v) 288.85 291.66 T
+(endors ) 293.7 291.66 T
+(can ) 323.78 291.66 T
+(use ) 341.09 291.66 T
+(the ) 357.84 291.66 T
+(DataSource ) 373.49 291.66 T
+(interf) 423.56 291.66 T
+(ace ) 445.12 291.66 T
+(to ) 461.87 291.66 T
+(implement ) 473.07 291.66 T
+(their ) 519.28 291.66 T
+(o) 541.03 291.66 T
+(wn) 545.78 291.66 T
+( ) 558 291.66 T
+(specialized ) 207 279.66 T
+(DataSource ) 255.89 279.66 T
+(classes ) 306.99 279.66 T
+(to ) 339.22 279.66 T
+(support ) 351.45 279.66 T
+(IMAP ) 385.91 279.66 T
+(serv) 415.37 279.66 T
+(ers, ) 431.88 279.66 T
+(object ) 450.49 279.66 T
+(databases, ) 479.39 279.66 T
+(or ) 524.66 279.66 T
+(other) 537.45 279.66 T
+( ) 558 279.66 T
+(sources. ) 207 267.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(There ) 207 243.66 T
+(is ) 232.84 243.66 T
+(a ) 242.04 243.66 T
+(one-to-one ) 249 243.66 T
+(correspondence ) 294.84 243.66 T
+(between ) 360.12 243.66 T
+(underlying ) 395.96 243.66 T
+(data ) 441.82 243.66 T
+(items ) 461 243.66 T
+(\050\336les ) 485.19 243.66 T
+(for ) 507.72 243.66 T
+(instance\051) 521.9 243.66 T
+( ) 558 243.66 T
+66 254/G268273 FmND
+(and ) 207 231.66 T
+(DataSource ) 226.51 231.66 T
+(objects. ) 278.23 231.66 T
+(Also ) 314.13 231.66 T
+(note ) 338.09 231.66 T
+(that ) 360.38 231.66 T
+(the ) 380.45 231.66 T
+(class ) 397.74 231.66 T
+(that ) 422.25 231.66 T
+(implements ) 442.32 231.66 T
+(the ) 494.06 231.66 T
+(DataSource) 511.35 231.66 T
+( ) 558 231.66 T
+(interf) 207 219.66 T
+(ace ) 228.56 219.66 T
+(is ) 244.84 219.66 T
+(responsible ) 254.47 219.66 T
+(for ) 302.98 219.66 T
+(typing ) 317.59 219.66 T
+(the ) 346.11 219.66 T
+(data. ) 361.29 219.66 T
+(T) 383.41 219.66 T
+(o ) 388.72 219.66 T
+(manage ) 396.68 219.66 T
+(a ) 430.74 219.66 T
+(\336le ) 438.14 219.66 T
+(system, ) 453.87 219.66 T
+(a ) 487.11 219.66 T
+(DataSource ) 494.51 219.66 T
+(can) 544.12 219.66 T
+( ) 558 219.66 T
+(use ) 207 207.66 T
+(a ) 223.43 207.66 T
+(simple ) 230.97 207.66 T
+(mechanism ) 260.74 207.66 T
+(such ) 309.39 207.66 T
+(as ) 330.81 207.66 T
+(a ) 342.24 207.66 T
+(\336le ) 349.78 207.66 T
+(e) 365.66 207.66 T
+(xtension ) 369.95 207.66 T
+(to ) 406.94 207.66 T
+(type ) 417.82 207.66 T
+(data, ) 438.14 207.66 T
+(while ) 460.39 207.66 T
+(a ) 485.71 207.66 T
+(DataSource ) 493.25 207.66 T
+(that) 543 207.66 T
+( ) 558 207.66 T
+(supports ) 207 195.66 T
+(incoming ) 243.21 195.66 T
+(web-based ) 283.32 195.66 T
+(data ) 328.4 195.66 T
+(can ) 347.38 195.66 T
+(actually ) 363.59 195.66 T
+(e) 397.57 195.66 T
+(xamine ) 401.86 195.66 T
+(the ) 433.62 195.66 T
+(data ) 448.17 195.66 T
+(stream ) 467.15 195.66 T
+(to ) 496.13 195.66 T
+(determine ) 506.24 195.66 T
+(its) 548.55 195.66 T
+( ) 558 195.66 T
+(type. ) 207 183.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(6.2) 184.1 153.66 T
+(The DataHandler Class) 207 153.66 T
+66 164/G264860 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 207 129.66 T
+(DataHandler ) 225.5 129.66 T
+(class ) 279.54 129.66 T
+(encapsulates ) 301.93 129.66 T
+(a ) 355.42 129.66 T
+(Data ) 362.81 129.66 T
+(object, ) 384.64 129.66 T
+(and ) 414.53 129.66 T
+(pro) 431.92 129.66 T
+(vides ) 445.1 129.66 T
+(methods ) 469.16 129.66 T
+(which ) 506 129.66 T
+(act ) 533.39 129.66 T
+(on) 548 129.66 T
+( ) 558 129.66 T
+66 140/G269346 FmND
+(that data. ) 207 117.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299091 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "11" 11
+%%Page: "12" 12
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.12/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Primar) 189 739.85 T
+(y Frame) 217.6 739.85 T
+(w) 251.98 739.85 T
+(ork Interfaces) 258.8 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(12) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 21) 76.12 60.29 T
+[/EMC FmPD4
+[/StoreName /P299091 /StRetrieve FmPD4
+[/StoreName /P299091 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(DataHandler ) 189 680.66 T
+(encapsulates ) 242.37 680.66 T
+(the ) 295.19 680.66 T
+(type-to-command ) 309.69 680.66 T
+(object ) 383.07 680.66 T
+(binding ) 409.78 680.66 T
+(service ) 442.62 680.66 T
+(of ) 473.22 680.66 T
+(the ) 483.83 680.66 T
+(Command) 498.33 680.66 T
+( ) 540 680.66 T
+48 691/G269347 FmND
+(Map ) 189 668.66 T
+(interf) 210.05 668.66 T
+(ace ) 231.61 668.66 T
+(for ) 247.65 668.66 T
+(applications. ) 262.04 668.66 T
+(It ) 315.59 668.66 T
+(pro) 324.42 668.66 T
+(vides ) 337.6 668.66 T
+(a ) 361.43 668.66 T
+(handle ) 368.6 668.66 T
+(to ) 397.98 668.66 T
+(the ) 408.48 668.66 T
+(operations ) 423.42 668.66 T
+(and ) 467.8 668.66 T
+(data ) 484.97 668.66 T
+(a) 504.35 668.66 T
+(v) 508.59 668.66 T
+(ailable) 513.34 668.66 T
+( ) 540 668.66 T
+(on a data element. ) 189 656.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(DataHandler ) 189 632.66 T
+(also ) 243.53 632.66 T
+(implements ) 263.08 632.66 T
+(the ) 313.18 632.66 T
+(T) 328.84 632.66 T
+(ransferable ) 334.6 632.66 T
+(interf) 382.46 632.66 T
+(ace. ) 404.02 632.66 T
+(This ) 423.28 632.66 T
+(allo) 444.49 632.66 T
+(ws ) 459.24 632.66 T
+(applications ) 473.79 632.66 T
+(and) 525.56 632.66 T
+( ) 540 632.66 T
+48 643/G269348 FmND
+(applets ) 189 620.66 T
+(to ) 221.63 620.66 T
+(retrie) 233.71 620.66 T
+(v) 254.56 620.66 T
+(e ) 259.41 620.66 T
+(alternati) 268.15 620.66 T
+(v) 300.67 620.66 T
+(e ) 305.52 620.66 T
+(representations ) 314.26 620.66 T
+(of ) 379.1 620.66 T
+(the ) 391.73 620.66 T
+(underlying ) 408.24 620.66 T
+(data, ) 455.87 620.66 T
+(in ) 479.33 620.66 T
+(the ) 491.41 620.66 T
+(form ) 507.93 620.66 T
+(of) 531.67 620.66 T
+( ) 540 620.66 T
+(objects. ) 189 608.66 T
+(The ) 223.48 608.66 T
+(DataHandler ) 242.67 608.66 T
+(encapsulates ) 297.41 608.66 T
+(the ) 351.59 608.66 T
+(interf) 367.46 608.66 T
+(ace ) 389.02 608.66 T
+(to ) 405.99 608.66 T
+(the ) 417.41 608.66 T
+(component ) 433.28 608.66 T
+(repository ) 481.36 608.66 T
+(and) 525.56 608.66 T
+( ) 540 608.66 T
+(data source. ) 189 596.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Let\325) 189 572.66 T
+(s e) 205.11 572.66 T
+(xamine these groups of features in more detail:) 215.79 572.66 T
+48 583/G268296 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/_objdef {PS192588} /type /dict /OBJ FmPD4
+[{PS192588} <</O /Layout /SpaceBefore 12 /StartIndent 135 /TextIndent 95.3 >> /PUT FmPD4
+[/SP192588 {PS192588} /StClassMap FmPD4
+[/Subtype (_Heading3) cvn /Class /SP192588 /StPNE FmPD4
+[/_objdef {CS3703} /type /dict /OBJ FmPD4
+[{CS3703} <</O /Layout /LineHeight 9>> /PUT FmPD4
+[/SC3703 {CS3703} /StClassMap FmPD4
+[/Subtype /Span  /Class /SC3703 /StPNE FmPD4
+[/StBMC FmPD4
+0 9 Q
+(6.2.1) 159.98 549.33 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(Data Encapsulation) 189 549.33 T
+48 558/G267592 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/_objdef {PS192589} /type /dict /OBJ FmPD4
+[{PS192589} <</O /Layout /SpaceAfter 6 /StartIndent 135 /TextIndent 135 >> /PUT FmPD4
+[/SP192589 {PS192589} /StClassMap FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(A ) 189 536.66 T
+(DataHandler ) 198.62 536.66 T
+(object ) 252.11 536.66 T
+(can ) 278.95 536.66 T
+(only ) 295.23 536.66 T
+(be ) 315.41 536.66 T
+(instantiated ) 327.25 536.66 T
+(with ) 375.76 536.66 T
+(data. ) 395.94 536.66 T
+(The ) 417.5 536.66 T
+(data ) 435.45 536.66 T
+(can ) 454.51 536.66 T
+(be ) 470.79 536.66 T
+(in ) 482.63 536.66 T
+(the ) 492.81 536.66 T
+(form ) 507.43 536.66 T
+(of ) 529.27 536.66 T
+48 547/G269352 FmND
+(an object implementing the DataSource interf) 189 524.66 T
+(ace \050the preferred w) 371.37 524.66 T
+(ay\051 or as an object ) 451.5 524.66 T
+(with an associated content type. ) 189 512.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Once ) 189 488.66 T
+(instantiated, ) 214.75 488.66 T
+(the ) 268.01 488.66 T
+(DataHandler ) 284.88 488.66 T
+(tries ) 340.62 488.66 T
+(to ) 362.49 488.66 T
+(pro) 374.92 488.66 T
+(vide ) 388.1 488.66 T
+(its ) 409.96 488.66 T
+(data ) 424.06 488.66 T
+(in ) 445.37 488.66 T
+(a ) 457.8 488.66 T
+(\337e) 466.89 488.66 T
+(xible ) 476.74 488.66 T
+(w) 501.39 488.66 T
+(ay) 508.51 488.66 T
+(. ) 517.3 488.66 T
+(The) 524.45 488.66 T
+( ) 540 488.66 T
+48 499/G268297 FmND
+(DataHandler ) 189 476.66 T
+(implements ) 243.45 476.66 T
+(the ) 293.48 476.66 T
+(T) 309.06 476.66 T
+(ransferable ) 314.82 476.66 T
+(interf) 362.6 476.66 T
+(ace ) 384.16 476.66 T
+(which ) 400.84 476.66 T
+(allo) 428.64 476.66 T
+(ws ) 443.39 476.66 T
+(an ) 457.86 476.66 T
+(object ) 470.66 476.66 T
+(to ) 498.46 476.66 T
+(pro) 509.6 476.66 T
+(vide) 522.78 476.66 T
+( ) 540 476.66 T
+(alternati) 189 464.66 T
+(v) 221.52 464.66 T
+(e ) 226.37 464.66 T
+(representations ) 233.53 464.66 T
+(of ) 296.8 464.66 T
+(the ) 307.85 464.66 T
+(data. ) 322.79 464.66 T
+(The ) 344.67 464.66 T
+(T) 362.95 464.66 T
+(ransferable ) 368.71 464.66 T
+(interf) 415.85 464.66 T
+(ace\325) 437.41 464.66 T
+(s ) 453.51 464.66 T
+(functionality ) 460.12 464.66 T
+(can ) 513.96 464.66 T
+(be) 530.56 464.66 T
+( ) 540 464.66 T
+(e) 189 452.66 T
+(xtended ) 193.29 452.66 T
+(via ) 228.65 452.66 T
+(objects ) 244.56 452.66 T
+(implementing ) 276.59 452.66 T
+(the ) 335.84 452.66 T
+(DataContentHandler ) 351.76 452.66 T
+(interf) 438.21 452.66 T
+(ace, ) 459.77 452.66 T
+(and ) 479.29 452.66 T
+(then ) 497.42 452.66 T
+(made) 518.34 452.66 T
+( ) 540 452.66 T
+(a) 189 440.66 T
+(v) 193.24 440.66 T
+(ailable ) 197.99 440.66 T
+(to ) 228.46 440.66 T
+(the ) 240.06 440.66 T
+(DataHandler ) 256.09 440.66 T
+(either ) 311 440.66 T
+(by ) 337.58 440.66 T
+(a ) 351.4 440.66 T
+(DataContentHandlerF) 359.65 440.66 T
+(actory ) 447.82 440.66 T
+(object, ) 476.63 440.66 T
+(or ) 507.38 440.66 T
+(via ) 519.53 440.66 T
+(a) 535.56 440.66 T
+( ) 540 440.66 T
+(CommandMap. ) 189 428.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading3) cvn /Class /SP192588 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3703 /StPNE FmPD4
+[/StBMC FmPD4
+0 9 Q
+(6.2.2) 159.98 405.33 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(Command Binding ) 189 405.33 T
+48 414/G267594 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(The DataHandler pro) 189 392.66 T
+(vides wrappers around commonly used functions for command ) 273.82 392.66 T
+48 403/G267595 FmND
+(disco) 189 380.66 T
+(v) 209.96 380.66 T
+(ery) 214.81 380.66 T
+(. ) 226.93 380.66 T
+(DataHandler ) 231.76 380.66 T
+(has ) 285.18 380.66 T
+(methods ) 300.84 380.66 T
+(that ) 337.06 380.66 T
+(call ) 354.39 380.66 T
+(into ) 371.15 380.66 T
+(the ) 389.04 380.66 T
+(current ) 403.59 380.66 T
+(CommandMap ) 434.24 380.66 T
+(associated ) 496.57 380.66 T
+(with the DataHandler) 189 368.66 T
+(. By def) 274.54 368.66 T
+(ault the DataHandler calls CommandMap\325) 306.38 368.66 T
+(s ) 475.8 368.66 T
+(getDef) 189 356.66 T
+(aultCommandMap method if no CommandMap w) 216.11 356.66 T
+(as e) 416.84 356.66 T
+(xplicitly set. As a ) 431.96 356.66 T
+(con) 189 344.66 T
+(v) 203.04 344.66 T
+(enience, DataHandler uses the content type of its data when calls are made to the ) 207.89 344.66 T
+(CommandMap.) 189 332.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(6.3) 166.1 302.66 T
+(The DataContentHandler Interface ) 189 302.66 T
+48 313/G264876 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 189 278.66 T
+(DataContentHandler ) 209.4 278.66 T
+(interf) 297.02 278.66 T
+(ace ) 318.58 278.66 T
+(is ) 336.75 278.66 T
+(implemented ) 348.27 278.66 T
+(by ) 405.35 278.66 T
+(classes ) 420.2 278.66 T
+(that ) 452.83 278.66 T
+(are ) 472.68 278.66 T
+(used ) 489.74 278.66 T
+(by ) 512.93 278.66 T
+(the) 527.78 278.66 T
+( ) 540 278.66 T
+48 289/G264877 FmND
+(DataHandler ) 189 266.66 T
+(to ) 246.03 266.66 T
+(con) 259.75 266.66 T
+(v) 273.79 266.66 T
+(ert ) 278.64 266.66 T
+(InputStreams ) 295.14 266.66 T
+(into ) 354.41 266.66 T
+(objects ) 375.91 266.66 T
+(and ) 410.18 266.66 T
+(vice ) 430.56 266.66 T
+(v) 453.17 266.66 T
+(ersa. ) 458.02 266.66 T
+(In ) 482.56 266.66 T
+(ef) 496.83 266.66 T
+(fect, ) 504.35 266.66 T
+(the) 527.78 266.66 T
+( ) 540 266.66 T
+(DataHandler ) 189 254.66 T
+(object ) 243.83 254.66 T
+(uses ) 272.01 254.66 T
+(a ) 292.97 254.66 T
+(DataContentHandler ) 301.15 254.66 T
+(object ) 387.64 254.66 T
+(to ) 415.82 254.66 T
+(implement ) 427.34 254.66 T
+(the ) 473.86 254.66 T
+(T) 489.82 254.66 T
+(ransferable) 495.58 254.66 T
+( ) 540 254.66 T
+(interf) 189 242.66 T
+(ace. ) 210.56 242.66 T
+(DataContentHandlers ) 232.54 242.66 T
+(are ) 325.35 242.66 T
+(disco) 343.71 242.66 T
+(v) 364.67 242.66 T
+(ered ) 369.52 242.66 T
+(via ) 392.89 242.66 T
+(the ) 411.27 242.66 T
+(current ) 429.64 242.66 T
+(CommandMap. ) 464.12 242.66 T
+(A) 532.78 242.66 T
+( ) 540 242.66 T
+(DataContentHandler uses DataFla) 189 230.66 T
+(v) 325.44 230.66 T
+(ors to represent the data types it can access. ) 330.24 230.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The ) 189 206.66 T
+(DataContentHandler ) 210.52 206.66 T
+(also ) 299.24 206.66 T
+(con) 321.32 206.66 T
+(v) 335.36 206.66 T
+(erts ) 340.21 206.66 T
+(data ) 360.61 206.66 T
+(from ) 383.24 206.66 T
+(objects ) 408.64 206.66 T
+(into ) 442.94 206.66 T
+(InputStreams. ) 464.46 206.66 T
+(F) 526.26 206.66 T
+(or) 531.67 206.66 T
+( ) 540 206.66 T
+48 217/G268317 FmND
+(instance, ) 189 194.66 T
+(if ) 227.51 194.66 T
+(an ) 236.87 194.66 T
+(application ) 249.55 194.66 T
+(needs ) 297.23 194.66 T
+(to ) 323.24 194.66 T
+(access ) 334.27 194.66 T
+(a ) 363.05 194.66 T
+(.gif ) 370.73 194.66 T
+(\336le, ) 387.58 194.66 T
+(it ) 406.11 194.66 T
+(passes ) 414.91 194.66 T
+(the ) 443.7 194.66 T
+(\336le ) 459.16 194.66 T
+(to ) 475.18 194.66 T
+(the ) 486.21 194.66 T
+(image/gif) 501.67 194.66 T
+( ) 540 194.66 T
+(DataContentHandler) 189 182.66 T
+(. ) 271.21 182.66 T
+(The ) 276.17 182.66 T
+(image/gif ) 294.17 182.66 T
+(DataContentHandler ) 334.96 182.66 T
+(con) 420.18 182.66 T
+(v) 434.22 182.66 T
+(erts ) 439.07 182.66 T
+(the ) 455.97 182.66 T
+(image ) 470.64 182.66 T
+(object ) 497.54 182.66 T
+(into) 524.44 182.66 T
+( ) 540 182.66 T
+(a gif-formatted byte stream.) 189 170.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Applications ) 189 146.66 T
+(will ) 244.56 146.66 T
+(typically ) 264.57 146.66 T
+(need ) 304.03 146.66 T
+(to ) 327.36 146.66 T
+(pro) 339.59 146.66 T
+(vide ) 352.77 146.66 T
+(DataContentHandlers ) 374.44 146.66 T
+(for ) 465.54 146.66 T
+(all ) 481.66 146.66 T
+(the ) 496.11 146.66 T
+(MIME) 512.78 146.66 T
+( ) 540 146.66 T
+48 157/G273980 FmND
+(types ) 189 134.66 T
+(the) 212.57 134.66 T
+(y ) 224.64 134.66 T
+(intend ) 232.1 134.66 T
+(to ) 259.57 134.66 T
+(support. ) 269.81 134.66 T
+(\050Note ) 304.77 134.66 T
+(that ) 330 134.66 T
+(the ) 347.46 134.66 T
+(Ja) 362.14 134.66 T
+(v) 370.27 134.66 T
+(aMail ) 375.02 134.66 T
+(reference ) 400.82 134.66 T
+(implementation ) 440.47 134.66 T
+(pro) 505.71 134.66 T
+(vides) 518.89 134.66 T
+( ) 540 134.66 T
+(DataContentHandlers for man) 189 122.66 T
+(y of the MIME types used in mail messages.\051) 309.38 122.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299016 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "12" 12
+%%Page: "13" 13
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.13/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Writing Beans f) 207 739.85 T
+(or the Frame) 272.83 739.85 T
+(w) 327.2 739.85 T
+(ork) 334.03 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(13) 522.26 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+[/EMC FmPD4
+[/StoreName /P299016 /StRetrieve FmPD4
+[/StoreName /P299016 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(6.4) 184.1 680.66 T
+( The CommandMap Interface) 207 680.66 T
+66 691/G264881 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Once ) 207 656.66 T
+(the ) 233.03 656.66 T
+(DataHandler ) 250.19 656.66 T
+(has ) 306.21 656.66 T
+(a ) 324.47 656.66 T
+(MIME ) 333.85 656.66 T
+(type ) 366 656.66 T
+(describing ) 388.15 656.66 T
+(the ) 434.74 656.66 T
+(content, ) 451.9 656.66 T
+(it ) 488.77 656.66 T
+(can ) 499.26 656.66 T
+(query ) 518.08 656.66 T
+(the) 545.78 656.66 T
+( ) 558 656.66 T
+66 667/G264882 FmND
+(CommandMap ) 207 644.66 T
+(for ) 269.34 644.66 T
+(the ) 283.34 644.66 T
+(operations, ) 297.9 644.66 T
+(or ) 344.4 644.66 T
+2 F
+(commands) 355.07 644.66 T
+1 F
+( ) 397.84 644.66 T
+(that ) 400.17 644.66 T
+(are ) 417.52 644.66 T
+(a) 432.06 644.66 T
+(v) 436.3 644.66 T
+(ailable ) 441.05 644.66 T
+(for ) 470.05 644.66 T
+(that ) 484.05 644.66 T
+(data ) 501.39 644.66 T
+(type. ) 520.39 644.66 T
+(The) 542.45 644.66 T
+( ) 558 644.66 T
+(application ) 207 632.66 T
+(requests ) 256.67 632.66 T
+(commands ) 294.67 632.66 T
+(a) 343.23 632.66 T
+(v) 347.47 632.66 T
+(ailable ) 352.22 632.66 T
+(through ) 384.11 632.66 T
+(the ) 420.45 632.66 T
+(DataHandler ) 437.9 632.66 T
+(and ) 494.22 632.66 T
+(speci\336es ) 513.89 632.66 T
+(a) 553.56 632.66 T
+( ) 558 632.66 T
+(command ) 207 620.66 T
+(on ) 250.2 620.66 T
+(that ) 263.95 620.66 T
+(list. ) 282.7 620.66 T
+(The ) 301.19 620.66 T
+(DataHandler ) 320.49 620.66 T
+(uses ) 375.34 620.66 T
+(the ) 396.32 620.66 T
+(CommandMap ) 412.29 620.66 T
+(to ) 476.05 620.66 T
+(retrie) 487.58 620.66 T
+(v) 508.43 620.66 T
+(e ) 513.28 620.66 T
+(the ) 521.47 620.66 T
+(Bean) 537.45 620.66 T
+( ) 558 620.66 T
+(associated ) 207 608.66 T
+(with ) 252.16 608.66 T
+(that ) 274 608.66 T
+(command. ) 293.06 608.66 T
+(Some ) 339.07 608.66 T
+(or ) 365.91 608.66 T
+(all ) 378.3 608.66 T
+(of ) 392.36 608.66 T
+(the ) 404.75 608.66 T
+(command ) 421.03 608.66 T
+(map ) 464.53 608.66 T
+(is ) 485.82 608.66 T
+(stored ) 496.55 608.66 T
+(in ) 525.05 608.66 T
+(some) 536.89 608.66 T
+( ) 558 608.66 T
+(\324common\325 ) 207 596.66 T
+(place, ) 251.12 596.66 T
+(lik) 277.19 596.66 T
+(e ) 287.65 596.66 T
+(a ) 294.56 596.66 T
+(.mailcap ) 301.46 596.66 T
+(\050RFC ) 338.09 596.66 T
+(1524\051 ) 362.78 596.66 T
+(\336le. ) 388.58 596.66 T
+(Other ) 406.32 596.66 T
+(more ) 431.56 596.66 T
+(comple) 454.57 596.66 T
+(x ) 483.86 596.66 T
+(implementations) 491.33 596.66 T
+( ) 558 596.66 T
+(can be distrib) 207 584.66 T
+(uted, or can pro) 260.68 584.66 T
+(vide licensing or authentication features.) 323.29 584.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(6.5) 184.1 554.66 T
+(The CommandInf) 207 554.66 T
+(o Class) 288.47 554.66 T
+66 565/G264889 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 207 538.66 T
+(CommandInfo ) 224.89 538.66 T
+(class ) 285.57 538.66 T
+(is ) 307.35 538.66 T
+(used ) 316.36 538.66 T
+(to ) 337.03 538.66 T
+(represent ) 347.15 538.66 T
+(commands ) 386.15 538.66 T
+(in ) 431.82 538.66 T
+(an ) 441.94 538.66 T
+(underlying ) 453.72 538.66 T
+(re) 499.39 538.66 T
+(gistry) 507.02 538.66 T
+(. ) 529.15 538.66 T
+(From ) 533.99 538.66 T
+66 549/G269356 FmND
+(a CommandInfo object, an application can instantiate the Bean or request the v) 207 526.66 T
+(erb ) 522.63 526.66 T
+(\050) 207 514.66 T
+2 F
+(command) 210.33 514.66 T
+1 F
+(\051 it describes. ) 249.21 514.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(6.6) 184.1 484.66 T
+(The CommandObject Interface) 207 484.66 T
+66 495/G267858 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Beans ) 207 460.66 T
+(designed ) 235.33 460.66 T
+(speci\336cally ) 274.76 460.66 T
+(for ) 324.2 460.66 T
+(use ) 339.74 460.66 T
+(with ) 356.96 460.66 T
+(the ) 378.63 460.66 T
+(J) 394.73 460.66 T
+(AF ) 398.02 460.66 T
+(Architecture ) 414.69 460.66 T
+(should ) 468.56 460.66 T
+(implement ) 499.11 460.66 T
+(the) 545.78 460.66 T
+( ) 558 460.66 T
+66 471/G264890 FmND
+(CommandObject ) 207 448.66 T
+(interf) 281.73 448.66 T
+(ace. ) 303.29 448.66 T
+(This ) 325.5 448.66 T
+(interf) 349.67 448.66 T
+(ace ) 371.23 448.66 T
+(pro) 390.95 448.66 T
+(vides ) 404.13 448.66 T
+(direct ) 431.64 448.66 T
+(access ) 460.8 448.66 T
+(to ) 492.73 448.66 T
+(DataHandler) 506.91 448.66 T
+( ) 558 448.66 T
+(methods ) 207 436.66 T
+(and ) 246.8 436.66 T
+(noti\336es ) 267.16 436.66 T
+(a ) 302.52 436.66 T
+(J) 312.87 436.66 T
+(AF-a) 316.16 436.66 T
+(w) 336.56 436.66 T
+(are ) 343.68 436.66 T
+(Bean ) 361.8 436.66 T
+(which ) 388.27 436.66 T
+(v) 418.62 436.66 T
+(erb ) 423.47 436.66 T
+(w) 442.15 436.66 T
+(as ) 449.27 436.66 T
+(used ) 463.52 436.66 T
+(to ) 487.76 436.66 T
+(call ) 501.45 436.66 T
+(it. ) 521.81 436.66 T
+(Upon) 535.78 436.66 T
+( ) 558 436.66 T
+(instantiation, ) 207 424.66 T
+(the ) 261.81 424.66 T
+(Bean ) 276.89 424.66 T
+(tak) 300.29 424.66 T
+(es ) 312.41 424.66 T
+(a ) 323.6 424.66 T
+(string ) 330.9 424.66 T
+(specifying ) 356.54 424.66 T
+(a ) 401.05 424.66 T
+(user) 408.35 424.66 T
+(-selected ) 424.81 424.66 T
+(command ) 463.21 424.66 T
+(v) 505.51 424.66 T
+(erb, ) 510.36 424.66 T
+(and ) 528.48 424.66 T
+(the) 545.78 424.66 T
+( ) 558 424.66 T
+(DataHandler ) 207 412.66 T
+(object ) 262.48 412.66 T
+(managing ) 291.31 412.66 T
+(the ) 335.13 412.66 T
+(tar) 351.74 412.66 T
+(get ) 362.11 412.66 T
+(data. ) 378.72 412.66 T
+(The ) 402.27 412.66 T
+(DataHandler ) 422.21 412.66 T
+(tak) 477.68 412.66 T
+(es ) 489.8 412.66 T
+(a ) 502.52 412.66 T
+(DataSource) 511.35 412.66 T
+( ) 558 412.66 T
+(object, ) 207 400.66 T
+(which ) 237.25 400.66 T
+(pro) 264.99 400.66 T
+(vides ) 278.17 400.66 T
+(an ) 302.59 400.66 T
+(input ) 315.34 400.66 T
+(stream ) 339.2 400.66 T
+(link) 369.17 400.66 T
+(ed ) 384.63 400.66 T
+(to ) 397.38 400.66 T
+(that ) 408.46 400.66 T
+(data, ) 426.77 400.66 T
+(and ) 449.23 400.66 T
+(a ) 466.98 400.66 T
+(string ) 474.73 400.66 T
+(specifying ) 500.81 400.66 T
+(the) 545.78 400.66 T
+( ) 558 400.66 T
+(data type. ) 207 388.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(6.7) 184.1 358.66 T
+(The DataContentHandlerF) 207 358.66 T
+(actor) 330.14 358.66 T
+(y) 354.69 358.66 T
+66 369/G267005 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Lik) 207 342.66 T
+(e the ContentHandler f) 220.79 342.66 T
+(actory in the ) 312.06 342.66 T
+7 F
+(java.net) 364.55 342.66 T
+1 F
+( package, the ) 412.55 342.66 T
+66 353/G267006 FmND
+(DataContentHandlerF) 207 330.66 T
+(actory is an interf) 295.17 330.66 T
+(ace that allo) 365.33 330.66 T
+(ws de) 413.4 330.66 T
+(v) 436.2 330.66 T
+(elopers to write objects that ) 441.05 330.66 T
+(map MIME types to DataContentHandlers. The interf) 207 318.66 T
+(ace is e) 421.59 318.66 T
+(xtremely simple, in order ) 450.87 318.66 T
+(to allo) 207 306.66 T
+(w de) 232.03 306.66 T
+(v) 250.94 306.66 T
+(elopers as much design and implementation freedom as possible.) 255.79 306.66 T
+72 263.33 558 266.33 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+207 265.48 558 265.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 265.48 198 265.48 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(7.0) 181.32 270.33 T
+(Writing Beans f) 207 270.33 T
+(or the Frame) 294.77 270.33 T
+(w) 367.27 270.33 T
+(ork) 376.37 270.33 T
+66 282/G264898 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 10 Q
+(7.1) 184.1 236.66 T
+(Over) 207 236.66 T
+(vie) 229.89 236.66 T
+(w) 243.64 236.66 T
+66 247/G265063 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(This ) 207 212.66 T
+(section ) 227.45 212.66 T
+(describes ) 258.45 212.66 T
+(the ) 298.33 212.66 T
+(speci\336cation ) 313.22 212.66 T
+(of ) 366.44 212.66 T
+(well-beha) 377.44 212.66 T
+(v) 416.67 212.66 T
+(ed ) 421.52 212.66 T
+(J) 433.63 212.66 T
+(AF-a) 436.92 212.66 T
+(w) 457.32 212.66 T
+(are ) 464.44 212.66 T
+(Bean ) 479.32 212.66 T
+(vie) 502.54 212.66 T
+(wers. ) 514.51 212.66 T
+(Note) 538.56 212.66 T
+( ) 558 212.66 T
+66 223/G264900 FmND
+(that ) 207 200.66 T
+(this ) 224.3 200.66 T
+(proposal ) 241.05 200.66 T
+(assumes ) 277.79 200.66 T
+(the ) 313.42 200.66 T
+(reader ) 327.94 200.66 T
+(is ) 355.23 200.66 T
+(comfortable ) 364.2 200.66 T
+(with ) 414.82 200.66 T
+(the ) 434.9 200.66 T
+(Ja) 449.42 200.66 T
+(v) 457.55 200.66 T
+(aBeans\252 ) 462.3 200.66 T
+(Speci\336cation.) 503.28 200.66 T
+( ) 558 200.66 T
+(De) 207 188.66 T
+(v) 218.41 188.66 T
+(elopers ) 223.26 188.66 T
+(intending ) 255.53 188.66 T
+(to ) 296.71 188.66 T
+(implement ) 307.88 188.66 T
+(vie) 354.05 188.66 T
+(wer ) 366.02 188.66 T
+(Beans ) 384.41 188.66 T
+(for ) 412.24 188.66 T
+(the ) 427.29 188.66 T
+(J) 442.91 188.66 T
+(AF ) 446.2 188.66 T
+(should ) 462.37 188.66 T
+(be ) 492.43 188.66 T
+(f) 505.27 188.66 T
+(amiliar ) 508.5 188.66 T
+(with) 540.22 188.66 T
+( ) 558 188.66 T
+(Ja) 207 176.66 T
+(v) 215.13 176.66 T
+(aBeans\252 concepts and architecture.) 219.88 176.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(7.2) 184.1 146.66 T
+(Vie) 207 146.66 T
+(wer Goals) 221.86 146.66 T
+66 157/G264901 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Numbered1) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3703 /StPNE FmPD4
+[/StBMC FmPD4
+0 9 Q
+(1.) 207 130.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Mak) 220.74 130.66 T
+(e the implementation of vie) 238.98 130.66 T
+(wers and editors as simple as implementing Beans. ) 348.71 130.66 T
+66 141/G264902 FmND
+(That is, require lo) 220.74 118.66 T
+(w cost of entry to be a ) 291.6 118.66 T
+2 F
+(good) 382.96 118.66 T
+1 F
+( citizen.) 402.96 118.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Numbered) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3703 /StPNE FmPD4
+[/StBMC FmPD4
+0 9 Q
+(2.) 207 103.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Allo) 220.74 103.66 T
+(w de) 238.27 103.66 T
+(v) 257.18 103.66 T
+(elopers to ha) 262.04 103.66 T
+(v) 312.93 103.66 T
+(e a certain amount of \337e) 317.79 103.66 T
+(xibility in their implementations.) 414.55 103.66 T
+66 114/G264903 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299133 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "13" 13
+%%Page: "14" 14
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.14/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Writing Beans f) 189 739.85 T
+(or the Frame) 254.83 739.85 T
+(w) 309.2 739.85 T
+(ork) 316.03 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(14) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 21) 76.12 60.29 T
+[/EMC FmPD4
+[/StoreName /P299133 /StRetrieve FmPD4
+[/StoreName /P299133 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(7.3) 166.1 680.66 T
+(General) 189 680.66 T
+48 691/G264904 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(W) 189 656.66 T
+(e ) 197.64 656.66 T
+(are ) 205.32 656.66 T
+(attempting ) 220.77 656.66 T
+(to ) 266.79 656.66 T
+(limit ) 277.82 656.66 T
+(the ) 299.96 656.66 T
+(amount ) 315.42 656.66 T
+(of ) 348.66 656.66 T
+(e) 360.23 656.66 T
+(xtra ) 364.52 656.66 T
+(bagg) 383.31 656.66 T
+(age ) 402.7 656.66 T
+(that ) 419.82 656.66 T
+(needs ) 438.07 656.66 T
+(to ) 464.08 656.66 T
+(be ) 475.1 656.66 T
+(implemented) 487.78 656.66 T
+( ) 540 656.66 T
+48 667/G266484 FmND
+(be) 189 644.66 T
+(yond ) 198.29 644.66 T
+(\324generic\325 ) 224.89 644.66 T
+(Beans. ) 267.59 644.66 T
+(In ) 301.13 644.66 T
+(man) 316.06 644.66 T
+(y ) 333.13 644.66 T
+(cases, ) 344.74 644.66 T
+(Ja) 374.94 644.66 T
+(v) 383.07 644.66 T
+(aBeans\252 ) 387.82 644.66 T
+(components ) 433.1 644.66 T
+(that ) 488.04 644.66 T
+(weren\325) 509.64 644.66 T
+(t) 537.22 644.66 T
+( ) 540 644.66 T
+(de) 189 632.66 T
+(v) 198.19 632.66 T
+(eloped ) 203.04 632.66 T
+(with ) 232.3 632.66 T
+(kno) 252.68 632.66 T
+(wledge ) 267.43 632.66 T
+(of ) 298.91 632.66 T
+(the ) 309.84 632.66 T
+(frame) 324.66 632.66 T
+(w) 347.73 632.66 T
+(ork ) 354.85 632.66 T
+(can ) 370.77 632.66 T
+(be ) 387.25 632.66 T
+(used. ) 399.29 632.66 T
+(The ) 422.72 632.66 T
+(J) 440.87 632.66 T
+(AF ) 444.16 632.66 T
+(e) 459.54 632.66 T
+(xploits ) 463.83 632.66 T
+(the ) 493.66 632.66 T
+(e) 508.48 632.66 T
+(xisting) 512.77 632.66 T
+( ) 540 632.66 T
+(features ) 189 620.66 T
+(of ) 224.24 620.66 T
+(Ja) 236.17 620.66 T
+(v) 244.3 620.66 T
+(aBeans\252 ) 249.05 620.66 T
+(and ) 291.32 620.66 T
+(the ) 309.35 620.66 T
+(JDK\252, ) 325.17 620.66 T
+(and ) 359.39 620.66 T
+(de\336nes ) 377.42 620.66 T
+(as ) 409.35 620.66 T
+(fe) 421.27 620.66 T
+(w ) 428.79 620.66 T
+(additional ) 439.6 620.66 T
+(interf) 483.2 620.66 T
+(aces ) 504.76 620.66 T
+(and) 525.56 620.66 T
+( ) 540 620.66 T
+(policies as possible. ) 189 608.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(W) 189 584.66 T
+(e ) 197.64 584.66 T
+(e) 205.34 584.66 T
+(xpect ) 209.63 584.66 T
+(that ) 234.55 584.66 T
+(vie) 252.81 584.66 T
+(wers/editors ) 264.78 584.66 T
+(will ) 316.93 584.66 T
+(be ) 335.75 584.66 T
+(bound ) 348.45 584.66 T
+(to ) 376.71 584.66 T
+(data ) 387.75 584.66 T
+(via ) 407.67 584.66 T
+(a ) 423.15 584.66 T
+(simple ) 430.86 584.66 T
+(re) 460.79 584.66 T
+(gistry ) 468.41 584.66 T
+(mechanism) 494.45 584.66 T
+( ) 540 584.66 T
+48 595/G268843 FmND
+(similar ) 189 572.66 T
+(in ) 219.86 572.66 T
+(function ) 230.73 572.66 T
+(to ) 267.14 572.66 T
+(a ) 278 572.66 T
+(.mailcap ) 285.53 572.66 T
+(\336le. ) 322.77 572.66 T
+(In ) 341.14 572.66 T
+(addition, ) 352.55 572.66 T
+(mailcap ) 390.91 572.66 T
+(format ) 425.66 572.66 T
+(\336les ) 455.4 572.66 T
+(may ) 475.15 572.66 T
+(be ) 495.46 572.66 T
+(b) 507.98 572.66 T
+(undled) 512.78 572.66 T
+( ) 540 572.66 T
+(with components, allo) 189 560.66 T
+(wing additional packages to be added at runtime.) 277.36 560.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Our ) 189 536.66 T
+(vie) 207.88 536.66 T
+(wers/editors ) 219.85 536.66 T
+(and ) 272.06 536.66 T
+(related ) 289.83 536.66 T
+(classes ) 320.37 536.66 T
+(and ) 351.47 536.66 T
+(\336les ) 369.24 536.66 T
+(are ) 389.24 536.66 T
+(encapsulated ) 404.79 536.66 T
+(into ) 459.77 536.66 T
+(J) 478.66 536.66 T
+(AR ) 481.95 536.66 T
+(\336les, ) 499.17 536.66 T
+(as ) 521.67 536.66 T
+(is) 533.33 536.66 T
+( ) 540 536.66 T
+48 547/G264906 FmND
+(the ) 189 524.66 T
+(preferred ) 204.41 524.66 T
+(method ) 244.24 524.66 T
+(for ) 277.44 524.66 T
+(Ja) 292.29 524.66 T
+(v) 300.42 524.66 T
+(aBeans\252. ) 305.17 524.66 T
+(The ) 349.54 524.66 T
+(J) 368.28 524.66 T
+(AF ) 371.57 524.66 T
+(does ) 387.55 524.66 T
+(not ) 409.07 524.66 T
+(restrict ) 425.04 524.66 T
+(the ) 456 524.66 T
+(choice ) 471.42 524.66 T
+(of ) 500.71 524.66 T
+(classes) 512.23 524.66 T
+( ) 540 524.66 T
+(used ) 189 512.66 T
+(to ) 209.74 512.66 T
+(implement ) 219.92 512.66 T
+(a ) 265.1 512.66 T
+(J) 271.95 512.66 T
+(AF-a) 275.24 512.66 T
+(w) 295.64 512.66 T
+(are ) 302.76 512.66 T
+(\324vie) 317.37 512.66 T
+(wer\325 ) 332.67 512.66 T
+(Beans, ) 353.4 512.66 T
+(be) 382.74 512.66 T
+(yond ) 392.03 512.66 T
+(those ) 414.44 512.66 T
+(e) 437.95 512.66 T
+(xpected ) 442.24 512.66 T
+(of ) 475.74 512.66 T
+(well-beha) 486.48 512.66 T
+(v) 525.71 512.66 T
+(ed) 530.56 512.66 T
+( ) 540 512.66 T
+(Beans.) 189 500.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(7.4) 166.1 470.66 T
+(Interfaces) 189 470.66 T
+48 481/G264907 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(A ) 189 446.66 T
+(vie) 199.32 446.66 T
+(wer ) 211.29 446.66 T
+(Bean ) 229.38 446.66 T
+(that ) 253.04 446.66 T
+(communicates ) 271.14 446.66 T
+(directly ) 332.01 446.66 T
+(with ) 365.66 446.66 T
+(a ) 386.54 446.66 T
+(J) 394.08 446.66 T
+(AF ) 397.37 446.66 T
+(DataHandler ) 413.26 446.66 T
+(should ) 467.45 446.66 T
+(implement) 497.22 446.66 T
+( ) 540 446.66 T
+48 457/G264908 FmND
+(the ) 189 434.66 T
+(CommandObject ) 203.83 434.66 T
+(interf) 274.77 434.66 T
+(ace. ) 296.33 434.66 T
+(This ) 314.76 434.66 T
+(interf) 335.15 434.66 T
+(ace ) 356.71 434.66 T
+(is ) 372.64 434.66 T
+(small ) 381.91 434.66 T
+(and ) 406.19 434.66 T
+(easy ) 423.24 434.66 T
+(to ) 443.62 434.66 T
+(implement. ) 454.01 434.66 T
+(Ho) 501.9 434.66 T
+(we) 513.87 434.66 T
+(v) 525.28 434.66 T
+(er) 530.13 434.66 T
+(,) 537.5 434.66 T
+( ) 540 434.66 T
+(Beans ) 189 422.66 T
+(can ) 216.05 422.66 T
+(still ) 232.54 422.66 T
+(use ) 250.16 422.66 T
+(standard ) 266.1 422.66 T
+(Serialization ) 302.6 422.66 T
+(and ) 355.76 422.66 T
+(Externalization ) 372.81 422.66 T
+(methods ) 436.52 422.66 T
+(a) 473.02 422.66 T
+(v) 477.26 422.66 T
+(ailable ) 482.01 422.66 T
+(in ) 511.28 422.66 T
+(JDK) 521.67 422.66 T
+( ) 540 422.66 T
+(1.1 and later v) 189 410.66 T
+(ersions. ) 246.06 410.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(7.5) 166.1 380.66 T
+(Stora) 189 380.66 T
+(g) 214.46 380.66 T
+(e) 220.67 380.66 T
+48 391/G264909 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 189 356.66 T
+(J) 208.84 356.66 T
+(AF ) 212.13 356.66 T
+(e) 229.2 356.66 T
+(xpects ) 233.49 356.66 T
+(applications ) 263.33 356.66 T
+(and ) 315.95 356.66 T
+(vie) 334.68 356.66 T
+(wer ) 346.65 356.66 T
+(Beans ) 365.93 356.66 T
+(to ) 394.67 356.66 T
+(implement ) 406.74 356.66 T
+(storage ) 453.81 356.66 T
+(tasks ) 486.98 356.66 T
+(via ) 511.27 356.66 T
+(the) 527.78 356.66 T
+( ) 540 356.66 T
+48 367/G264910 FmND
+(DataSource ) 189 344.66 T
+(object. ) 241.52 344.66 T
+(Ho) 274.32 344.66 T
+(we) 286.29 344.66 T
+(v) 297.7 344.66 T
+(er; ) 302.55 344.66 T
+(it ) 318.97 344.66 T
+(is ) 330.4 344.66 T
+(possible ) 342.93 344.66 T
+(to ) 381.58 344.66 T
+(use ) 395.23 344.66 T
+(Externalization. ) 414.43 344.66 T
+(A ) 483.89 344.66 T
+(J) 496.98 344.66 T
+(AF-a) 500.27 344.66 T
+(w) 520.67 344.66 T
+(are) 527.79 344.66 T
+( ) 540 344.66 T
+(application can implement the follo) 189 332.66 T
+(wing storage mechanism:) 330.96 332.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(ObjectOutputStream oos = new ObjectOutputStream\050) 198 315.33 T
+48 324/G264911 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(                                  ) 198 304.33 T
+(data_handler.getOutputStream\050\051\051;) 367.2 304.33 T
+48 313/G265396 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(my_externalizable_bean.writeExternal\050oos\051;) 198 293.33 T
+48 302/G265399 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 10 Q
+(7.6) 166.1 263.66 T
+(P) 189 263.66 T
+(ac) 195.37 263.66 T
+(ka) 206.29 263.66 T
+(ging) 217.31 263.66 T
+48 274/G264913 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 189 239.66 T
+(basic ) 207.16 239.66 T
+(format ) 230.32 239.66 T
+(for ) 259.6 239.66 T
+(packaging ) 273.87 239.66 T
+(of ) 317.58 239.66 T
+(the ) 328.52 239.66 T
+(V) 343.35 239.66 T
+(ie) 349.97 239.66 T
+(wer/Editors ) 356.94 239.66 T
+(is ) 406.22 239.66 T
+(the ) 415.5 239.66 T
+(J) 430.33 239.66 T
+(AR ) 433.62 239.66 T
+(\336le ) 450.12 239.66 T
+(as ) 465.51 239.66 T
+(described ) 476.46 239.66 T
+(in ) 517.39 239.66 T
+(the) 527.78 239.66 T
+( ) 540 239.66 T
+48 250/G264914 FmND
+(Ja) 189 227.66 T
+(v) 197.13 227.66 T
+(aBeans\252 ) 201.88 227.66 T
+(Speci\336cation. ) 243.46 227.66 T
+(This ) 301.08 227.66 T
+(format ) 321.76 227.66 T
+(allo) 351.32 227.66 T
+(ws ) 366.07 227.66 T
+(the ) 380.08 227.66 T
+(con) 395.21 227.66 T
+(v) 409.25 227.66 T
+(enient ) 414.1 227.66 T
+(packaging ) 441.44 227.66 T
+(of ) 485.44 227.66 T
+(collections) 496.67 227.66 T
+( ) 540 227.66 T
+(of ) 189 215.66 T
+(\336les ) 200.14 215.66 T
+(that ) 219.61 215.66 T
+(are ) 237.42 215.66 T
+(related ) 252.43 215.66 T
+(to ) 282.45 215.66 T
+(a ) 293.03 215.66 T
+(particular ) 300.28 215.66 T
+(Bean ) 341.4 215.66 T
+(or ) 364.76 215.66 T
+(applet. ) 375.9 215.66 T
+(F) 405.64 215.66 T
+(or ) 411.05 215.66 T
+(more ) 422.19 215.66 T
+(information ) 445.54 215.66 T
+(concerning) 495.57 215.66 T
+( ) 540 215.66 T
+(inte) 189 203.66 T
+(gration points, see Section 8.) 203.85 203.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(7.7) 166.1 173.66 T
+(Container Suppor) 189 173.66 T
+(t) 273.65 173.66 T
+48 184/G264915 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 189 149.66 T
+(J) 209.83 149.66 T
+(AF ) 213.12 149.66 T
+(is ) 231.19 149.66 T
+(designed ) 243.14 149.66 T
+(to ) 283.98 149.66 T
+(be ) 297.04 149.66 T
+(\337e) 311.76 149.66 T
+(xible ) 321.61 149.66 T
+(enough ) 346.9 149.66 T
+(to ) 381.62 149.66 T
+(support ) 394.69 149.66 T
+(the ) 429.97 149.66 T
+(needs ) 447.47 149.66 T
+(of ) 475.53 149.66 T
+(a ) 489.14 149.66 T
+(v) 498.87 149.66 T
+(ariety ) 503.62 149.66 T
+(of) 531.67 149.66 T
+( ) 540 149.66 T
+48 160/G264916 FmND
+(applications. ) 189 137.66 T
+(The ) 243.11 137.66 T
+(J) 261.94 137.66 T
+(AF ) 265.23 137.66 T
+(e) 281.29 137.66 T
+(xpects ) 285.58 137.66 T
+(these ) 314.41 137.66 T
+(applications ) 338.23 137.66 T
+(to ) 389.84 137.66 T
+(pro) 400.9 137.66 T
+(vide ) 414.08 137.66 T
+(the ) 434.58 137.66 T
+(appropriate ) 450.08 137.66 T
+(containers) 498.9 137.66 T
+( ) 540 137.66 T
+(and ) 189 125.66 T
+(life ) 207.81 125.66 T
+(c) 225.52 125.66 T
+(ycle ) 229.81 125.66 T
+(support ) 250.84 125.66 T
+(for ) 285.21 125.66 T
+(these ) 301.24 125.66 T
+(Beans. ) 326.17 125.66 T
+(Beans ) 357.48 125.66 T
+(written ) 386.3 125.66 T
+(for ) 419 125.66 T
+(the ) 435.03 125.66 T
+(frame) 451.62 125.66 T
+(w) 474.69 125.66 T
+(ork ) 481.81 125.66 T
+(should ) 499.52 125.66 T
+(be) 530.56 125.66 T
+( ) 540 125.66 T
+(compatible ) 189 113.66 T
+(with ) 236.22 113.66 T
+(the ) 256.78 113.66 T
+(guidelines ) 271.78 113.66 T
+(in ) 315.67 113.66 T
+(the ) 326.23 113.66 T
+(Ja) 341.22 113.66 T
+(v) 349.35 113.66 T
+(aBeans\252 ) 354.1 113.66 T
+(documentation ) 395.56 113.66 T
+(and ) 457.78 113.66 T
+(should ) 475 113.66 T
+(be ) 504.45 113.66 T
+(tested) 516.67 113.66 T
+( ) 540 113.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299146 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "14" 14
+%%Page: "15" 15
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.15/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 207 739.85 T
+(w) 233.87 739.85 T
+(ork Integration P) 240.7 739.85 T
+(oints) 311.85 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(15) 522.26 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+[/EMC FmPD4
+[/StoreName /P299146 /StRetrieve FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(ag) 207 680.66 T
+(ainst ) 216.39 680.66 T
+(the ) 239.62 680.66 T
+(BDK ) 256.18 680.66 T
+(BeanBox ) 281.63 680.66 T
+(\050and ) 323.19 680.66 T
+(the ) 345.3 680.66 T
+(JDK ) 361.86 680.66 T
+(Appletvie) 384.52 680.66 T
+(wer ) 423.71 680.66 T
+(if ) 443.04 680.66 T
+(the) 453.49 680.66 T
+(y ) 465.56 680.66 T
+(are ) 474.9 680.66 T
+(subclassed ) 491.45 680.66 T
+(from) 538.56 680.66 T
+( ) 558 680.66 T
+(Applet\051.) 207 668.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299146 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(7.8) 184.1 638.66 T
+(Lif) 207 638.66 T
+(ec) 219.12 638.66 T
+(yc) 230.14 638.66 T
+(le) 241.06 638.66 T
+66 649/G264917 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(In ) 207 614.66 T
+(general ) 217.62 614.66 T
+(the ) 249.35 614.66 T
+(J) 263.86 614.66 T
+(AF ) 267.15 614.66 T
+(e) 282.22 614.66 T
+(xpects ) 286.51 614.66 T
+(that ) 314.35 614.66 T
+(its ) 331.64 614.66 T
+(vie) 343.39 614.66 T
+(wer ) 355.36 614.66 T
+(bean ) 372.64 614.66 T
+(life ) 393.81 614.66 T
+(c) 409.43 614.66 T
+(ycle ) 413.73 614.66 T
+(semantics ) 432.68 614.66 T
+(are ) 474.41 614.66 T
+(the ) 488.91 614.66 T
+(same ) 503.42 614.66 T
+(as ) 526.27 614.66 T
+(those) 536.89 614.66 T
+( ) 558 614.66 T
+66 625/G265828 FmND
+(for ) 207 602.66 T
+(all ) 222.27 602.66 T
+(Beans. ) 235.89 602.66 T
+(In ) 266.45 602.66 T
+(the ) 278.39 602.66 T
+(case ) 294.23 602.66 T
+(of ) 315.05 602.66 T
+(Beans ) 327 602.66 T
+(that ) 355.05 602.66 T
+(implement ) 373.67 602.66 T
+(the ) 420.06 602.66 T
+(CommandObject ) 435.9 602.66 T
+(interf) 507.84 602.66 T
+(ace ) 529.4 602.66 T
+(we) 546.34 602.66 T
+( ) 558 602.66 T
+(encourage ) 207 590.66 T
+(application ) 259.38 590.66 T
+(de) 315.12 590.66 T
+(v) 324.31 590.66 T
+(elopers ) 329.16 590.66 T
+(to ) 369.33 590.66 T
+(not ) 388.4 590.66 T
+(parent ) 412.48 590.66 T
+(Beans ) 448.76 590.66 T
+(subclassed ) 484.5 590.66 T
+(from) 538.56 590.66 T
+( ) 558 590.66 T
+(ja) 207 578.66 T
+(v) 214.02 578.66 T
+(a.a) 218.77 578.66 T
+(wt.Component ) 230 578.66 T
+(to ) 297.59 578.66 T
+(an ) 313.78 578.66 T
+(A) 331.64 578.66 T
+(WT ) 337.96 578.66 T
+(container ) 361.93 578.66 T
+(until ) 407.55 578.66 T
+(after ) 434.31 578.66 T
+(the) 461.05 578.66 T
+(y ) 473.12 578.66 T
+(ha) 486.54 578.66 T
+(v) 495.78 578.66 T
+(e ) 500.63 578.66 T
+(called ) 513.48 578.66 T
+(the) 545.78 578.66 T
+( ) 558 578.66 T
+(ja) 207 566.66 T
+(v) 214.02 566.66 T
+(ax.acti) 218.77 566.66 T
+(v) 244.9 566.66 T
+(ation.CommandObject.setCommandConte) 249.65 566.66 T
+(xt method.) 419.5 566.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(7.9) 184.1 536.66 T
+(Command V) 207 536.66 T
+(erbs) 264.84 536.66 T
+66 547/G264920 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 207 512.66 T
+(MailcapCommandMap ) 226.29 512.66 T
+(implementation ) 322.8 512.66 T
+(pro) 389.32 512.66 T
+(vides ) 402.5 512.66 T
+(a ) 427.35 512.66 T
+(mechanism ) 435.53 512.66 T
+(that ) 484.82 512.66 T
+(allo) 503.56 512.66 T
+(ws ) 518.31 512.66 T
+(for ) 533.16 512.66 T
+(an) 548.56 512.66 T
+( ) 558 512.66 T
+66 523/G264921 FmND
+(e) 207 500.66 T
+(xtensible ) 211.29 500.66 T
+(set ) 250.35 500.66 T
+(of ) 264.41 500.66 T
+(command ) 275.68 500.66 T
+(v) 318.07 500.66 T
+(erbs. ) 322.92 500.66 T
+(Applications ) 345.03 500.66 T
+(using ) 399.09 500.66 T
+(the ) 423.71 500.66 T
+(J) 438.88 500.66 T
+(AF ) 442.17 500.66 T
+(can ) 457.9 500.66 T
+(query ) 474.72 500.66 T
+(the ) 500.44 500.66 T
+(system ) 515.61 500.66 T
+(for) 546.34 500.66 T
+( ) 558 500.66 T
+(commands ) 207 488.66 T
+(a) 253.2 488.66 T
+(v) 257.44 488.66 T
+(ailable ) 262.19 488.66 T
+(for ) 291.72 488.66 T
+(a ) 306.25 488.66 T
+(particular ) 313.56 488.66 T
+(MIME ) 354.75 488.66 T
+(type, ) 384.83 488.66 T
+(and ) 407.42 488.66 T
+(retrie) 424.73 488.66 T
+(v) 445.58 488.66 T
+(e ) 450.43 488.66 T
+(the ) 457.74 488.66 T
+(Bean ) 472.83 488.66 T
+(associated ) 496.25 488.66 T
+(with) 540.22 488.66 T
+( ) 558 488.66 T
+(that MIME type.) 207 476.66 T
+72 433.33 558 436.33 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+207 435.48 558 435.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 435.48 198 435.48 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(8.0) 181.32 440.33 T
+(Frame) 207 440.33 T
+(w) 242.83 440.33 T
+(ork Integration P) 251.93 440.33 T
+(oints) 346.8 440.33 T
+66 452/G265985 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(This ) 207 412.66 T
+(section ) 228.79 412.66 T
+(presents ) 261.14 412.66 T
+(se) 297.92 412.66 T
+(v) 306.01 412.66 T
+(eral ) 310.86 412.66 T
+(e) 329.86 412.66 T
+(xamples ) 334.15 412.66 T
+(that ) 371.49 412.66 T
+(clarify ) 390.51 412.66 T
+(ho) 420.62 412.66 T
+(w ) 430.38 412.66 T
+(Ja) 441.61 412.66 T
+(v) 449.74 412.66 T
+(aBeans\252 ) 454.49 412.66 T
+(de) 497.18 412.66 T
+(v) 506.38 412.66 T
+(elopers ) 511.23 412.66 T
+(can) 544.12 412.66 T
+( ) 558 412.66 T
+66 423/G266278 FmND
+(write Beans that are inte) 207 400.66 T
+(grated with the J) 304.05 400.66 T
+(AF) 369.83 400.66 T
+(.) 381.81 400.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(First, ) 207 376.66 T
+(let\325) 230.29 376.66 T
+(s ) 243.07 376.66 T
+(re) 249.41 376.66 T
+(vie) 256.93 376.66 T
+(w ) 268.9 376.66 T
+(the ) 278.56 376.66 T
+(plugg) 293.23 376.66 T
+(able ) 315.96 376.66 T
+(components ) 335.07 376.66 T
+(of ) 385.85 376.66 T
+(the ) 396.63 376.66 T
+(Ja) 411.29 376.66 T
+(v) 419.42 376.66 T
+(aBeans\252 ) 424.17 376.66 T
+(Acti) 465.3 376.66 T
+(v) 482.27 376.66 T
+(ation ) 487.02 376.66 T
+(Frame) 509.47 376.66 T
+(w) 534.77 376.66 T
+(ork:) 541.89 376.66 T
+66 387/G266323 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 357.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(A mechanism that accesses tar) 220.74 357.99 T
+(get data where it is stored: DataSource ) 342.75 357.99 T
+66 369/G266280 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 341.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(A mechanism to con) 220.74 341.99 T
+(v) 302.83 341.99 T
+(ert data objects to and from an e) 307.68 341.99 T
+(xternal byte stream format: ) 436.11 341.99 T
+66 353/G266343 FmND
+(DataContentHandler) 220.74 329.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 313.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(A mechanism to locate visual components that operate on data objects: ) 220.74 313.99 T
+66 325/G266346 FmND
+(CommandMap ) 220.74 301.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 285.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(The visual components that operate on data objects: J) 220.74 285.99 T
+(AF-a) 434 285.99 T
+(w) 454.4 285.99 T
+(are Beans) 461.52 285.99 T
+66 297/G266349 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(As ) 207 261.66 T
+(a ) 223.27 261.66 T
+(Ja) 232.88 261.66 T
+(v) 241.01 261.66 T
+(aBeans\252 ) 245.76 261.66 T
+(de) 289.61 261.66 T
+(v) 298.8 261.66 T
+(eloper) 303.64 261.66 T
+(, ) 328.23 261.66 T
+(you ) 335.9 261.66 T
+(may ) 356.07 261.66 T
+(b) 378.45 261.66 T
+(uild ) 383.25 261.66 T
+(visual ) 403.98 261.66 T
+(Beans. ) 433.03 261.66 T
+(Y) 465.14 261.66 T
+(ou ) 471.26 261.66 T
+(can ) 486.42 261.66 T
+(also ) 505.46 261.66 T
+(de) 526.74 261.66 T
+(v) 535.93 261.66 T
+(elop) 540.78 261.66 T
+( ) 558 261.66 T
+66 272/G266281 FmND
+(DataContentHandlers ) 207 249.66 T
+(to ) 296.69 249.66 T
+(supply ) 307.5 249.66 T
+(data ) 337.21 249.66 T
+(to ) 356.91 249.66 T
+(those ) 367.72 249.66 T
+(Beans. ) 391.87 249.66 T
+(Y) 421.85 249.66 T
+(ou ) 427.97 249.66 T
+(might ) 441.01 249.66 T
+(also ) 467.38 249.66 T
+(need ) 486.53 249.66 T
+(to ) 508.45 249.66 T
+(de) 519.26 249.66 T
+(v) 528.45 249.66 T
+(elop ) 533.3 249.66 T
+(a) 553.56 249.66 T
+( ) 558 249.66 T
+(ne) 207 237.66 T
+(w DataSource or CommandMap class to access data and specify a data type.) 216.19 237.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(8.1) 184.1 207.66 T
+(Bean) 207 207.66 T
+66 218/G266282 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Suppose ) 207 183.66 T
+(you\325) 243.41 183.66 T
+(re ) 261.24 183.66 T
+(b) 271.54 183.66 T
+(uilding ) 276.33 183.66 T
+(a ) 307.2 183.66 T
+(ne) 314.16 183.66 T
+(w ) 323.35 183.66 T
+(W) 333.09 183.66 T
+(ombat ) 341.73 183.66 T
+(Editor ) 369.26 183.66 T
+(product, ) 396.78 183.66 T
+(with ) 432.35 183.66 T
+(its ) 452.65 183.66 T
+(corresponding ) 464.63 183.66 T
+(W) 524.36 183.66 T
+(ombat) 533 183.66 T
+( ) 558 183.66 T
+66 194/G266352 FmND
+(\336le ) 207 171.66 T
+(format. ) 222.33 171.66 T
+(Y) 254.04 171.66 T
+(ou\325) 260.16 171.66 T
+(v) 272.99 171.66 T
+(e ) 277.84 171.66 T
+(b) 284.83 171.66 T
+(uilt ) 289.63 171.66 T
+(the ) 305.52 171.66 T
+(W) 320.29 171.66 T
+(ombat ) 328.93 171.66 T
+(Editor ) 356.48 171.66 T
+(as ) 384.03 171.66 T
+(one ) 394.91 171.66 T
+(big ) 411.9 171.66 T
+(Bean. ) 427.23 171.66 T
+(Y) 452.83 171.66 T
+(our ) 458.95 171.66 T
+(W) 474.83 171.66 T
+(ombatBean ) 483.47 171.66 T
+(can ) 531.57 171.66 T
+(do) 548 171.66 T
+( ) 558 171.66 T
+(an) 207 159.66 T
+(ything ) 216.29 159.66 T
+(and ) 245.2 159.66 T
+(e) 262.99 159.66 T
+(v) 267.18 159.66 T
+(erything ) 272.03 159.66 T
+(that ) 308.71 159.66 T
+(you ) 327.06 159.66 T
+(might ) 345.41 159.66 T
+(w) 372.1 159.66 T
+(ant ) 379.22 159.66 T
+(to ) 394.79 159.66 T
+(do ) 405.92 159.66 T
+(with ) 419.26 159.66 T
+(a ) 440.39 159.66 T
+(W) 448.18 159.66 T
+(ombat. ) 456.82 159.66 T
+(It ) 487.67 159.66 T
+(can ) 497.13 159.66 T
+(edit, ) 514.36 159.66 T
+(it ) 535.21 159.66 T
+(can) 544.12 159.66 T
+( ) 558 159.66 T
+(print, ) 207 147.66 T
+(it ) 231.49 147.66 T
+(can ) 240.16 147.66 T
+(vie) 257.14 147.66 T
+(w) 269.11 147.66 T
+(, ) 275.68 147.66 T
+(it ) 281.29 147.66 T
+(can ) 289.95 147.66 T
+(sa) 306.94 147.66 T
+(v) 315.07 147.66 T
+(e ) 319.92 147.66 T
+(W) 327.46 147.66 T
+(ombats ) 336.1 147.66 T
+(to ) 368.1 147.66 T
+(\336les, ) 378.98 147.66 T
+(and ) 401.26 147.66 T
+(it ) 418.8 147.66 T
+(can ) 427.47 147.66 T
+(read ) 444.45 147.66 T
+(W) 464.77 147.66 T
+(ombats ) 473.41 147.66 T
+(in ) 505.4 147.66 T
+(from ) 516.28 147.66 T
+(\336les.) 538.83 147.66 T
+( ) 558 147.66 T
+(Y) 207 135.66 T
+(ou\325) 213.12 135.66 T
+(v) 225.95 135.66 T
+(e ) 230.8 135.66 T
+(de\336ned ) 238.15 135.66 T
+(a ) 270.51 135.66 T
+(language-independent ) 277.86 135.66 T
+(W) 369.08 135.66 T
+(ombat ) 377.72 135.66 T
+(\336le ) 405.64 135.66 T
+(format. ) 421.33 135.66 T
+(Y) 453.4 135.66 T
+(ou ) 459.52 135.66 T
+(consider ) 472.43 135.66 T
+(the ) 509.23 135.66 T
+(W) 524.36 135.66 T
+(ombat) 533 135.66 T
+( ) 558 135.66 T
+(data ) 207 123.66 T
+(and ) 227.99 123.66 T
+(\336le ) 246.75 123.66 T
+(formats ) 263.86 123.66 T
+(to ) 298.73 123.66 T
+(be ) 310.84 123.66 T
+(proprietary ) 324.6 123.66 T
+(so ) 373.36 123.66 T
+(you ) 386.58 123.66 T
+(ha) 405.9 123.66 T
+(v) 415.14 123.66 T
+(e ) 419.99 123.66 T
+(no ) 428.76 123.66 T
+(need ) 443.08 123.66 T
+(to ) 466.29 123.66 T
+(of) 478.39 123.66 T
+(fer ) 486.47 123.66 T
+(programmatic) 501.9 123.66 T
+( ) 558 123.66 T
+(interf) 207 111.66 T
+(aces to W) 228.56 111.66 T
+(ombats be) 267.19 111.66 T
+(yond what your W) 307.87 111.66 T
+(ombatBean supports. ) 381.78 111.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299476 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "15" 15
+%%Page: "16" 16
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.16/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 189 739.85 T
+(w) 215.87 739.85 T
+(ork Integration P) 222.7 739.85 T
+(oints) 293.85 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(16) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 21) 76.12 60.29 T
+[/EMC FmPD4
+[/StoreName /P299476 /StRetrieve FmPD4
+[/StoreName /P299476 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Y) 189 680.66 T
+(ou\325) 195.12 680.66 T
+(v) 207.95 680.66 T
+(e ) 212.8 680.66 T
+(chosen ) 220.83 680.66 T
+(the ) 252.2 680.66 T
+(MIME ) 268.01 680.66 T
+(type ) 298.82 680.66 T
+(\322application/x-w) 319.64 680.66 T
+(ombat\323 ) 386.74 680.66 T
+(to ) 419.78 680.66 T
+(describe ) 431.15 680.66 T
+(your ) 468.06 680.66 T
+(W) 489.99 680.66 T
+(ombat ) 498.63 680.66 T
+(\336le) 527.22 680.66 T
+( ) 540 680.66 T
+48 691/G266284 FmND
+(format, ) 189 668.66 T
+(and ) 220.62 668.66 T
+(you\325) 237.51 668.66 T
+(v) 255.35 668.66 T
+(e ) 260.2 668.66 T
+(chosen ) 267.09 668.66 T
+(the ) 297.32 668.66 T
+(\336lename ) 312 668.66 T
+(e) 348.9 668.66 T
+(xtension ) 353.19 668.66 T
+(\322.w) 389.53 668.66 T
+(om\323 ) 403.59 668.66 T
+(to ) 423.27 668.66 T
+(be ) 433.51 668.66 T
+(used ) 445.41 668.66 T
+(by ) 466.19 668.66 T
+(\336les ) 478.65 668.66 T
+(containing) 497.78 668.66 T
+( ) 540 668.66 T
+(W) 189 656.66 T
+(ombats.) 197.64 656.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(T) 189 632.66 T
+(o ) 194.31 632.66 T
+(inte) 205.92 632.66 T
+(grate ) 220.77 632.66 T
+(with ) 247.38 632.66 T
+(the ) 271.77 632.66 T
+(frame) 290.6 632.66 T
+(w) 313.67 632.66 T
+(ork, ) 320.79 632.66 T
+(you\325) 343.23 632.66 T
+(ll ) 361.46 632.66 T
+(need ) 373.64 632.66 T
+(some ) 399.13 632.66 T
+(simple ) 426.85 632.66 T
+(wrappers ) 460.13 632.66 T
+(for ) 503.4 632.66 T
+(your) 521.67 632.66 T
+( ) 540 632.66 T
+48 643/G266285 FmND
+(W) 189 620.66 T
+(ombatBean ) 197.64 620.66 T
+(for ) 247.73 620.66 T
+(each ) 263.93 620.66 T
+(command ) 286.79 620.66 T
+(you ) 330.77 620.66 T
+(w) 350.31 620.66 T
+(ant ) 357.43 620.66 T
+(to ) 374.18 620.66 T
+(implement. ) 386.5 620.66 T
+(F) 436.32 620.66 T
+(or ) 441.73 620.66 T
+(e) 454.6 620.66 T
+(xample, ) 458.89 620.66 T
+(for ) 495.37 620.66 T
+(a ) 511.57 620.66 T
+(Print) 520.55 620.66 T
+( ) 540 620.66 T
+(command wrapper you can write the follo) 189 608.66 T
+(wing code:) 356.49 608.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(public class WombatPrintBean extends WombatBean {) 198 591.33 T
+48 600/G266286 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(    public WombatPrintBean\050\051 {) 198 580.33 T
+48 589/G266356 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(          super\050\051;) 198 569.33 T
+48 578/G266357 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(          initPrinting\050\051;) 198 558.33 T
+48 567/G266358 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(      }) 198 547.33 T
+48 556/G266359 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(  }) 198 536.33 T
+48 545/G266360 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Y) 189 512.66 T
+(ou ) 195.12 512.66 T
+(will ) 207.86 512.66 T
+(need ) 226.15 512.66 T
+(to ) 247.77 512.66 T
+(create ) 258.29 512.66 T
+(a ) 284.89 512.66 T
+(mailcap ) 292.07 512.66 T
+(\336le ) 326.47 512.66 T
+(that ) 341.98 512.66 T
+(lists ) 359.72 512.66 T
+(the ) 378.58 512.66 T
+(MIME ) 393.54 512.66 T
+(type ) 423.49 512.66 T
+(\322application/x-w) 443.45 512.66 T
+(ombat\323) 510.56 512.66 T
+( ) 540 512.66 T
+48 523/G266287 FmND
+(and ) 189 500.66 T
+(user ) 211.32 500.66 T
+(visible ) 235.86 500.66 T
+(commands ) 270.4 500.66 T
+(that ) 321.61 500.66 T
+(are ) 344.49 500.66 T
+(supported ) 364.58 500.66 T
+(by ) 411.9 500.66 T
+(your ) 429.77 500.66 T
+(W) 455.98 500.66 T
+(ombatBean. ) 464.62 500.66 T
+(Y) 520.55 500.66 T
+(our) 526.67 500.66 T
+( ) 540 500.66 T
+(W) 189 488.66 T
+(ombatBean ) 197.64 488.66 T
+(wrappers ) 245.59 488.66 T
+(will ) 284.64 488.66 T
+(be ) 302.6 488.66 T
+(listed ) 314.44 488.66 T
+(as ) 338.51 488.66 T
+(the ) 349.24 488.66 T
+(objects ) 363.86 488.66 T
+(supporting ) 394.59 488.66 T
+(each ) 439.77 488.66 T
+(of ) 460.49 488.66 T
+(these ) 471.22 488.66 T
+(commands.) 494.17 488.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(application/x-wombat; ; x-java-view=com.foo.WombatViewBean; \134 ) 198 471.33 T
+( ) 532.8 471.33 T
+48 480/G266288 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(    x-java-edit=com.foo.WombatEditBean; \134 ) 198 460.33 T
+48 469/G266364 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+( ) 198 449.33 T
+(   x-java-print=com.foo.WombatPrintBean) 203.4 449.33 T
+48 458/G266365 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Y) 189 425.66 T
+(ou\325) 195.12 425.66 T
+(ll also need to create a mime.types \336le with an entry:) 208.35 425.66 T
+48 436/G266289 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(type=application/x-wombat desc=\323Wombat\323 exts=wom) 198 408.33 T
+48 417/G266290 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(All of these components are packaged in a J) 189 384.66 T
+(AR \336le:) 364.47 384.66 T
+48 395/G266291 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(META-INF/mailcap ) 198 367.33 T
+48 376/G266292 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(META-INF/mime.types) 198 356.33 T
+48 365/G266366 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(com/foo/WombatBean.class) 198 345.33 T
+48 354/G266367 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(com/foo/WombatEditBean.class) 198 334.33 T
+48 343/G266635 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(com/foo/WombatViewBean.class) 198 323.33 T
+48 332/G266631 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Because ) 189 299.66 T
+(e) 226.14 299.66 T
+(v) 230.33 299.66 T
+(erything ) 235.18 299.66 T
+(is ) 272.33 299.66 T
+(b) 282.82 299.66 T
+(uilt ) 287.61 299.66 T
+(into ) 304.77 299.66 T
+(one ) 324.15 299.66 T
+(Bean, ) 342.41 299.66 T
+(and ) 369.28 299.66 T
+(because ) 387.54 299.66 T
+(no ) 423.01 299.66 T
+(third ) 436.82 299.66 T
+(party ) 459.53 299.66 T
+(programmatic) 483.9 299.66 T
+( ) 540 299.66 T
+48 310/G266293 FmND
+(access ) 189 287.66 T
+(to ) 217.75 287.66 T
+(your ) 228.74 287.66 T
+(W) 250.29 287.66 T
+(ombat ) 258.92 287.66 T
+(objects ) 287.14 287.66 T
+(is ) 318.68 287.66 T
+(required, ) 328.56 287.66 T
+(there\325) 367.59 287.66 T
+(s ) 390.36 287.66 T
+(no ) 397.46 287.66 T
+(need ) 410.67 287.66 T
+(for ) 432.77 287.66 T
+(a ) 447.64 287.66 T
+(DataContentHandler) 455.29 287.66 T
+(.) 537.5 287.66 T
+( ) 540 287.66 T
+(Y) 189 275.66 T
+(our ) 195.12 275.66 T
+(W) 212.25 275.66 T
+(ombatBean ) 220.89 275.66 T
+(can ) 270.24 275.66 T
+(therefore ) 287.92 275.66 T
+(implement ) 327.81 275.66 T
+(the ) 374.39 275.66 T
+(Externalizable ) 390.41 275.66 T
+(interf) 451.97 275.66 T
+(ace ) 473.53 275.66 T
+(instead; ) 490.65 275.66 T
+(and) 525.56 275.66 T
+( ) 540 275.66 T
+(use ) 189 263.66 T
+(its ) 206.33 263.66 T
+(methods ) 219.78 263.66 T
+(to ) 257.68 263.66 T
+(read ) 269.46 263.66 T
+(and ) 290.67 263.66 T
+(write ) 309.11 263.66 T
+(your ) 333.67 263.66 T
+(W) 356 263.66 T
+(ombat ) 364.64 263.66 T
+(\336les. ) 393.64 263.66 T
+(The ) 416.81 263.66 T
+(DataHandler ) 436.36 263.66 T
+(can ) 491.46 263.66 T
+(call ) 509.34 263.66 T
+(the) 527.78 263.66 T
+( ) 540 263.66 T
+(Externalizable methods when appropriate. ) 189 251.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(8.2) 166.1 221.66 T
+(Beans) 189 221.66 T
+48 232/G266294 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Y) 189 197.66 T
+(our ) 195.12 197.66 T
+(W) 212.19 197.66 T
+(ombat ) 220.83 197.66 T
+(Editor ) 249.57 197.66 T
+(product ) 278.31 197.66 T
+(has ) 312.6 197.66 T
+(really ) 329.67 197.66 T
+(tak) 356.18 197.66 T
+(en ) 368.3 197.66 T
+(of) 381.49 197.66 T
+(f, ) 389.57 197.66 T
+(and ) 399.14 197.66 T
+(you\325) 417.32 197.66 T
+(re ) 435.15 197.66 T
+(no) 446.66 197.66 T
+(w ) 456.41 197.66 T
+(adding ) 467.37 197.66 T
+(signi\336cant) 498.33 197.66 T
+( ) 540 197.66 T
+48 208/G266295 FmND
+(ne) 189 185.66 T
+(w ) 198.19 185.66 T
+(functionality ) 208.76 185.66 T
+(and ) 263.23 185.66 T
+(\337e) 281.02 185.66 T
+(xibility ) 290.87 185.66 T
+(to ) 323.12 185.66 T
+(your ) 334.26 185.66 T
+(W) 355.94 185.66 T
+(ombat ) 364.58 185.66 T
+(Editor) 392.94 185.66 T
+(. ) 417.39 185.66 T
+(It\325) 423.24 185.66 T
+(s ) 432.13 185.66 T
+(no ) 439.37 185.66 T
+(longer ) 452.73 185.66 T
+(feasible ) 481.63 185.66 T
+(to ) 516.09 185.66 T
+(put) 527.22 185.66 T
+( ) 540 185.66 T
+(e) 189 173.66 T
+(v) 193.19 173.66 T
+(erything ) 198.04 173.66 T
+(into ) 235.04 173.66 T
+(one ) 254.28 173.66 T
+(giant ) 272.39 173.66 T
+(Bean. ) 296.07 173.66 T
+(Instead, ) 322.79 173.66 T
+(you\325) 357.84 173.66 T
+(v) 375.67 173.66 T
+(e ) 380.52 173.66 T
+(brok) 388.64 173.66 T
+(en ) 406.87 173.66 T
+(the ) 419.98 173.66 T
+(product ) 435.88 173.66 T
+(into ) 470.1 173.66 T
+(a ) 489.33 173.66 T
+(number ) 497.45 173.66 T
+(of) 531.67 173.66 T
+( ) 540 173.66 T
+(Beans and other components:) 189 161.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 142.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(A W) 202.74 142.99 T
+(ombatV) 221.1 142.99 T
+(ie) 252.73 142.99 T
+(wer Bean that can be used to quickly vie) 259.7 142.99 T
+(w a W) 421.63 142.99 T
+(ombat in read-only ) 446.93 142.99 T
+48 154/G266378 FmND
+(mode. ) 202.74 130.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 114.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(A W) 202.74 114.99 T
+(ombatEditor Bean that is hea) 221.1 114.99 T
+(vier than the W) 337 114.99 T
+(ombatV) 398.13 114.99 T
+(ie) 429.75 114.99 T
+(wer) 436.72 114.99 T
+(, b) 451.31 114.99 T
+(ut also allo) 461.11 114.99 T
+(ws ) 504.75 114.99 T
+48 126/G266372 FmND
+(editing. ) 202.74 102.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299529 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "16" 16
+%%Page: "17" 17
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.17/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 207 739.85 T
+(w) 233.87 739.85 T
+(ork Integration P) 240.7 739.85 T
+(oints) 311.85 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(17) 522.26 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+[/EMC FmPD4
+[/StoreName /P299529 /StRetrieve FmPD4
+[/StoreName /P299529 /StStore FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 679.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(A W) 220.74 679.99 T
+(ombatPrinter Bean that simply prints a W) 239.1 679.99 T
+(ombat.) 404.96 679.99 T
+66 691/G266384 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 663.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(A component that reads and writes W) 220.74 663.99 T
+(ombat \336les. ) 371.02 663.99 T
+66 675/G266381 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 207 647.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(A ) 220.74 647.99 T
+(W) 230.37 647.99 T
+(ombat ) 239.01 647.99 T
+(class ) 266.42 647.99 T
+(that ) 288.27 647.99 T
+(encapsulates ) 305.68 647.99 T
+(the ) 358.63 647.99 T
+(W) 373.26 647.99 T
+(ombat ) 381.9 647.99 T
+(data ) 409.31 647.99 T
+(and ) 428.38 647.99 T
+(is ) 445.23 647.99 T
+(used ) 454.3 647.99 T
+(by ) 475.04 647.99 T
+(your ) 487.45 647.99 T
+(other ) 508.19 647.99 T
+(Beans ) 531.15 647.99 T
+66 659/G266387 FmND
+(and components.) 220.74 635.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(In ) 207 611.66 T
+(addition, ) 220.33 611.66 T
+(customers ) 260.61 611.66 T
+(ha) 306.16 611.66 T
+(v) 315.4 611.66 T
+(e ) 320.25 611.66 T
+(demanded ) 329.69 611.66 T
+(to ) 375.8 611.66 T
+(be ) 388.58 611.66 T
+(able ) 403.02 611.66 T
+(to ) 424.68 611.66 T
+(programmatically ) 437.46 611.66 T
+(manipulate) 513.56 611.66 T
+( ) 558 611.66 T
+66 622/G266297 FmND
+(W) 207 599.66 T
+(ombats, ) 215.64 599.66 T
+(independently ) 249.59 599.66 T
+(from ) 308.82 599.66 T
+(the ) 330.82 599.66 T
+(visual ) 345.6 599.66 T
+(vie) 372.05 599.66 T
+(wer ) 384.02 599.66 T
+(or ) 401.58 599.66 T
+(editor ) 412.47 599.66 T
+(Beans. ) 438.36 599.66 T
+(Y) 467.87 599.66 T
+(ou\325) 473.99 599.66 T
+(ll ) 487.22 599.66 T
+(need ) 495.34 599.66 T
+(to ) 516.78 599.66 T
+(create ) 527.13 599.66 T
+(a) 553.56 599.66 T
+( ) 558 599.66 T
+(DataContentHandler ) 207 587.66 T
+(that ) 292.15 587.66 T
+(can ) 309.54 587.66 T
+(con) 325.8 587.66 T
+(v) 339.84 587.66 T
+(ert ) 344.69 587.66 T
+(a ) 357.63 587.66 T
+(byte ) 364.46 587.66 T
+(stream ) 384.07 587.66 T
+(to ) 413.11 587.66 T
+(and ) 423.28 587.66 T
+(from ) 440.11 587.66 T
+(a ) 461.94 587.66 T
+(W) 468.76 587.66 T
+(ombat ) 477.4 587.66 T
+(object. ) 504.79 587.66 T
+(When) 534.12 587.66 T
+( ) 558 587.66 T
+(reading, ) 207 575.66 T
+(the ) 245.23 575.66 T
+(W) 263.19 575.66 T
+(ombatDataContentHandler ) 271.83 575.66 T
+(reads ) 385.33 575.66 T
+(a ) 412.17 575.66 T
+(byte ) 422.36 575.66 T
+(stream ) 445.32 575.66 T
+(and ) 477.72 575.66 T
+(returns ) 497.9 575.66 T
+(a ) 531.41 575.66 T
+(ne) 541.59 575.66 T
+(w) 550.78 575.66 T
+( ) 558 575.66 T
+(W) 207 563.66 T
+(ombat ) 215.64 563.66 T
+(object. ) 243.26 563.66 T
+(When ) 272.82 563.66 T
+(writing, ) 299.31 563.66 T
+(the ) 333.32 563.66 T
+(W) 348.16 563.66 T
+(ombatDataContentHandler ) 356.8 563.66 T
+(tak) 467.18 563.66 T
+(es ) 479.3 563.66 T
+(a ) 490.24 563.66 T
+(W) 497.3 563.66 T
+(ombat ) 505.94 563.66 T
+(object) 533.56 563.66 T
+( ) 558 563.66 T
+(and ) 207 551.66 T
+(produces ) 226.29 551.66 T
+(a ) 267.24 551.66 T
+(corresponding ) 276.54 551.66 T
+(byte ) 338.6 551.66 T
+(stream. ) 360.67 551.66 T
+(Y) 394.68 551.66 T
+(ou\325) 400.8 551.66 T
+(ll ) 414.03 551.66 T
+(need ) 424.45 551.66 T
+(to ) 448.18 551.66 T
+(publish ) 460.81 551.66 T
+(the ) 495.11 551.66 T
+(API ) 512.18 551.66 T
+(to ) 533.15 551.66 T
+(the) 545.78 551.66 T
+( ) 558 551.66 T
+(W) 207 539.66 T
+(ombat class.) 215.64 539.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The ) 207 515.66 T
+(W) 228.62 515.66 T
+(ombatDataContentHandler ) 237.26 515.66 T
+(is ) 351.08 515.66 T
+(deli) 363.81 515.66 T
+(v) 378.56 515.66 T
+(ered ) 383.41 515.66 T
+(as ) 406.69 515.66 T
+(a ) 421.08 515.66 T
+(class ) 431.59 515.66 T
+(and ) 457.09 515.66 T
+(is ) 477.6 515.66 T
+(designated ) 490.33 515.66 T
+(as ) 539.16 515.66 T
+(a) 553.56 515.66 T
+( ) 558 515.66 T
+66 526/G266298 FmND
+(DataContentHandler ) 207 503.66 T
+(that ) 292.88 503.66 T
+(can ) 310.99 503.66 T
+(operate ) 327.99 503.66 T
+(on ) 360.54 503.66 T
+(W) 373.66 503.66 T
+(ombats ) 382.3 503.66 T
+(in ) 414.3 503.66 T
+(the ) 425.2 503.66 T
+(mailcap ) 440.54 503.66 T
+(\336le ) 475.32 503.66 T
+(included ) 491.21 503.66 T
+(in ) 528.77 503.66 T
+(your) 539.67 503.66 T
+( ) 558 503.66 T
+(J) 207 491.66 T
+(AR \336le. ) 210.29 491.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Y) 207 467.66 T
+(our ) 213.12 467.66 T
+(mailcap ) 229.17 467.66 T
+(\336le ) 263.55 467.66 T
+(changes ) 279.06 467.66 T
+(to ) 313.99 467.66 T
+(list ) 324.49 467.66 T
+(the ) 339.45 467.66 T
+(appropriate ) 354.39 467.66 T
+(W) 402.65 467.66 T
+(ombat ) 411.29 467.66 T
+(Beans, ) 439.01 467.66 T
+(which ) 468.67 467.66 T
+(implement ) 495.84 467.66 T
+(user) 541.34 467.66 T
+( ) 558 467.66 T
+66 478/G266299 FmND
+(commands:) 207 455.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(application/x-wombat; ) 216 438.33 T
+(; ) 331.61 438.33 T
+(x-java-View=com.foo.WombatViewBean; ) 339.23 438.33 T
+(\134 ) 530.45 438.33 T
+(         ) 538.06 438.33 T
+66 447/G266300 FmND
+(x-java-edit=com.foo.WombatEditBean;   \134 ) 216 427.33 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(         x-java-print=com.foo.WombatPrintBean; \134) 216 416.33 T
+66 425/G266388 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(         ) 216 405.33 T
+(x-java-content-handler=com.foo.WombatDataContentHandler) 261 405.33 T
+66 414/G266650 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Y) 207 381.66 T
+(our ) 213.12 381.66 T
+(W) 229.73 381.66 T
+(ombat ) 238.37 381.66 T
+(Beans ) 266.66 381.66 T
+(can ) 294.38 381.66 T
+(continue ) 311.54 381.66 T
+(to ) 349.27 381.66 T
+(implement ) 360.33 381.66 T
+(the ) 406.39 381.66 T
+(Externalizable ) 421.9 381.66 T
+(interf) 482.94 381.66 T
+(ace, ) 504.5 381.66 T
+(and ) 523.61 381.66 T
+(thus) 541.33 381.66 T
+( ) 558 381.66 T
+66 392/G266302 FmND
+(read ) 207 369.66 T
+(and ) 229.18 369.66 T
+(write ) 248.59 369.66 T
+(W) 274.11 369.66 T
+(ombat ) 282.75 369.66 T
+(byte ) 312.72 369.66 T
+(streams. ) 334.91 369.66 T
+(The) 372.93 369.66 T
+(y ) 388.33 369.66 T
+(are ) 398.3 369.66 T
+(more ) 415.48 369.66 T
+(lik) 441 369.66 T
+(ely ) 451.46 369.66 T
+(to ) 468.65 369.66 T
+(simply ) 481.4 369.66 T
+(operate ) 513.6 369.66 T
+(on) 548 369.66 T
+( ) 558 369.66 T
+(W) 207 357.66 T
+(ombat ) 215.64 357.66 T
+(objects ) 242.9 357.66 T
+(directly) 273.48 357.66 T
+(. ) 303.38 357.66 T
+(T) 308.14 357.66 T
+(o ) 313.45 357.66 T
+(\336nd ) 320.71 357.66 T
+(the ) 338.52 357.66 T
+(W) 353 357.66 T
+(ombat ) 361.64 357.66 T
+(object ) 388.9 357.66 T
+(the) 415.6 357.66 T
+(y\325) 427.67 357.66 T
+(re ) 435.49 357.66 T
+(being ) 445.52 357.66 T
+(in) 470 357.66 T
+(v) 477.38 357.66 T
+(ok) 482.18 357.66 T
+(ed ) 492.08 357.66 T
+(to ) 503.78 357.66 T
+(operate ) 513.81 357.66 T
+(on,) 545.5 357.66 T
+( ) 558 357.66 T
+(the) 207 345.66 T
+(y ) 219.07 345.66 T
+(implement ) 226.65 345.66 T
+(the ) 272 345.66 T
+(CommandObject ) 286.8 345.66 T
+(interf) 357.7 345.66 T
+(ace. ) 379.27 345.66 T
+(The ) 397.66 345.66 T
+(setCommandConte) 415.79 345.66 T
+(xt ) 492.31 345.66 T
+(method ) 502.66 345.66 T
+(refers) 535.24 345.66 T
+( ) 558 345.66 T
+(them ) 207 333.66 T
+(to ) 230.92 333.66 T
+(the ) 242.62 333.66 T
+(corresponding ) 258.77 333.66 T
+(DataHandler) 319.9 333.66 T
+(, ) 370.59 333.66 T
+(from ) 377.01 333.66 T
+(which ) 400.37 333.66 T
+(the) 428.73 333.66 T
+(y ) 440.8 333.66 T
+(can ) 449.72 333.66 T
+(in) 467.53 333.66 T
+(v) 474.91 333.66 T
+(ok) 479.71 333.66 T
+(e ) 489.61 333.66 T
+(the ) 497.97 333.66 T
+(getContent) 514.11 333.66 T
+( ) 558 333.66 T
+(method, ) 207 321.66 T
+(which ) 246.85 321.66 T
+(will ) 278.64 321.66 T
+(return ) 301.55 321.66 T
+(a ) 332.78 321.66 T
+(W) 344.57 321.66 T
+(ombat ) 353.2 321.66 T
+(object ) 385.55 321.66 T
+(\050produced ) 417.34 321.66 T
+(by ) 465.23 321.66 T
+(the ) 482.58 321.66 T
+(W) 502.15 321.66 T
+(ombatData-) 510.79 321.66 T
+( ) 558 321.66 T
+(ContentHandler\051.) 207 309.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(All components are packaged in a J) 207 285.66 T
+(AR \336le.) 348.59 285.66 T
+66 296/G266303 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(8.3) 184.1 255.66 T
+( Vie) 207 255.66 T
+(wer Onl) 224.64 255.66 T
+(y) 261.17 255.66 T
+66 266/G266304 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The ) 207 231.66 T
+(W) 225.97 231.66 T
+(ombat ) 234.61 231.66 T
+(product ) 263.02 231.66 T
+(has ) 296.99 231.66 T
+(been ) 313.73 231.66 T
+(wildly ) 336.03 231.66 T
+(successful. ) 365.01 231.66 T
+(The ) 412.02 231.66 T
+(V) 430.99 231.66 T
+(ie) 437.61 231.66 T
+(wAll ) 444.58 231.66 T
+(Compan) 468 231.66 T
+(y ) 501.74 231.66 T
+(has ) 510.15 231.66 T
+(decided) 526.9 231.66 T
+( ) 558 231.66 T
+66 242/G266305 FmND
+(that ) 207 219.66 T
+(it ) 224.97 219.66 T
+(can ) 233.5 219.66 T
+(produce ) 250.35 219.66 T
+(a ) 285.53 219.66 T
+(W) 292.94 219.66 T
+(ombat ) 301.58 219.66 T
+(vie) 329.55 219.66 T
+(wer ) 341.52 219.66 T
+(that\325) 359.48 219.66 T
+(s ) 377.25 219.66 T
+(much ) 384.11 219.66 T
+(f) 409.3 219.66 T
+(aster ) 412.53 219.66 T
+(than ) 434.38 219.66 T
+(the ) 454.57 219.66 T
+(W) 469.76 219.66 T
+(ombatV) 478.4 219.66 T
+(ie) 510.02 219.66 T
+(wer ) 516.99 219.66 T
+(Bean.) 534.95 219.66 T
+( ) 558 219.66 T
+(Since ) 207 207.66 T
+(the) 233.23 207.66 T
+(y ) 245.3 207.66 T
+(don\325) 254.32 207.66 T
+(t ) 272.46 207.66 T
+(w) 279.26 207.66 T
+(ant ) 286.38 207.66 T
+(to ) 302.61 207.66 T
+(depend ) 314.4 207.66 T
+(on ) 347.29 207.66 T
+(the ) 361.31 207.66 T
+(presence ) 377.54 207.66 T
+(of ) 416.53 207.66 T
+(an) 428.87 207.66 T
+(y ) 438.16 207.66 T
+(W) 447.17 207.66 T
+(ombat ) 455.82 207.66 T
+(components, ) 484.83 207.66 T
+(their) 539.67 207.66 T
+( ) 558 207.66 T
+(vie) 207 195.66 T
+(wer must parse the W) 218.97 195.66 T
+(ombat \336le format, which the) 305.37 195.66 T
+(y re) 418.82 195.66 T
+(v) 433.84 195.66 T
+(erse engineered.) 438.69 195.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The ) 207 171.66 T
+(V) 225.92 171.66 T
+(ie) 232.54 171.66 T
+(wAll ) 239.51 171.66 T
+(W) 262.88 171.66 T
+(ombatV) 271.52 171.66 T
+(ie) 303.14 171.66 T
+(werBean ) 310.11 171.66 T
+(implements ) 349.03 171.66 T
+(the ) 399.07 171.66 T
+(Externalizable ) 414.66 171.66 T
+(interf) 475.79 171.66 T
+(ace ) 497.35 171.66 T
+(to ) 514.04 171.66 T
+(read ) 525.2 171.66 T
+(the) 545.78 171.66 T
+( ) 558 171.66 T
+66 182/G266306 FmND
+(W) 207 159.66 T
+(ombat data format.) 215.64 159.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(V) 207 135.66 T
+(ie) 213.62 135.66 T
+(wAll deli) 220.59 135.66 T
+(v) 257.84 135.66 T
+(ers an appropriate mailcap \336le:) 262.69 135.66 T
+66 146/G266307 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(application/x-wombat; ; x-java-view=com.viewall.WombatViewer) 216 118.33 T
+66 127/G266308 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(and mime.types \336le:) 207 94.66 T
+66 105/G266309 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299507 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "17" 17
+%%Page: "18" 18
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.18/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 189 739.85 T
+(w) 215.87 739.85 T
+(ork Deliverab) 222.7 739.85 T
+(les) 279.63 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(18) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 21) 76.12 60.29 T
+[/EMC FmPD4
+[/StoreName /P299507 /StRetrieve FmPD4
+[/StoreName /P299507 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(type=application/x-wombat desc=\323Wombat\323 exts=wom) 198 681.33 T
+48 690/G266310 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(All components are packaged in a J) 189 657.66 T
+(AR \336le.) 330.59 657.66 T
+48 668/G266311 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(8.4) 166.1 627.66 T
+( ContentHandler Bean Onl) 189 627.66 T
+(y) 313.31 627.66 T
+48 638/G266312 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(No) 189 603.66 T
+(w ) 200.97 603.66 T
+(that ) 210.79 603.66 T
+(e) 228.4 603.66 T
+(v) 232.59 603.66 T
+(eryone ) 237.44 603.66 T
+(is ) 267.26 603.66 T
+(using ) 276.53 603.66 T
+(W) 300.81 603.66 T
+(ombats, ) 309.45 603.66 T
+(you\325) 343.44 603.66 T
+(v) 361.27 603.66 T
+(e ) 366.12 603.66 T
+(decided ) 373.17 603.66 T
+(that ) 406.87 603.66 T
+(it ) 424.48 603.66 T
+(w) 432.64 603.66 T
+(ould ) 439.76 603.66 T
+(be ) 460.15 603.66 T
+(nice ) 472.19 603.66 T
+(if ) 491.46 603.66 T
+(you ) 500.17 603.66 T
+(could) 517.78 603.66 T
+( ) 540 603.66 T
+48 614/G266313 FmND
+(notify ) 189 591.66 T
+(people ) 217.35 591.66 T
+(by ) 248.47 591.66 T
+(email ) 262.93 591.66 T
+(when ) 289.62 591.66 T
+(ne) 315.74 591.66 T
+(w ) 324.93 591.66 T
+(W) 336.61 591.66 T
+(ombats ) 345.25 591.66 T
+(are ) 378.6 591.66 T
+(created. ) 395.27 591.66 T
+(Y) 431.1 591.66 T
+(ou ) 437.22 591.66 T
+(ha) 451.68 591.66 T
+(v) 460.92 591.66 T
+(e ) 465.77 591.66 T
+(designed ) 474.68 591.66 T
+(a ) 514.69 591.66 T
+(ne) 523.59 591.66 T
+(w) 532.78 591.66 T
+( ) 540 591.66 T
+(W) 189 579.66 T
+(ombatNoti\336cation ) 197.64 579.66 T
+(class ) 272.83 579.66 T
+(and ) 294.67 579.66 T
+(a ) 311.52 579.66 T
+(corresponding ) 318.37 579.66 T
+(data ) 377.98 579.66 T
+(format ) 397.05 579.66 T
+(to ) 426.12 579.66 T
+(be ) 436.3 579.66 T
+(sent ) 448.15 579.66 T
+(by ) 466.67 579.66 T
+(email ) 479.08 579.66 T
+(using ) 503.7 579.66 T
+(the) 527.78 579.66 T
+( ) 540 579.66 T
+(MIME ) 189 567.66 T
+(type ) 220.17 567.66 T
+(\322application/x-w) 241.34 567.66 T
+(ombat-noti\336cation\323. ) 308.45 567.66 T
+(Y) 393.23 567.66 T
+(our ) 399.35 567.66 T
+(serv) 416.62 567.66 T
+(er ) 433.14 567.66 T
+(detects ) 444.85 567.66 T
+(the ) 476.57 567.66 T
+(presence ) 492.74 567.66 T
+(of) 531.67 567.66 T
+( ) 540 567.66 T
+(ne) 189 555.66 T
+(w ) 198.19 555.66 T
+(W) 209.42 555.66 T
+(ombats, ) 218.06 555.66 T
+(constructs ) 253.46 555.66 T
+(a ) 298.03 555.66 T
+(W) 306.48 555.66 T
+(ombatNoti\336cation ) 315.12 555.66 T
+(object, ) 391.91 555.66 T
+(and ) 422.86 555.66 T
+(constructs ) 441.31 555.66 T
+(and ) 485.88 555.66 T
+(sends ) 504.33 555.66 T
+(an) 530.56 555.66 T
+( ) 540 555.66 T
+(email ) 189 543.66 T
+(message ) 213.85 543.66 T
+(with ) 250.36 543.66 T
+(the ) 270.77 543.66 T
+(W) 285.62 543.66 T
+(ombat ) 294.26 543.66 T
+(noti\336cation ) 321.89 543.66 T
+(data ) 370.08 543.66 T
+(as ) 389.37 543.66 T
+(an ) 400.33 543.66 T
+(attachment. ) 412.4 543.66 T
+(Y) 461.41 543.66 T
+(our ) 467.53 543.66 T
+(customers ) 483.49 543.66 T
+(run) 526.67 543.66 T
+( ) 540 543.66 T
+(a ) 189 531.66 T
+(program ) 198.7 531.66 T
+(that ) 237.83 531.66 T
+(scans ) 258.08 531.66 T
+(their ) 285 531.66 T
+(email ) 308.58 531.66 T
+(INBO) 336.06 531.66 T
+(X ) 360.1 531.66 T
+(for ) 372.57 531.66 T
+(messages ) 389.49 531.66 T
+(with ) 432.51 531.66 T
+(W) 455.55 531.66 T
+(ombat ) 464.18 531.66 T
+(noti\336cation) 494.44 531.66 T
+( ) 540 531.66 T
+(attachments ) 189 519.66 T
+(and ) 241.34 519.66 T
+(use ) 260.36 519.66 T
+(the ) 278.26 519.66 T
+(W) 295.05 519.66 T
+(ombatNoti\336cation ) 303.69 519.66 T
+(class ) 381.04 519.66 T
+(to ) 405.05 519.66 T
+(notify ) 417.41 519.66 T
+(their ) 445.87 519.66 T
+(users ) 468.77 519.66 T
+(of ) 493.89 519.66 T
+(the ) 506.8 519.66 T
+(ne) 523.59 519.66 T
+(w) 532.78 519.66 T
+( ) 540 519.66 T
+(W) 189 507.66 T
+(ombats.) 197.64 507.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(In ) 189 483.66 T
+(addition ) 202.14 483.66 T
+(to ) 239.73 483.66 T
+(the ) 252.32 483.66 T
+(serv) 269.34 483.66 T
+(er ) 285.85 483.66 T
+(application ) 298.43 483.66 T
+(and ) 347.68 483.66 T
+(user ) 366.93 483.66 T
+(application ) 388.4 483.66 T
+(described, ) 437.64 483.66 T
+(you\325) 483.27 483.66 T
+(ll ) 501.5 483.66 T
+(need ) 511.87 483.66 T
+(a) 535.56 483.66 T
+( ) 540 483.66 T
+48 494/G266314 FmND
+(DataContentHandler ) 189 471.66 T
+(to ) 276.94 471.66 T
+(plug ) 289.9 471.66 T
+(into ) 312.86 471.66 T
+(the ) 333.6 471.66 T
+(DataHandler ) 351 471.66 T
+(infrastructure ) 407.27 471.66 T
+(and ) 466.32 471.66 T
+(construct ) 485.94 471.66 T
+(the) 527.78 471.66 T
+( ) 540 471.66 T
+(W) 189 459.66 T
+(ombatNoti\336cation ) 197.64 459.66 T
+(objects. ) 273.01 459.66 T
+(The ) 306.43 459.66 T
+(W) 324.57 459.66 T
+(ombatNoti\336cation ) 333.21 459.66 T
+(DataContentHandler ) 408.58 459.66 T
+(is ) 493.93 459.66 T
+(deli) 503.19 459.66 T
+(v) 517.94 459.66 T
+(ered) 522.79 459.66 T
+( ) 540 459.66 T
+(as ) 189 447.66 T
+(a ) 199.86 447.66 T
+(class ) 206.83 447.66 T
+(named ) 228.8 447.66 T
+(W) 258 447.66 T
+(ombatNoti\336cationDataContentHandler ) 266.64 447.66 T
+(and ) 424.71 447.66 T
+(is ) 441.68 447.66 T
+(deli) 450.88 447.66 T
+(v) 465.63 447.66 T
+(ered ) 470.48 447.66 T
+(in ) 490.22 447.66 T
+(a ) 500.54 447.66 T
+(J) 507.51 447.66 T
+(AR ) 510.8 447.66 T
+(\336le) 527.22 447.66 T
+( ) 540 447.66 T
+(with the follo) 189 435.66 T
+(wing mailcap \336le:) 242.64 435.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+7 9 Q
+(application/x-wombat-notification; \134) 198 418.33 T
+48 427/G266660 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_javasource) cvn /Class /SP192587 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+(                          WombatNotificationDataContentHandler) 198 407.33 T
+48 416/G266661 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(The ) 189 383.66 T
+(serv) 208.45 383.66 T
+(er ) 224.96 383.66 T
+(application ) 236.63 383.66 T
+(creates ) 284.96 383.66 T
+(DataHandlers ) 316.62 383.66 T
+(for ) 375.5 383.66 T
+(its ) 391.06 383.66 T
+(W) 404.4 383.66 T
+(ombatNoti\336cation ) 413.04 383.66 T
+(objects. ) 489.72 383.66 T
+(The) 524.45 383.66 T
+( ) 540 383.66 T
+48 394/G266315 FmND
+(email ) 189 371.66 T
+(system ) 216.82 371.66 T
+(uses ) 250.2 371.66 T
+(the ) 273.01 371.66 T
+(DataHandler ) 290.83 371.66 T
+(to ) 347.52 371.66 T
+(fetch ) 360.89 371.66 T
+(a ) 386.48 371.66 T
+(byte ) 396.52 371.66 T
+(stream ) 419.34 371.66 T
+(corresponding ) 451.6 371.66 T
+(to ) 514.4 371.66 T
+(the) 527.78 371.66 T
+( ) 540 371.66 T
+(W) 189 359.66 T
+(ombatNoti\336cation ) 197.64 359.66 T
+(object. ) 272.91 359.66 T
+(\050The ) 302.34 359.66 T
+(DataHandler ) 323.71 359.66 T
+(uses ) 377.29 359.66 T
+(the ) 397 359.66 T
+(DataContentHandler ) 411.71 359.66 T
+(to ) 496.96 359.66 T
+(do ) 507.23 359.66 T
+(this.\051) 519.72 359.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(The ) 189 335.66 T
+(client ) 208.33 335.66 T
+(application ) 234.33 335.66 T
+(retrie) 282.55 335.66 T
+(v) 303.4 335.66 T
+(es ) 308.25 335.66 T
+(a ) 320.36 335.66 T
+(DataHandler ) 328.58 335.66 T
+(for ) 383.45 335.66 T
+(the ) 398.9 335.66 T
+(email ) 414.9 335.66 T
+(attachment ) 440.9 335.66 T
+(and ) 488.56 335.66 T
+(uses ) 506.78 335.66 T
+(the) 527.78 335.66 T
+( ) 540 335.66 T
+48 346/G266316 FmND
+(getContent ) 189 323.66 T
+(method ) 237.26 323.66 T
+(to ) 271.63 323.66 T
+(get ) 283.78 323.66 T
+(the ) 300.37 323.66 T
+(corresponding ) 316.95 323.66 T
+(W) 378.53 323.66 T
+(ombatNoti\336cation ) 387.17 323.66 T
+(object, ) 464.32 323.66 T
+(which ) 495.63 323.66 T
+(will) 524.44 323.66 T
+( ) 540 323.66 T
+(then notify the user) 189 311.66 T
+(. ) 265.94 311.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+48 304/G266064 FmND
+54 250.33 540 253.33 C
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+189 252.48 540 252.48 2 L
+0.25 H
+2 Z
+0 X
+N
+54 252.48 180 252.48 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(9.0) 163.32 257.33 T
+( Frame) 189 257.33 T
+(w) 228.17 257.33 T
+(ork Deliverab) 237.26 257.33 T
+(les) 313.18 257.33 T
+48 269/G264922 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 10 Q
+(9.1) 166.1 223.66 T
+(P) 189 223.66 T
+(ac) 195.37 223.66 T
+(ka) 206.29 223.66 T
+(ging Details) 217.31 223.66 T
+48 234/G266515 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(The J) 189 207.66 T
+(AF is implemented as a Standard Extension to the Ja) 210.34 207.66 T
+(v) 420.96 207.66 T
+(a\252 Platform and is also ) 425.71 207.66 T
+48 218/G266516 FmND
+(included in the J2SE 6.0 release. The follo) 189 195.66 T
+(wing are some more details about the ) 358.45 195.66 T
+(package:) 189 183.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 164.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(The package name is) 202.74 164.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3749 /StPNE FmPD4
+[/StBMC FmPD4
+1 9 Q
+( ) 286.88 164.99 T
+7 F
+(javax.activation.) 289.13 164.99 T
+48 176/G266521 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 148.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(This ) 202.74 148.99 T
+(release ) 222.66 148.99 T
+(is ) 252.55 148.99 T
+(included ) 261.36 148.99 T
+(in ) 297.93 148.99 T
+(J2SE ) 307.85 148.99 T
+(6.0 ) 330.54 148.99 T
+(and ) 345.17 148.99 T
+(J2EE ) 361.75 148.99 T
+(5.0, ) 384.99 148.99 T
+(and ) 402.12 148.99 T
+(is ) 418.7 148.99 T
+(also ) 427.5 148.99 T
+(a) 445.75 148.99 T
+(v) 449.99 148.99 T
+(ailable ) 454.74 148.99 T
+(separately ) 483.53 148.99 T
+(for ) 526.21 148.99 T
+48 160/G266525 FmND
+(use on earlier v) 202.74 136.66 T
+(ersions of J2SE.) 263.96 136.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192590 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 189 120.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(The J) 202.74 120.99 T
+(AF Reference Implementation does not include DataContentHandlers for an) 224.09 120.99 T
+(y ) 528.87 120.99 T
+48 132/G273749 FmND
+(MIME data types; applications must include the DataContentHandlers th) 202.74 108.66 T
+(y need. ) 494.33 108.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299169 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "18" 18
+%%Page: "19" 19
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.19/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Frame) 207 739.85 T
+(w) 233.87 739.85 T
+(ork Deliverab) 240.7 739.85 T
+(les) 297.63 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(19) 522.26 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+[/EMC FmPD4
+[/StoreName /P299169 /StRetrieve FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 F
+(Note ) 220.74 680.66 T
+(that ) 242.28 680.66 T
+(the ) 259.38 680.66 T
+(Ja) 273.7 680.66 T
+(v) 281.83 680.66 T
+(aMail ) 286.58 680.66 T
+(Reference ) 312.01 680.66 T
+(Implementation ) 354.64 680.66 T
+(includes ) 420.07 680.66 T
+(DataContentHandlers ) 455.49 680.66 T
+(for ) 544.24 680.66 T
+(some basic data types used in mail messages.) 220.74 668.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299169 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(9.2) 184.1 638.66 T
+(Frame) 207 638.66 T
+(w) 236.86 638.66 T
+(ork Core Classes) 244.44 638.66 T
+66 649/G271189 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(interface ) 207 614.66 T
+(DataSour) 251.91 614.66 T
+(ce:) 296.16 614.66 T
+1 F
+( ) 310.61 614.66 T
+(The ) 313.51 614.66 T
+(DataSource ) 331.96 614.66 T
+(interf) 381.52 614.66 T
+(ace ) 403.08 614.66 T
+(pro) 419.3 614.66 T
+(vides ) 432.48 614.66 T
+(the ) 456.49 614.66 T
+(Ja) 471.62 614.66 T
+(v) 479.75 614.66 T
+(aBeans ) 484.5 614.66 T
+(Acti) 516.28 614.66 T
+(v) 533.25 614.66 T
+(ation) 538 614.66 T
+( ) 558 614.66 T
+66 625/G271190 FmND
+(Frame) 207 602.66 T
+(w) 232.3 602.66 T
+(ork ) 239.42 602.66 T
+(with ) 255.93 602.66 T
+(an ) 276.88 602.66 T
+(abstraction ) 289.5 602.66 T
+(of ) 336.55 602.66 T
+(some ) 348.06 602.66 T
+(arbitrary ) 372.35 602.66 T
+(collection ) 409.95 602.66 T
+(of ) 452.57 602.66 T
+(data. ) 464.08 602.66 T
+(It ) 486.41 602.66 T
+(pro) 495.7 602.66 T
+(vides ) 508.88 602.66 T
+(a ) 533.16 602.66 T
+(type) 540.78 602.66 T
+( ) 558 602.66 T
+(for ) 207 590.66 T
+(that ) 222.62 590.66 T
+(data ) 241.58 590.66 T
+(as ) 262.2 590.66 T
+(well ) 274.48 590.66 T
+(as ) 295.66 590.66 T
+(access ) 307.95 590.66 T
+(to ) 337.45 590.66 T
+(it ) 349.19 590.66 T
+(in ) 358.71 590.66 T
+(the ) 370.45 590.66 T
+(form ) 386.62 590.66 T
+(of ) 410.02 590.66 T
+(InputStreams ) 422.31 590.66 T
+(and ) 479.6 590.66 T
+(OutputStreams) 498 590.66 T
+( ) 558 590.66 T
+(where appropriate.) 207 578.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 207 554.66 T
+(lass ) 212.36 554.66 T
+(DataHandler:) 236.2 554.66 T
+1 F
+( ) 298.43 554.66 T
+(The ) 302.37 554.66 T
+(DataHandler ) 321.86 554.66 T
+(class ) 376.88 554.66 T
+(pro) 400.26 554.66 T
+(vides ) 413.44 554.66 T
+(a ) 438.49 554.66 T
+(consistent ) 446.87 554.66 T
+(interf) 490.8 554.66 T
+(ace ) 512.36 554.66 T
+(to ) 529.62 554.66 T
+(data) 541.34 554.66 T
+( ) 558 554.66 T
+66 565/G271198 FmND
+(a) 207 542.66 T
+(v) 211.24 542.66 T
+(ailable ) 215.99 542.66 T
+(in ) 246.72 542.66 T
+(man) 258.57 542.66 T
+(y ) 275.64 542.66 T
+(dif) 284.71 542.66 T
+(ferent ) 295.57 542.66 T
+(sources ) 322.96 542.66 T
+(and ) 357.02 542.66 T
+(formats. ) 375.54 542.66 T
+(It ) 412.66 542.66 T
+(manages ) 422.84 542.66 T
+(simple ) 461.9 542.66 T
+(stream ) 492.64 542.66 T
+(to ) 523.37 542.66 T
+(string) 535.22 542.66 T
+( ) 558 542.66 T
+(con) 207 530.66 T
+(v) 221.04 530.66 T
+(ersions ) 225.89 530.66 T
+(and ) 258.21 530.66 T
+(related ) 276.64 530.66 T
+(operations ) 307.85 530.66 T
+(using ) 353.5 530.66 T
+(DataContentHandlers. ) 379.16 530.66 T
+(It ) 472.3 530.66 T
+(pro) 482.4 530.66 T
+(vides ) 495.58 530.66 T
+(access ) 520.69 530.66 T
+(to) 550.22 530.66 T
+( ) 558 530.66 T
+(commands ) 207 518.66 T
+(that ) 257.62 518.66 T
+(can ) 279.9 518.66 T
+(operate ) 301.07 518.66 T
+(on ) 337.79 518.66 T
+(the ) 355.08 518.66 T
+(data. ) 374.58 518.66 T
+(The ) 401.03 518.66 T
+(commands ) 423.87 518.66 T
+(are ) 474.49 518.66 T
+(found ) 493.98 518.66 T
+(using ) 524.6 518.66 T
+(a) 553.56 518.66 T
+( ) 558 518.66 T
+(CommandMap.) 207 506.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(interface ) 207 482.66 T
+(DataContentHandler:) 251.82 482.66 T
+1 F
+( ) 351.82 482.66 T
+(The ) 354.64 482.66 T
+(DataContentHandler ) 373.01 482.66 T
+(interf) 458.59 482.66 T
+(ace ) 480.15 482.66 T
+(is ) 496.29 482.66 T
+(implemented) 505.78 482.66 T
+( ) 558 482.66 T
+66 493/G271347 FmND
+(by ) 207 470.66 T
+(objects ) 224.14 470.66 T
+(that ) 259.61 470.66 T
+(can ) 281.74 470.66 T
+(be ) 302.76 470.66 T
+(used ) 319.34 470.66 T
+(to ) 344.8 470.66 T
+(e) 359.72 470.66 T
+(xtend ) 364.01 470.66 T
+(the ) 393.37 470.66 T
+(capabilities ) 412.73 470.66 T
+(of ) 465.42 470.66 T
+(the ) 480.88 470.66 T
+(DataHandler\325) 500.24 470.66 T
+(s) 554.11 470.66 T
+( ) 558 470.66 T
+(implementation ) 207 458.66 T
+(of ) 276.47 458.66 T
+(the ) 291.48 458.66 T
+(T) 310.39 458.66 T
+(ransferable ) 316.15 458.66 T
+(interf) 367.25 458.66 T
+(ace. ) 388.81 458.66 T
+(Through ) 411.32 458.66 T
+(DataContentHandlers ) 452.44 458.66 T
+(the) 545.78 458.66 T
+( ) 558 458.66 T
+(frame) 207 446.66 T
+(w) 230.07 446.66 T
+(ork ) 237.19 446.66 T
+(can ) 254.46 446.66 T
+(be ) 272.28 446.66 T
+(e) 285.66 446.66 T
+(xtended ) 289.95 446.66 T
+(to ) 325.55 446.66 T
+(con) 337.27 446.66 T
+(v) 351.31 446.66 T
+(ert ) 356.16 446.66 T
+(streams ) 370.65 446.66 T
+(in ) 405.14 446.66 T
+(to ) 416.87 446.66 T
+(objects, ) 428.59 446.66 T
+(and ) 463.36 446.66 T
+(to ) 481.74 446.66 T
+(write ) 493.46 446.66 T
+(objects ) 517.95 446.66 T
+(to) 550.22 446.66 T
+( ) 558 446.66 T
+(streams.) 207 434.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(interface ) 207 410.66 T
+(DataContentHandlerF) 256.18 410.66 T
+(actor) 358.76 410.66 T
+(y:) 383.31 410.66 T
+1 F
+( ) 392.2 410.66 T
+(This ) 398.95 410.66 T
+(interf) 423.48 410.66 T
+(ace ) 445.04 410.66 T
+(de\336nes ) 465.11 410.66 T
+(a ) 500.18 410.66 T
+(f) 511.37 410.66 T
+(actory ) 514.6 410.66 T
+(for) 546.34 410.66 T
+( ) 558 410.66 T
+66 421/G271391 FmND
+(DataContentHandlers. ) 207 398.66 T
+(An ) 299.79 398.66 T
+(implementation ) 315.65 398.66 T
+(of ) 382.08 398.66 T
+(this ) 394.05 398.66 T
+(interf) 412.14 398.66 T
+(ace ) 433.7 398.66 T
+(should ) 450.66 398.66 T
+(map ) 480.97 398.66 T
+(a ) 501.84 398.66 T
+(MIME ) 509.92 398.66 T
+(type) 540.78 398.66 T
+( ) 558 398.66 T
+(into ) 207 386.66 T
+(an ) 226.14 386.66 T
+(instance ) 239.15 386.66 T
+(of ) 275.5 386.66 T
+(DataContentHandler) 287.41 386.66 T
+(. ) 369.62 386.66 T
+(The ) 375.7 386.66 T
+(design ) 394.82 386.66 T
+(pattern ) 424.51 386.66 T
+(for ) 455.86 386.66 T
+(classes ) 471.09 386.66 T
+(implementing) 502.44 386.66 T
+( ) 558 386.66 T
+(this interf) 207 374.66 T
+(ace is the same as for the ContentHandler mechanism used in ja) 245.51 374.66 T
+(v) 500.54 374.66 T
+(a.net.URL.) 505.29 374.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 207 350.66 T
+(lass ) 212.36 350.66 T
+(CommandMap:) 235.12 350.66 T
+1 F
+( ) 307.33 350.66 T
+(The ) 310.3 350.66 T
+(CommandMap ) 328.81 350.66 T
+(class ) 391.77 350.66 T
+(pro) 414.18 350.66 T
+(vides ) 427.36 350.66 T
+(an ) 451.43 350.66 T
+(interf) 463.83 350.66 T
+(ace ) 485.39 350.66 T
+(to ) 501.67 350.66 T
+(the ) 512.42 350.66 T
+(re) 527.6 350.66 T
+(gistry) 535.22 350.66 T
+( ) 558 350.66 T
+66 361/G271413 FmND
+(of ) 207 338.66 T
+(vie) 218.24 338.66 T
+(wer) 230.21 338.66 T
+(, ) 244.8 338.66 T
+(editor) 250.21 338.66 T
+(, ) 273.14 338.66 T
+(print, ) 278.55 338.66 T
+(etc. ) 302.86 338.66 T
+(objects ) 319.93 338.66 T
+(a) 351.17 338.66 T
+(v) 355.41 338.66 T
+(ailable ) 360.16 338.66 T
+(in ) 389.73 338.66 T
+(the ) 400.42 338.66 T
+(system. ) 415.55 338.66 T
+(De) 448.74 338.66 T
+(v) 460.15 338.66 T
+(elopers ) 465.01 338.66 T
+(are ) 496.8 338.66 T
+(e) 511.92 338.66 T
+(xpected ) 516.21 338.66 T
+(to) 550.22 338.66 T
+( ) 558 338.66 T
+(either ) 207 326.66 T
+(use ) 239.83 326.66 T
+(the ) 263.22 326.66 T
+(CommandMap ) 285.5 326.66 T
+(implementation ) 355.55 326.66 T
+(included ) 428.39 326.66 T
+(with ) 472.89 326.66 T
+(this ) 500.73 326.66 T
+(package) 525.24 326.66 T
+( ) 558 326.66 T
+(\050MailcapCommandMap\051 ) 207 314.66 T
+(or ) 309.93 314.66 T
+(de) 321.75 314.66 T
+(v) 330.94 314.66 T
+(elop ) 335.79 314.66 T
+(their ) 356.51 314.66 T
+(o) 378.34 314.66 T
+(wn. ) 383.09 314.66 T
+(Note ) 401.3 314.66 T
+(that ) 424.24 314.66 T
+(some ) 442.74 314.66 T
+(of ) 467.34 314.66 T
+(the ) 479.17 314.66 T
+(methods ) 494.89 314.66 T
+(in ) 532.27 314.66 T
+(this) 543.55 314.66 T
+( ) 558 314.66 T
+(class are abstract.) 207 302.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(interface ) 207 278.66 T
+(CommandObject:) 251.49 278.66 T
+1 F
+( ) 334.83 278.66 T
+(Beans ) 337.35 278.66 T
+(that ) 364.31 278.66 T
+(are ) 381.83 278.66 T
+(Acti) 396.56 278.66 T
+(v) 413.53 278.66 T
+(ation ) 418.28 278.66 T
+(Frame) 440.81 278.66 T
+(w) 466.11 278.66 T
+(ork ) 473.23 278.66 T
+(a) 489.08 278.66 T
+(w) 493.37 278.66 T
+(are ) 500.49 278.66 T
+(implement) 515.22 278.66 T
+( ) 558 278.66 T
+66 289/G271438 FmND
+(this ) 207 266.66 T
+(interf) 224.79 266.66 T
+(ace ) 246.35 266.66 T
+(to ) 263.01 266.66 T
+(\336nd ) 274.13 266.66 T
+(out ) 293.04 266.66 T
+(which ) 309.16 266.66 T
+(command ) 336.94 266.66 T
+(v) 379.72 266.66 T
+(erb ) 384.57 266.66 T
+(the) 400.68 266.66 T
+(y\325) 412.75 266.66 T
+(re ) 420.58 266.66 T
+(being ) 431.69 266.66 T
+(ask) 457.25 266.66 T
+(ed ) 470.48 266.66 T
+(to ) 483.27 266.66 T
+(perform, ) 494.39 266.66 T
+(and ) 532.44 266.66 T
+(to) 550.22 266.66 T
+( ) 558 266.66 T
+(obtain ) 207 254.66 T
+(the ) 235.2 254.66 T
+(DataHandler ) 250.61 254.66 T
+(representing ) 304.89 254.66 T
+(the ) 357.52 254.66 T
+(data ) 372.93 254.66 T
+(the) 392.79 254.66 T
+(y ) 404.86 254.66 T
+(should ) 413.05 254.66 T
+(operate ) 442.92 254.66 T
+(on. ) 475.55 254.66 T
+(Beans ) 491.24 254.66 T
+(that ) 518.88 254.66 T
+(don\325) 537.07 254.66 T
+(t) 555.22 254.66 T
+( ) 558 254.66 T
+(implement ) 207 242.66 T
+(this ) 253.74 242.66 T
+(interf) 272.14 242.66 T
+(ace ) 293.7 242.66 T
+(may ) 310.98 242.66 T
+(be ) 332.15 242.66 T
+(used ) 345.55 242.66 T
+(as ) 367.83 242.66 T
+(well. ) 380.12 242.66 T
+(Such ) 403.79 242.66 T
+(commands ) 427.75 242.66 T
+(may ) 475.03 242.66 T
+(obtain ) 496.21 242.66 T
+(the ) 525.16 242.66 T
+(data) 541.34 242.66 T
+( ) 558 242.66 T
+(using the Externalizable interf) 207 230.66 T
+(ace, or using an application-speci\336c method.) 327.71 230.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 207 206.66 T
+(lass ) 212.36 206.66 T
+(CommandInf) 241.07 206.66 T
+(o:) 301.98 206.66 T
+1 F
+( ) 311.42 206.66 T
+(The ) 319.75 206.66 T
+(CommandInfo ) 343.62 206.66 T
+(class ) 410.27 206.66 T
+(is ) 438.03 206.66 T
+(used ) 453.02 206.66 T
+(by ) 479.68 206.66 T
+(CommandMap) 498 206.66 T
+( ) 558 206.66 T
+66 217/G271462 FmND
+(implementations ) 207 194.66 T
+(to ) 276.58 194.66 T
+(describe ) 287.27 194.66 T
+(the ) 323.51 194.66 T
+(results ) 338.64 194.66 T
+(of ) 367.66 194.66 T
+(command ) 378.9 194.66 T
+(requests. ) 421.25 194.66 T
+(It ) 459.43 194.66 T
+(pro) 468.46 194.66 T
+(vides ) 481.64 194.66 T
+(the ) 505.66 194.66 T
+(requestor) 520.79 194.66 T
+( ) 558 194.66 T
+(with ) 207 182.66 T
+(both ) 227.5 182.66 T
+(the ) 248 182.66 T
+(v) 262.94 182.66 T
+(erb ) 267.79 182.66 T
+(requested, ) 283.27 182.66 T
+(as ) 326.81 182.66 T
+(well ) 337.86 182.66 T
+(as ) 357.8 182.66 T
+(an ) 368.85 182.66 T
+(instance ) 381.01 182.66 T
+(of ) 416.5 182.66 T
+(the ) 427.55 182.66 T
+(bean. ) 442.48 182.66 T
+(There ) 466.58 182.66 T
+(is ) 492.62 182.66 T
+(also ) 502.01 182.66 T
+(a ) 520.84 182.66 T
+(method) 528 182.66 T
+( ) 558 182.66 T
+(that ) 207 170.66 T
+(will ) 226.79 170.66 T
+(return ) 247.13 170.66 T
+(the ) 275.79 170.66 T
+(name ) 292.8 170.66 T
+(of ) 319.24 170.66 T
+(the ) 332.36 170.66 T
+(class ) 349.36 170.66 T
+(that ) 373.59 170.66 T
+(implements ) 393.37 170.66 T
+(the ) 444.83 170.66 T
+(command ) 461.83 170.66 T
+(b) 506.06 170.66 T
+(ut ) 510.86 170.66 T
+(it ) 523.42 170.66 T
+(is ) 533.77 170.66 T
+(not) 545.22 170.66 T
+( ) 558 170.66 T
+(guaranteed ) 207 158.66 T
+(to ) 255.73 158.66 T
+(return ) 268.37 158.66 T
+(a ) 297.11 158.66 T
+(v) 306.41 158.66 T
+(alid ) 311.16 158.66 T
+(v) 331.02 158.66 T
+(alue. ) 335.77 158.66 T
+(The ) 359.79 158.66 T
+(reason ) 380.2 158.66 T
+(for ) 411.17 158.66 T
+(this ) 427.69 158.66 T
+(is ) 447 158.66 T
+(to ) 458.53 158.66 T
+(allo) 471.17 158.66 T
+(w ) 485.92 158.66 T
+(CommandMap) 498 158.66 T
+( ) 558 158.66 T
+(implementations ) 207 146.66 T
+(that ) 275.98 146.66 T
+(subclass ) 293.28 146.66 T
+(CommandInfo ) 328.92 146.66 T
+(to ) 389.56 146.66 T
+(pro) 399.64 146.66 T
+(vide ) 412.83 146.66 T
+(special ) 432.35 146.66 T
+(beha) 462.43 146.66 T
+(vior) 481.11 146.66 T
+(. ) 496.67 146.66 T
+(F) 501.48 146.66 T
+(or ) 506.89 146.66 T
+(e) 517.52 146.66 T
+(xample ) 521.81 146.66 T
+(a) 553.56 146.66 T
+( ) 558 146.66 T
+(CommandMap ) 207 134.66 T
+(could ) 269.68 134.66 T
+(dynamically ) 294.58 134.66 T
+(generate ) 346.7 134.66 T
+(Beans. ) 383.24 134.66 T
+(In ) 412.86 134.66 T
+(this ) 423.87 134.66 T
+(case, ) 441 134.66 T
+(it ) 463.39 134.66 T
+(might ) 471.62 134.66 T
+(not ) 497.64 134.66 T
+(be ) 513.1 134.66 T
+(possible) 525.22 134.66 T
+( ) 558 134.66 T
+(to create an object with all the correct state information solely from the class name.) 207 122.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299158 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "19" 19
+%%Page: "20" 20
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.20/DEST FmPD2
+[/Title(A)/Rect[45 80 549 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+54 750.68 540 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Document Chang) 189 739.85 T
+(e Histor) 263.59 739.85 T
+(y) 297.19 739.85 T
+54 726.98 540 726.98 2 L
+0.25 H
+N
+54 75.33 540 75.33 2 L
+2 Z
+N
+0 10 Q
+(20) 54 60.29 T
+0 9 Q
+( of) 65.12 60.29 T
+0 10 Q
+( 21) 76.12 60.29 T
+[/EMC FmPD4
+[/StoreName /P299158 /StRetrieve FmPD4
+[/StoreName /P299158 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading2) cvn /Class /SP192586 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(9.3) 166.1 680.66 T
+(Frame) 189 680.66 T
+(w) 218.86 680.66 T
+(ork A) 226.44 680.66 T
+(uxiliar) 251.7 680.66 T
+(y Classes) 281.26 680.66 T
+48 691/G264929 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(c) 189 656.66 T
+(lass ) 194.36 656.66 T
+(FileDataSour) 217.74 656.66 T
+(ce:) 279.22 656.66 T
+1 F
+( ) 293.67 656.66 T
+(The ) 297.2 656.66 T
+(FileDataSource ) 316.28 656.66 T
+(class ) 382.02 656.66 T
+(implements ) 404.99 656.66 T
+(a ) 455.18 656.66 T
+(simple ) 463.15 656.66 T
+(DataSource) 493.35 656.66 T
+( ) 540 656.66 T
+48 667/G271502 FmND
+(object ) 189 644.66 T
+(that ) 218.12 644.66 T
+(encapsulates ) 237.8 644.66 T
+(a ) 293.02 644.66 T
+(\336le. ) 302.14 644.66 T
+(It ) 322.1 644.66 T
+(pro) 332.89 644.66 T
+(vides ) 346.08 644.66 T
+(data ) 371.87 644.66 T
+(typing ) 393.21 644.66 T
+(services ) 423.45 644.66 T
+(via ) 460.34 644.66 T
+(a ) 477.24 644.66 T
+(FileT) 486.36 644.66 T
+(ypeMap) 507.23 644.66 T
+( ) 540 644.66 T
+(object.) 189 632.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 189 608.66 T
+(lass ) 194.36 608.66 T
+(FileT) 216.67 608.66 T
+(ypeMap:) 239.41 608.66 T
+1 F
+( ) 279.97 608.66 T
+(The ) 282.54 608.66 T
+(FileT) 300.66 608.66 T
+(ypeMap ) 321.53 608.66 T
+(is ) 356.86 608.66 T
+(an ) 366.1 608.66 T
+(abstract ) 378.11 608.66 T
+(class ) 411.77 608.66 T
+(that ) 433.78 608.66 T
+(pro) 451.35 608.66 T
+(vides ) 464.53 608.66 T
+(a ) 488.21 608.66 T
+(data ) 495.21 608.66 T
+(typing) 514.44 608.66 T
+( ) 540 608.66 T
+48 619/G271569 FmND
+(interf) 189 596.66 T
+(ace ) 210.56 596.66 T
+(for ) 228.04 596.66 T
+(\336les. ) 243.87 596.66 T
+(Implementations ) 267.2 596.66 T
+(of ) 338.59 596.66 T
+(this ) 351.08 596.66 T
+(class ) 369.7 596.66 T
+(will ) 393.3 596.66 T
+(implement ) 413.03 596.66 T
+(the ) 459.98 596.66 T
+(getContentT) 476.36 596.66 T
+(ype) 525.56 596.66 T
+( ) 540 596.66 T
+(methods ) 189 584.66 T
+(which ) 229.16 584.66 T
+(will ) 259.88 584.66 T
+(deri) 281.71 584.66 T
+(v) 297.01 584.66 T
+(e ) 301.86 584.66 T
+(a ) 312.57 584.66 T
+(content ) 323.29 584.66 T
+(type ) 359 584.66 T
+(from ) 382.49 584.66 T
+(a ) 408.21 584.66 T
+(\336le ) 418.92 584.66 T
+(name ) 437.98 584.66 T
+(or ) 465.91 584.66 T
+(a ) 480.51 584.66 T
+(File ) 491.23 584.66 T
+(object.) 513.06 584.66 T
+( ) 540 584.66 T
+(FileT) 189 572.66 T
+(ypeMaps ) 209.87 572.66 T
+(could ) 248.9 572.66 T
+(use ) 273.48 572.66 T
+(an) 289.18 572.66 T
+(y ) 298.47 572.66 T
+(scheme ) 305.83 572.66 T
+(to ) 338.19 572.66 T
+(determine ) 348.34 572.66 T
+(the ) 390.69 572.66 T
+(data ) 405.28 572.66 T
+(type, ) 424.3 572.66 T
+(from ) 446.39 572.66 T
+(e) 468.2 572.66 T
+(xamining ) 472.49 572.66 T
+(the ) 512.63 572.66 T
+(\336le) 527.22 572.66 T
+( ) 540 572.66 T
+(e) 189 560.66 T
+(xtension ) 193.29 560.66 T
+(of ) 230.54 560.66 T
+(a ) 242.24 560.66 T
+(\336le ) 250.04 560.66 T
+(\050lik) 266.19 560.66 T
+(e ) 279.98 560.66 T
+(the ) 287.78 560.66 T
+(MimetypesFileT) 303.37 560.66 T
+(ypeMap\051 ) 369.24 560.66 T
+(to ) 408.7 560.66 T
+(opening ) 419.85 560.66 T
+(the ) 455.43 560.66 T
+(\336le ) 471.02 560.66 T
+(and ) 487.16 560.66 T
+(trying ) 504.96 560.66 T
+(to) 532.22 560.66 T
+( ) 540 560.66 T
+(deri) 189 548.66 T
+(v) 204.3 548.66 T
+(e ) 209.15 548.66 T
+(its ) 216.78 548.66 T
+(type ) 229.41 548.66 T
+(from ) 249.82 548.66 T
+(the ) 272.45 548.66 T
+(contents ) 287.85 548.66 T
+(of ) 324.37 548.66 T
+(the ) 335.89 548.66 T
+(\336le. ) 351.29 548.66 T
+(The ) 369.76 548.66 T
+(FileDataSource ) 388.49 548.66 T
+(class ) 453.89 548.66 T
+(uses ) 476.52 548.66 T
+(the ) 496.92 548.66 T
+(def) 512.33 548.66 T
+(ault) 525 548.66 T
+( ) 540 548.66 T
+(FileT) 189 536.66 T
+(ypeMap ) 209.87 536.66 T
+(\050a ) 245.16 536.66 T
+(MimetypesFileT) 255.44 536.66 T
+(ypeMap ) 321.31 536.66 T
+(unless ) 356.6 536.66 T
+(changed\051 ) 384.12 536.66 T
+(to ) 423.28 536.66 T
+(determine ) 433.58 536.66 T
+(the ) 476.09 536.66 T
+(content ) 490.82 536.66 T
+(type) 522.78 536.66 T
+( ) 540 536.66 T
+(of \336les.) 189 524.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 189 500.66 T
+(lass ) 194.36 500.66 T
+(MimetypesFileT) 217.18 500.66 T
+(ypeMap:) 291.61 500.66 T
+1 F
+( ) 332.17 500.66 T
+(This ) 335.19 500.66 T
+(class ) 356 500.66 T
+(e) 378.46 500.66 T
+(xtends ) 382.75 500.66 T
+(FileT) 411.89 500.66 T
+(ypeMap ) 432.76 500.66 T
+(and ) 468.56 500.66 T
+(pro) 486.02 500.66 T
+(vides ) 499.2 500.66 T
+(data) 523.34 500.66 T
+( ) 540 500.66 T
+48 511/G271628 FmND
+(typing of \336les via their \336le e) 189 488.66 T
+(xtension. It uses the .mime.types format.) 302.18 488.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 189 464.66 T
+(lass ) 194.36 464.66 T
+(URLDataSour) 217.5 464.66 T
+(ce: ) 282.3 464.66 T
+1 F
+(The ) 300.42 464.66 T
+(URLDataSource ) 319.28 464.66 T
+(class ) 389.23 464.66 T
+(pro) 411.98 464.66 T
+(vides ) 425.16 464.66 T
+(an ) 449.58 464.66 T
+(object ) 462.32 464.66 T
+(that ) 490.07 464.66 T
+(wraps ) 508.37 464.66 T
+(a) 535.56 464.66 T
+( ) 540 464.66 T
+48 475/G271634 FmND
+(URL ) 189 452.66 T
+(object ) 211.96 452.66 T
+(in ) 239.36 452.66 T
+(a ) 250.1 452.66 T
+(DataSource ) 257.5 452.66 T
+(interf) 307.11 452.66 T
+(ace. ) 328.67 452.66 T
+(URLDataSource ) 347.44 452.66 T
+(simpli\336es ) 417.05 452.66 T
+(the ) 458.91 452.66 T
+(handling ) 474.09 452.66 T
+(of ) 512.05 452.66 T
+(data) 523.34 452.66 T
+( ) 540 452.66 T
+(described ) 189 440.66 T
+(by ) 230.26 440.66 T
+(URLs ) 243.2 440.66 T
+(within ) 270.04 440.66 T
+(the ) 298.54 440.66 T
+(Ja) 313.7 440.66 T
+(v) 321.83 440.66 T
+(aBeans ) 326.58 440.66 T
+(Acti) 358.4 440.66 T
+(v) 375.37 440.66 T
+(ation ) 380.12 440.66 T
+(Frame) 403.06 440.66 T
+(w) 428.36 440.66 T
+(ork ) 435.48 440.66 T
+(because ) 451.75 440.66 T
+(this ) 486.35 440.66 T
+(class ) 503.74 440.66 T
+(can) 526.12 440.66 T
+( ) 540 440.66 T
+(be used to create ne) 189 428.66 T
+(w DataHandlers. ) 267.61 428.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 189 404.66 T
+(lass ) 194.36 404.66 T
+(MailcapCommandMap:) 218.58 404.66 T
+1 F
+( ) 327.48 404.66 T
+(MailcapCommandMap ) 331.76 404.66 T
+(e) 428.82 404.66 T
+(xtends ) 433.11 404.66 T
+(the ) 463.5 404.66 T
+(CommandMap) 480 404.66 T
+( ) 540 404.66 T
+48 415/G271660 FmND
+(abstract ) 189 392.66 T
+(class. ) 222.9 392.66 T
+(It ) 247.63 392.66 T
+(implements ) 256.54 392.66 T
+(a ) 306.01 392.66 T
+(CommandMap ) 313.24 392.66 T
+(whose ) 376.04 392.66 T
+(con\336guration ) 404.38 392.66 T
+(is ) 460.51 392.66 T
+(based ) 469.98 392.66 T
+(on ) 495.54 392.66 T
+(mailcap) 508.34 392.66 T
+( ) 540 392.66 T
+(\336les ) 189 380.66 T
+(\050RFC ) 208.22 380.66 T
+(1524\051. ) 233.01 380.66 T
+(The ) 261.39 380.66 T
+(MailcapCommandMap ) 279.49 380.66 T
+(can ) 374.82 380.66 T
+(be ) 391.25 380.66 T
+(con\336gured ) 403.24 380.66 T
+(both ) 448.57 380.66 T
+(programmatically) 468.9 380.66 T
+( ) 540 380.66 T
+(and via con\336guration \336les.) 189 368.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 189 344.66 T
+(lass ) 194.36 344.66 T
+(Activ) 219.45 344.66 T
+(ationDataFla) 243.7 344.66 T
+(v) 303.56 344.66 T
+(or:) 308.82 344.66 T
+1 F
+( ) 322.15 344.66 T
+(The ) 327.21 344.66 T
+(Acti) 347.83 344.66 T
+(v) 364.8 344.66 T
+(ationDataFla) 369.55 344.66 T
+(v) 421.01 344.66 T
+(or ) 425.81 344.66 T
+(is ) 439.2 344.66 T
+(a ) 450.94 344.66 T
+(special ) 460.44 344.66 T
+(subclass ) 493.28 344.66 T
+(of) 531.67 344.66 T
+( ) 540 344.66 T
+48 355/G271680 FmND
+(ja) 189 332.66 T
+(v) 196.02 332.66 T
+(a.a) 200.77 332.66 T
+(wt.datatransfer) 212 332.66 T
+(.DataFla) 271.15 332.66 T
+(v) 305.11 332.66 T
+(or) 309.91 332.66 T
+(. ) 317.69 332.66 T
+(It ) 323.42 332.66 T
+(allo) 332.75 332.66 T
+(ws ) 347.5 332.66 T
+(the ) 361.84 332.66 T
+(J) 377.28 332.66 T
+(AF ) 380.57 332.66 T
+(to ) 396.58 332.66 T
+(set ) 407.58 332.66 T
+(all ) 421.92 332.66 T
+(three ) 435.15 332.66 T
+(v) 458.36 332.66 T
+(alues ) 463.11 332.66 T
+(stored ) 486.89 332.66 T
+(by ) 514.55 332.66 T
+(the) 527.78 332.66 T
+( ) 540 332.66 T
+(DataFla) 189 320.66 T
+(v) 220.46 320.66 T
+(or ) 225.26 320.66 T
+(class ) 236.07 320.66 T
+(via ) 258 320.66 T
+(a ) 272.7 320.66 T
+(ne) 279.63 320.66 T
+(w ) 288.82 320.66 T
+(constructor ) 298.52 320.66 T
+(as ) 346 320.66 T
+(well ) 356.82 320.66 T
+(as ) 376.52 320.66 T
+(impro) 387.33 320.66 T
+(v) 411.08 320.66 T
+(ed ) 415.92 320.66 T
+(MIME ) 427.85 320.66 T
+(parsing ) 457.55 320.66 T
+(in ) 489.48 320.66 T
+(the ) 499.74 320.66 T
+(equals) 514.45 320.66 T
+( ) 540 320.66 T
+(method. ) 189 308.66 T
+(Except ) 223.86 308.66 T
+(for ) 253.99 308.66 T
+(the ) 268 308.66 T
+(impro) 282.58 308.66 T
+(v) 306.32 308.66 T
+(ed ) 311.17 308.66 T
+(parsing, ) 322.97 308.66 T
+(its ) 357.27 308.66 T
+(semantics ) 369.08 308.66 T
+(are ) 410.87 308.66 T
+(identical ) 425.44 308.66 T
+(to ) 462.24 308.66 T
+(that ) 472.38 308.66 T
+(of ) 489.73 308.66 T
+(the ) 500.42 308.66 T
+(JDK\325) 515 308.66 T
+(s) 536.11 308.66 T
+( ) 540 308.66 T
+(DataFla) 189 296.66 T
+(v) 220.46 296.66 T
+(or class. ) 225.26 296.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 189 272.66 T
+(lass ) 194.36 272.66 T
+(Unsuppor) 216.37 272.66 T
+(tedDataT) 263.79 272.66 T
+(ypeException: ) 305.97 272.66 T
+1 F
+(Signals ) 376.87 272.66 T
+(that ) 408.62 272.66 T
+(requested ) 425.91 272.66 T
+(operation ) 466.53 272.66 T
+(does ) 506.6 272.66 T
+(not) 527.22 272.66 T
+( ) 540 272.66 T
+48 283/G271707 FmND
+(support the requested data type.) 189 260.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 189 236.66 T
+(lass ) 194.36 236.66 T
+(MimeT) 218.57 236.66 T
+(ype:) 249.64 236.66 T
+1 F
+( ) 270.2 236.66 T
+(A ) 274.47 236.66 T
+(Multipurpose ) 285.96 236.66 T
+(Internet ) 344.12 236.66 T
+(Extension ) 379.49 236.66 T
+(\050MIME\051 ) 423.77 236.66 T
+(type, ) 461.92 236.66 T
+(as ) 485.91 236.66 T
+(de\336ned ) 498.51 236.66 T
+(in) 532.22 236.66 T
+( ) 540 236.66 T
+48 247/G267049 FmND
+(RFC 2045 and 2046. ) 189 224.66 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+0 F
+(c) 189 200.66 T
+(lass ) 194.36 200.66 T
+(com.sun.activ) 218.57 200.66 T
+(ation.vie) 285.07 200.66 T
+(wer) 325.48 200.66 T
+(s.*:) 342.57 200.66 T
+1 F
+( ) 358.12 200.66 T
+(A ) 362.4 200.66 T
+(fe) 373.9 200.66 T
+(w ) 381.42 200.66 T
+(simple ) 392.91 200.66 T
+(e) 423.86 200.66 T
+(xample ) 428.15 200.66 T
+(vie) 461.87 200.66 T
+(wer ) 473.84 200.66 T
+(Beans ) 493.1 200.66 T
+(\050te) 521.82 200.66 T
+(xt) 532.22 200.66 T
+( ) 540 200.66 T
+48 211/G264932 FmND
+(and image\051. ) 189 188.66 T
+54 145.33 540 148.33 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+189 147.48 540 147.48 2 L
+0.25 H
+2 Z
+0 X
+N
+54 147.48 180 147.48 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(10.0) 156.65 152.33 T
+(Document Chang) 189 152.33 T
+(e Histor) 288.46 152.33 T
+(y) 333.25 152.33 T
+48 164/G266916 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(May 13,1997) 189 128.66 T
+(:) 242.33 128.66 T
+(Initial Public Draft 1) 245.11 128.66 T
+48 139/G266917 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Aug 1, 1997: ) 189 104.66 T
+(Internal Re) 244 104.66 T
+(vie) 288.46 104.66 T
+(w Draft 2) 300.43 104.66 T
+48 115/G266919 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299407 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "20" 20
+%%Page: "21" 21
+%%ViewingOrientation: 1 0 0 1
+612 792 0 FMBEGINPAGE
+0 FrameSetSepColors
+FrameNoSep
+-45 -45 657 837 C
+[/CropBox[0 0 FmDC 612 792 FmDC FmBx]/PAGE FmPD
+[/Dest/P.21/DEST FmPD2
+[/Dest/L/DEST FmPD2
+[/Title(A)/Rect[63 80 567 696]/ARTICLE FmPD2
+0 0 0 1 0 0 0 1 K
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+72 750.68 558 750.68 2 L
+2 H
+0 Z
+0 X
+N
+0 9 Q
+(Contacting Us) 207 739.85 T
+72 726.98 558 726.98 2 L
+0.25 H
+N
+72 75.33 558 75.33 2 L
+2 Z
+N
+0 10 Q
+(21) 522.26 60.29 T
+0 9 Q
+( of ) 533.38 60.29 T
+0 10 Q
+(21) 546.88 60.29 T
+[/EMC FmPD4
+[/StoreName /P299407 /StRetrieve FmPD4
+[/StoreName /P299407 /StStore FmPD4
+[/StPop FmPD4
+[/_objdef {PS192585} /type /dict /OBJ FmPD4
+[{PS192585} <</O /Layout /SpaceBefore 3 /StartIndent 171 /TextIndent 162 >> /PUT FmPD4
+[/SP192585 {PS192585} /StClassMap FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 679.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Added ) 243 679.99 T
+2 F
+(Inte) 272.16 679.99 T
+(gr) 287.31 679.99 T
+(ation P) 296.05 679.99 T
+(oints) 324.42 679.99 T
+1 F
+( section) 343.87 679.99 T
+66 691/G266923 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 663.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Minor API changes) 243 663.99 T
+66 675/G266924 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+66 662/G266941 FmND
+[/StPop FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Sept 16 1997:) 207 633.66 T
+(Second Public Draft 3) 262.56 633.66 T
+66 644/G266926 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 614.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Edited document to re\337ect change to Standard Extension) 243 614.99 T
+66 626/G266936 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 598.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Remo) 243 598.99 T
+(v) 266.74 598.99 T
+(ed URL/URLConnection section) 271.59 598.99 T
+66 610/G266937 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 582.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Minor API changes) 243 582.99 T
+66 594/G266938 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Oct 28 1997: Third Public Draft 4) 207 558.66 T
+66 569/G266944 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 539.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Minor API changes) 243 539.99 T
+66 551/G267334 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 523.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Add additional class descriptions) 243 523.99 T
+66 535/G267336 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 507.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Fix) 243 507.99 T
+(ed minor errata) 256.19 507.99 T
+66 519/G267337 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Dec 9, 1997: F) 207 483.66 T
+(ourth Public Draft 5) 266.29 483.66 T
+66 494/G267887 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 464.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Minor API changes) 243 464.99 T
+66 476/G267890 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 448.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Add additional class descriptions) 243 448.99 T
+66 460/G267891 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 432.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Fix) 243 432.99 T
+(ed minor errata) 256.19 432.99 T
+66 444/G267892 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 416.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Includes ) 243 416.99 T
+3 F
+(Fr) 279.38 416.99 T
+(ozen) 289.75 416.99 T
+1 F
+( API) 309.19 416.99 T
+66 428/G267893 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Feb) 207 392.66 T
+(. 20, 1998: V) 221.6 392.66 T
+(ersion 0.6 ) 272.99 392.66 T
+66 403/G268091 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 373.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Minor typos \336x) 243 373.99 T
+(ed.) 305.08 373.99 T
+66 385/G268094 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 357.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Change bars remo) 243 357.99 T
+(v) 315.61 357.99 T
+(ed.) 320.46 357.99 T
+66 369/G269822 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Mar) 207 333.66 T
+(. 16, 1998: V) 223.11 333.66 T
+(ersion 1.0) 274.5 333.66 T
+66 344/G269823 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 314.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+( V) 243 314.99 T
+(ersion 1.0) 251.61 314.99 T
+66 326/G269827 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(Mar) 207 290.66 T
+(. 6, 1999: V) 223.11 290.66 T
+(ersion 1.0a) 269.5 290.66 T
+66 301/G269834 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 271.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Fix) 243 271.99 T
+(ed minor typos.) 256.19 271.99 T
+66 283/G269835 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 255.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Synchronized with updated ja) 243 255.99 T
+(v) 361.95 255.99 T
+(adocs) 366.7 255.99 T
+66 267/G272798 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(May 16, 2005) 207 231.66 T
+66 242/G273346 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 212.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Updated for 1.1 release) 243 212.99 T
+66 224/G273347 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Bulleted) cvn /Class /SP192585 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3722 /StPNE FmPD4
+[/StBMC FmPD4
+5 11 Q
+(\245) 234 196.99 T
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Remo) 243 196.99 T
+(v) 266.74 196.99 T
+(ed all detailed API speci\336cations; refer to the ja) 271.59 196.99 T
+(v) 461.91 196.99 T
+(adocs) 466.66 196.99 T
+66 208/G273393 FmND
+72 153.33 558 156.33 C
+0 0 0 1 0 0 0 1 K
+[/EMC FmPD4
+[/Artifact <</Type /Pagination>> /BDC FmPD4
+207 155.48 558 155.48 2 L
+0.25 H
+2 Z
+0 X
+N
+72 155.48 198 155.48 2 L
+0 Z
+N
+-45 -45 657 837 C
+[/EMC FmPD4
+[/StBMC FmPD4
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_Heading1) cvn /Class /SP192583 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3765 /StPNE FmPD4
+[/StBMC FmPD4
+0 0 0 1 0 0 0 1 K
+0 12 Q
+0 X
+(11.0) 174.65 160.33 T
+(Contacting Us) 207 160.33 T
+66 172/G269824 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/Subtype (_Body) cvn /Class /SP192523 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+1 10 Q
+(Please send your questions and comments to:) 207 132.66 T
+66 143/G265010 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/Subtype (_BodyAfterHead) cvn /Class /SP192589 /StPNE FmPD4
+[/Subtype /Span  /Class /SC3755 /StPNE FmPD4
+[/StBMC FmPD4
+(  ) 207 114.66 T
+7 F
+(activation-comments@sun.com) 212 114.66 T
+66 125/G265082 FmND
+[/EMC FmPD4
+[/StPop FmPD4
+[/StoreName /P299168 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/PageMode /UseOutlines /Page 1 /View [/XYZ null null null] /DOCVIEW FmPD2
+[(_Bulleted) cvn /P
+(_ReportTitle) cvn /P
+(_Body) cvn /P
+(_BulletedCont) cvn /P
+(_CellBody) cvn /P
+(_CellHeading) cvn /P
+(_Equation) cvn /P
+(_Extract) cvn /P
+(_Figure) cvn /P
+(_Footnote) cvn /P
+(_ReportPurpose) cvn /P
+(_HeadingRunIn) cvn /P
+(_ReportAuthor) cvn /P
+(_BodyAfterHead) cvn /P
+(_Heading1) cvn /P
+(_NumberedCont) cvn /P
+(_TableFootnote) cvn /P
+(_TableTitle) cvn /P
+(_CellFooting) cvn /P
+(_Heading2) cvn /P
+(_zzHeader) cvn /P
+(_zzFooterLeft) cvn /P
+(_zzFooterRight) cvn /P
+(_zzFooterFirst) cvn /P
+(_Heading3TOC) cvn /P
+(_Heading2TOC) cvn /P
+(_Heading1TOC) cvn /P
+(_FigureLOF) cvn /P
+(_TableTitleLOT) cvn /P
+(_SeparatorsIX) cvn /P
+(_SortOrderIX) cvn /P
+(_Level3IX) cvn /P
+(_Level2IX) cvn /P
+(_Level1IX) cvn /P
+(_GroupTitlesIX) cvn /P
+(_IndexIX) cvn /P
+(_javasource) cvn /P
+(_Heading3) cvn /P
+(_Numbered1) cvn /P
+(_Numbered) cvn /P
+(_zzHeaderFirst) cvn /P
+/TableHead /THead
+/TableFoot /TFoot
+/TableTitle /Caption
+/TableBody /TBody
+/TextSection /Sect
+/Document /Document
+/StRoleMap FmPD4
+[/StoreName /P299168 /StRetrieve FmPD4
+[/StoreName /P299168 /StStore FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+[/StPop FmPD4
+FMENDPAGE
+%%EndPage: "21" 21
+%%Trailer
+FMENDDOCUMENT
+%%BoundingBox: 0 0 612 792
+%%PageOrder: Ascend
+%%Pages: 21
+%%DocumentFonts: Helvetica-Bold
+%%+ Times-Roman
+%%+ Times-Italic
+%%+ Times-Bold
+%%+ Palatino-Roman
+%%+ Courier-Bold
+%%+ Helvetica
+%%+ Courier
+%%DocumentNeedsFonts: Helvetica-Bold
+%%+ Times-Roman
+%%+ Times-Italic
+%%+ Times-Bold
+%%+ Palatino-Roman
+%%+ Courier-Bold
+%%+ Helvetica
+%%+ Courier
+%%DocumentSuppliedFonts:
+%%EOF
diff --git a/src/share/lib/jaf.mf b/src/share/lib/jaf.mf
new file mode 100644
index 0000000..0296ff4
--- /dev/null
+++ b/src/share/lib/jaf.mf
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+SCCS-ID: @(#)jaf.mf	1.2	05/05/23
+Extension-Name: javax.activation
+Specification-Title: JavaBeans(TM) Activation Framework Specification
+Specification-Version: 1.1
+Specification-Vendor: Sun Microsystems, Inc.
+Implementation-Version: %RELEASE%
+Implementation-Vendor: Sun Microsystems, Inc.
+Implementation-Vendor-Id: com.sun
diff --git a/src/share/lib/mailcap.default b/src/share/lib/mailcap.default
new file mode 100644
index 0000000..542de7d
--- /dev/null
+++ b/src/share/lib/mailcap.default
@@ -0,0 +1,7 @@
+#
+# This is a very simple 'mailcap' file
+#
+image/gif;;		x-java-view=com.sun.activation.viewers.ImageViewer
+image/jpeg;;		x-java-view=com.sun.activation.viewers.ImageViewer
+text/*;;		x-java-view=com.sun.activation.viewers.TextViewer
+text/*;;		x-java-edit=com.sun.activation.viewers.TextEditor
diff --git a/src/share/lib/mimetypes.default b/src/share/lib/mimetypes.default
new file mode 100644
index 0000000..1b4056b
--- /dev/null
+++ b/src/share/lib/mimetypes.default
@@ -0,0 +1,25 @@
+#
+# A simple, old format, mime.types file
+#
+text/html		html htm HTML HTM
+text/plain		txt text TXT TEXT
+image/gif		gif GIF
+image/ief		ief
+image/jpeg		jpeg jpg jpe JPG
+image/tiff		tiff tif
+image/png		png PNG
+image/x-xwindowdump	xwd
+application/postscript	ai eps ps
+application/rtf		rtf
+application/x-tex	tex
+application/x-texinfo	texinfo texi
+application/x-troff	t tr roff
+audio/basic		au
+audio/midi		midi mid
+audio/x-aifc		aifc
+audio/x-aiff            aif aiff
+audio/x-mpeg		mpeg mpg
+audio/x-wav             wav
+video/mpeg		mpeg mpg mpe
+video/quicktime		qt mov
+video/x-msvideo		avi