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
