Migrate workspace from TeamWare to Mercurial.
diff --git a/build/Defs-solaris.gmk.old b/build/Defs-solaris.gmk.old new file mode 100644 index 0000000..52ef89a --- /dev/null +++ b/build/Defs-solaris.gmk.old
@@ -0,0 +1,129 @@ +# +# @(#)Defs-solaris.gmk 1.24 96/07/09 +# +# Makefile to specify compiler flags for programs and libraries +# targeted to Solaris. Should not contain any rules. +# + +ARCH = $(shell uname -p) + +# This default is redefined during a release build. +RELEASE = $(shell echo `/usr/ucb/whoami`:`date '+%m/%d/%d-%H:%M'`) + +# If -Xa is in CFLAGS_COMMON it will end up ahead of $(POPT) for the +# optimized build, and that ordering of the flags completely freaks +# out cc. Hence, -Xa is instead in each CFLAGS variant. +ifneq ($(CC_VERSION), gcc) +CFLAGS_COMMON = -v +CFLAGS_OPT = -Xa $(POPT) +CFLAGS_DBG = -Xa -g +else +CFLAGS_COMMON = +CFLAGS_OPT = $(POPT) +CFLAGS_DBG = -g +endif + +# +# Optional global flags with defaults: turn on from command line like +# +# % gnumake THREADS_FLAG=native +# + +# By default use green threads +THREADS_FLAG = green + +ifeq ($(THREADS_FLAG), native) + CFLAGS_COMMON += -D_REENTRANT -DNATIVE +endif + +# By default, gprof support is off +GPROF = false + +ifeq ($(GPROF), true) + CFLAGS_COMMON += -DGPROF -xpg +endif + +# turn JCOV on +JCOV = true + +ifeq ($(JCOV), true) +ifeq ($(VARIANT), DBG) + CFLAGS_COMMON += -DJCOV +endif +endif + +# Java memory management is based on memory mapping by default, but a +# system only assuming malloc/free can be built by adding -DUSE_MALLOC + +ifneq ($(CC_VERSION), gcc) +CPPFLAGS_COMMON = -D$(ARCH) -DSOLARIS2 -DRELEASE='"$(RELEASE)"' +else +CPPFLAGS_COMMON = -D$(ARCH) -DHAVE_ALIGNED_LONGLONGS -DHAVE_ALIGNED_DOUBLES -DSOLARIS2 -DRELEASE='"$(RELEASE)"' +endif +CPPFLAGS_OPT = -DTRIMMED +CPPFLAGS_DBG = -DDEBUG -DTRACING -DBREAKPTS + +ASFLAGS_COMMON = -P +ASFLAGS_OPT = +ASFLAGS_DBG = + +LDFLAGS_COMMON = -L$(OPENWINHOME)/lib +LDFLAGS_OPT = +LDFLAGS_DBG = + +LDLIBS_COMMON = +LDLIBS_OPT = +LDLIBS_DBG = + +ifeq ($(THREADS_FLAG),native) + LDLIBS_COMMON += -lthread +endif + +ifeq ($(GPROF), true) + LDLIBS_COMMON += -xpg +endif + +# +# Java variations +# +ifeq ($(PRODUCT), java) + # Java default optimization -x04 +ifneq ($(CC_VERSION), gcc) + _OPT = -xO4 +else + _OPT = -O3 +endif + CPPFLAGS_DBG += -DLOGGING -DDBINFO + ASFLAGS_COMMON += -D_ASM + LDLIBS_COMMON += -lm -ldl +endif + +# +# Hotjava variations +# +ifneq ($(PRODUCT), java) + # Hotjava default optimization -x02 +ifneq ($(CC_VERSION), gcc) + _OPT = -xO2 +else + _OPT = -O2 +endif +endif + +# +# Tools +# +ifneq ($(CC_VERSION), gcc) +CC = cc +CPP = cc -E +else +CC = gcc +CPP = gcc -E +endif +AS = as +LD = /usr/ccs/bin/ld + +OPENWINHOME = /usr/openwin + +LIBRARY_SUFFIX = so +
diff --git a/build/classes.mk b/build/classes.mk new file mode 100644 index 0000000..ff75b86 --- /dev/null +++ b/build/classes.mk
@@ -0,0 +1,128 @@ +# +# VERSION: @(#)classes.mk 1.12 97/12/02 +# this file defines the following Makefile variables: +# SRCS == a space separated list of full pathes to the source files +# CLASSES == a space separated list of the full pathes to the class files +# + +JAVAX_SRCS = \ +$(SRC_DIR)/javax/activation/MailcapCommandMap.java \ +$(SRC_DIR)/javax/activation/CommandMap.java \ +$(SRC_DIR)/javax/activation/CommandObject.java \ +$(SRC_DIR)/javax/activation/CommandInfo.java \ +$(SRC_DIR)/javax/activation/MimeType.java \ +$(SRC_DIR)/javax/activation/MimeTypeParameterList.java \ +$(SRC_DIR)/javax/activation/MimeTypeParseException.java \ +$(SRC_DIR)/javax/activation/ActivationDataFlavor.java \ +$(SRC_DIR)/javax/activation/DataContentHandler.java \ +$(SRC_DIR)/javax/activation/DataContentHandlerFactory.java \ +$(SRC_DIR)/javax/activation/UnsupportedDataTypeException.java \ +$(SRC_DIR)/javax/activation/DataHandler.java \ +$(SRC_DIR)/javax/activation/DataSource.java \ +$(SRC_DIR)/javax/activation/URLDataSource.java \ +$(SRC_DIR)/javax/activation/FileTypeMap.java \ +$(SRC_DIR)/javax/activation/MimetypesFileTypeMap.java \ +$(SRC_DIR)/javax/activation/FileDataSource.java + +COM_SUN_SRCS = \ +$(SRC_DIR)/com/sun/activation/registries/MailcapEntry.java \ +$(SRC_DIR)/com/sun/activation/registries/MailcapFile.java \ +$(SRC_DIR)/com/sun/activation/registries/MimeTypeEntry.java \ +$(SRC_DIR)/com/sun/activation/registries/MimeTypeFile.java \ +$(SRC_DIR)/com/sun/activation/viewers/ImageViewer.java \ +$(SRC_DIR)/com/sun/activation/viewers/ImageViewerCanvas.java \ +$(SRC_DIR)/com/sun/activation/viewers/TextEditor.java \ +$(SRC_DIR)/com/sun/activation/viewers/TextViewer.java \ +$(SRC_DIR)/com/sun/activation/registries/MailcapTokenizer.java \ +$(SRC_DIR)/com/sun/activation/registries/MailcapParseException.java + +TEST_SRCS = \ +$(SRC_DIR)/test/AppletTest.java \ +$(SRC_DIR)/test/CLTest.java \ +$(SRC_DIR)/test/CommandMapTest.java \ +$(SRC_DIR)/test/DHTransferableTest.java \ +$(SRC_DIR)/test/DSWriteTest.java \ +$(SRC_DIR)/test/DataHandlerTest.java \ +$(SRC_DIR)/test/DataSourceTest.java \ +$(SRC_DIR)/test/SerMaker.java \ +$(SRC_DIR)/test/SerMaker11.java \ +$(SRC_DIR)/test/SerReader.java \ +$(SRC_DIR)/test/SerReader11.java + +DEMO_SRCS = \ +$(SRC_DIR)/demo/PrefTest.java \ +$(SRC_DIR)/demo/MikeTest.java \ +$(SRC_DIR)/demo/FileView.java \ +$(SRC_DIR)/demo/MCTest.java \ +$(SRC_DIR)/demo/CompViewer.java \ +$(SRC_DIR)/demo/JAFApp.java \ +$(SRC_DIR)/demo/SimpleDCH.java \ +$(SRC_DIR)/demo/MTest.java \ +$(SRC_DIR)/demo/PlainDCH.java \ +$(SRC_DIR)/demo/DHURL.java \ +$(SRC_DIR)/demo/TextInternalizer.java \ +$(SRC_DIR)/demo/DCHTest2.java \ +$(SRC_DIR)/demo/ODCHTest.java \ +$(SRC_DIR)/demo/DCHTest.java + +JAVAX_CLASSES_LIST = \ +$(CLASS_DIR)/javax/activation/DataSource.class \ +$(CLASS_DIR)/javax/activation/URLDataSource.class \ +$(CLASS_DIR)/javax/activation/MailcapCommandMap.class \ +$(CLASS_DIR)/javax/activation/CommandMap.class \ +$(CLASS_DIR)/javax/activation/CommandObject.class \ +$(CLASS_DIR)/javax/activation/CommandInfo.class \ +$(CLASS_DIR)/javax/activation/MimeType.class \ +$(CLASS_DIR)/javax/activation/MimeTypeParameterList.class \ +$(CLASS_DIR)/javax/activation/MimeTypeParseException.class \ +$(CLASS_DIR)/javax/activation/ActivationDataFlavor.class \ +$(CLASS_DIR)/javax/activation/DataContentHandler.class \ +$(CLASS_DIR)/javax/activation/DataContentHandlerFactory.class \ +$(CLASS_DIR)/javax/activation/UnsupportedDataTypeException.class \ +$(CLASS_DIR)/javax/activation/DataHandler.class \ +$(CLASS_DIR)/javax/activation/FileTypeMap.class \ +$(CLASS_DIR)/javax/activation/MimetypesFileTypeMap.class \ +$(CLASS_DIR)/javax/activation/FileDataSource.class + +COM_SUN_CLASSES_LIST = \ +$(CLASS_DIR)/com/sun/activation/registries/MailcapEntry.class \ +$(CLASS_DIR)/com/sun/activation/registries/MailcapFile.class \ +$(CLASS_DIR)/com/sun/activation/registries/MimeTypeEntry.class \ +$(CLASS_DIR)/com/sun/activation/registries/MimeTypeFile.class \ +$(CLASS_DIR)/com/sun/activation/viewers/ImageViewer.class \ +$(CLASS_DIR)/com/sun/activation/viewers/ImageViewerCanvas.class \ +$(CLASS_DIR)/com/sun/activation/viewers/TextEditor.class \ +$(CLASS_DIR)/com/sun/activation/viewers/TextViewer.class \ +$(CLASS_DIR)/com/sun/activation/registries/MailcapTokenizer.class \ +$(CLASS_DIR)/com/sun/activation/registries/MailcapParseException.class + +# Tests that only work on JDK 1.2... +# $(CLASS_DIR)/test/CLTest.class \ + +TEST_CLASSES_LIST = \ +$(CLASS_DIR)/test/AppletTest.class \ +$(CLASS_DIR)/test/CommandMapTest.class \ +$(CLASS_DIR)/test/DHTransferableTest.class \ +$(CLASS_DIR)/test/DSWriteTest.class \ +$(CLASS_DIR)/test/DataHandlerTest.class \ +$(CLASS_DIR)/test/DataSourceTest.class \ +$(CLASS_DIR)/test/SerMaker.class \ +$(CLASS_DIR)/test/SerMaker11.class \ +$(CLASS_DIR)/test/SerReader.class \ +$(CLASS_DIR)/test/SerReader11.class + +DEMO_CLASSES_LIST = \ +$(CLASS_DIR)/demo/MikeTest.class \ +$(CLASS_DIR)/demo/PrefTest.class \ +$(CLASS_DIR)/demo/FileView.class \ +$(CLASS_DIR)/demo/MCTest.class \ +$(CLASS_DIR)/demo/CompViewer.class \ +$(CLASS_DIR)/demo/JAFApp.class \ +$(CLASS_DIR)/demo/SimpleDCF.class \ +$(CLASS_DIR)/demo/TextInternalizer.class \ +$(CLASS_DIR)/demo/MTest.class \ +$(CLASS_DIR)/demo/DHURL.class \ +$(CLASS_DIR)/demo/PlainDCH.class \ +$(CLASS_DIR)/demo/DCHTest2.class \ +$(CLASS_DIR)/demo/ODCHTest.class \ +$(CLASS_DIR)/demo/DCHTest.class
diff --git a/build/precompile.jtx b/build/precompile.jtx new file mode 100644 index 0000000..bbbe054 --- /dev/null +++ b/build/precompile.jtx
@@ -0,0 +1,4 @@ +# SCCS 1.0 02/20/98 +javax/activation/MimeType/testlist.html#readExternalTest xxxxxxx solaris-sparc +javax/activation/URLDataSource/testlist.html#getInputStreamTest1 xxxxxxx solaris-sparc +javax/activation/URLDataSource/testlist.html#getOutputStreamTest1 xxxxxxx solaris-sparc
diff --git a/build/share/minclude/com_sun_activation_registries.jmk b/build/share/minclude/com_sun_activation_registries.jmk new file mode 100644 index 0000000..278949c --- /dev/null +++ b/build/share/minclude/com_sun_activation_registries.jmk
@@ -0,0 +1,10 @@ +# +# @(#)com_sun_activation_registries.jmk 1.3 03/08/20 +# +FILES_java = \ + $(TARGDIR)com/sun/activation/registries/LogSupport.java \ + $(TARGDIR)com/sun/activation/registries/MailcapFile.java \ + $(TARGDIR)com/sun/activation/registries/MailcapParseException.java \ + $(TARGDIR)com/sun/activation/registries/MailcapTokenizer.java \ + $(TARGDIR)com/sun/activation/registries/MimeTypeEntry.java \ + $(TARGDIR)com/sun/activation/registries/MimeTypeFile.java
diff --git a/build/share/minclude/com_sun_activation_viewers.jmk b/build/share/minclude/com_sun_activation_viewers.jmk new file mode 100644 index 0000000..6013b1a --- /dev/null +++ b/build/share/minclude/com_sun_activation_viewers.jmk
@@ -0,0 +1,8 @@ +# +# @(#)com_sun_activation_viewers.jmk 1.1 99/03/06 +# +FILES_java = \ + $(TARGDIR)com/sun/activation/viewers/ImageViewer.java \ + $(TARGDIR)com/sun/activation/viewers/ImageViewerCanvas.java \ + $(TARGDIR)com/sun/activation/viewers/TextEditor.java \ + $(TARGDIR)com/sun/activation/viewers/TextViewer.java
diff --git a/build/share/minclude/demo.jmk b/build/share/minclude/demo.jmk new file mode 100644 index 0000000..a67ea46 --- /dev/null +++ b/build/share/minclude/demo.jmk
@@ -0,0 +1,17 @@ +# +# @(#)demo.jmk 1.3 05/04/07 +# +FILES_java = \ + $(TARGDIR)demo/CompViewer.java \ + $(TARGDIR)demo/DCHTest.java \ + $(TARGDIR)demo/DCHTest2.java \ + $(TARGDIR)demo/DHURL.java \ + $(TARGDIR)demo/FileView.java \ + $(TARGDIR)demo/JAFApp.java \ + $(TARGDIR)demo/MCDump.java \ + $(TARGDIR)demo/MCTest.java \ + $(TARGDIR)demo/ODCHTest.java \ + $(TARGDIR)demo/PlainDCH.java \ + $(TARGDIR)demo/PrefTest.java \ + $(TARGDIR)demo/SimpleDCF.java \ + $(TARGDIR)demo/TextInternalizer.java
diff --git a/build/share/minclude/javax_activation.jmk b/build/share/minclude/javax_activation.jmk new file mode 100644 index 0000000..6c9f602 --- /dev/null +++ b/build/share/minclude/javax_activation.jmk
@@ -0,0 +1,22 @@ +# +# @(#)javax_activation.jmk 1.2 02/03/10 +# +FILES_java = \ + $(TARGDIR)javax/activation/ActivationDataFlavor.java \ + $(TARGDIR)javax/activation/CommandInfo.java \ + $(TARGDIR)javax/activation/CommandMap.java \ + $(TARGDIR)javax/activation/CommandObject.java \ + $(TARGDIR)javax/activation/DataContentHandler.java \ + $(TARGDIR)javax/activation/DataContentHandlerFactory.java \ + $(TARGDIR)javax/activation/DataHandler.java \ + $(TARGDIR)javax/activation/DataSource.java \ + $(TARGDIR)javax/activation/FileDataSource.java \ + $(TARGDIR)javax/activation/FileTypeMap.java \ + $(TARGDIR)javax/activation/MailcapCommandMap.java \ + $(TARGDIR)javax/activation/MimeType.java \ + $(TARGDIR)javax/activation/MimeTypeParameterList.java \ + $(TARGDIR)javax/activation/MimeTypeParseException.java \ + $(TARGDIR)javax/activation/MimetypesFileTypeMap.java \ + $(TARGDIR)javax/activation/SecuritySupport.java \ + $(TARGDIR)javax/activation/URLDataSource.java \ + $(TARGDIR)javax/activation/UnsupportedDataTypeException.java
diff --git a/build/share/minclude/resources.res b/build/share/minclude/resources.res new file mode 100644 index 0000000..da0f0bf --- /dev/null +++ b/build/share/minclude/resources.res
@@ -0,0 +1,9 @@ +# +# @(#)resources.res 1.1 99/03/06 +# +# Defines which files are copied to the META-INF directory + +RESOURCES = \ + $(TOPDIR)/src/share/lib/mailcap.default \ + $(TOPDIR)/src/share/lib/mimetypes.default +
diff --git a/build/solaris/GNUmakefile b/build/solaris/GNUmakefile new file mode 100644 index 0000000..58b4cac --- /dev/null +++ b/build/solaris/GNUmakefile
@@ -0,0 +1,157 @@ +# +# @(#)GNUmakefile 1.24 12/05/02 +# +# Makefile for building all of JAF +# +# Targets and their description: +# +# all +# builds everything, javax, com, demo +# +# jar +# creates the activation.jar file +# +# jar_all +# first makes "all", then makes "jar" of *all* class files +# +# install +# creates a jar file that contains only +# the packages we ship. +# +# project +# creates all the JavaWorkShop project files +# +# release +# removes everything (realclean) then +# creates the release zip file that includes everything +# that is shipped in the jaf.zip file +# +# docs +# builds javadocs +# +# clean +# removes all the class files and binaries +# +# realclean +# clean + removes activation.jar & jaf.zip + +BUILDDIR = . +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +ZIP = zip + +LIBSRC = $(TOPDIR)/src/share/lib + +JAF_RELEASE = 1.1.1 +JAF_RELEASEB = $(shell echo $(JAF_RELEASE) | tr '.' '_') +#JAF_RELEASEDIR = $(BUILDDIR)/jaf-$(JAF_RELEASE) +JAF_RELEASEDIR = jaf-$(JAF_RELEASE) +JAF_RELEASEFILE = $(RELEASEDIR)/jaf$(JAF_RELEASEB).zip + +# specs +SPEC_DIR = $(TOPDIR)/src/share/doc/spec +RELEASE_SPECS = $(SPEC_DIR)/JAF-1.1.ps $(SPEC_DIR)/JAF-1.1.pdf \ + $(SPEC_DIR)/JAF-1.1-changes.txt + +SUBDIRS = javax com demo META-INF + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk + +jar :: + @echo Jarring ... + @sed -e 's"%RELEASE%"$(JAF_RELEASE)"' < $(LIBSRC)/jaf.mf \ + > classes/jaf.mf + @cd classes; $(JAR) cfm ../activation.jar jaf.mf META-INF javax com + +jar_all :: all jar + +install :: jar sigtest + +# generate a new signature file +siggen :: + sh siggen -in activation.jar -package javax -out activation.sig + +# test that API hasn't changed +sigtest :: + sh sigtest -base activation.sig -test activation.jar -package javax \ + -out report.out -check bincomp + +# Javadoc defines +DOCDIR = $(TOPDIR)/src/share/doc/api/javadocs +DOCPACKAGES = javax.activation +DOCFILES = \ + src/share/classes/javax/activation +DOCFILESEX = \ + src/share/classes/javax/activation/SecuritySupport.java + +JAVADOC_OPTS= -J-Xmx32m +TITLE="JavaBeans Activation Framework API documentation" + +# XXX - Would like to use standard "docs" rule but we need to do +# some special things here. In order to generate javadocs +# for only the limited set of classes listed in DOCFILES, +# we have to copy all those files to a temporary directory +# and run javadoc against that directory. + +JAVADOC_OPTS += -use -splitIndex -windowtitle $(TITLE) -doctitle $(TITLE) + +docs: + rm -rf $(DOCDIR) + mkdir -p $(DOCDIR) + mkdir $(DOCDIR)/tmp + (cd $(TOPDIR); tar cFFf - $(DOCFILES)) | (cd $(DOCDIR)/tmp; tar xf -) + (cd $(DOCDIR)/tmp; rm -f $(DOCFILESEX)) + $(JAVADOC) $(JAVADOC_OPTS) -d $(DOCDIR) \ + -sourcepath $(DOCDIR)/tmp/src/share/classes \ + -classpath $(CLASSBINDIR):$(DEPENDS) $(DOCPACKAGES) + rm -rf $(DOCDIR)/tmp + +realclean :: clean + @rm -f activation.jar $(JAF_RELEASEFILE) + +# The "release" target is ugly-ish. Should clean up later. +release :: realclean all install docs releasezip + +releasezip: + @echo Making release ... + @rm -rf $(JAF_RELEASEFILE) $(JAF_RELEASEDIR) + @[ -d $(RELEASEDIR) ] || mkdir $(RELEASEDIR) + @mkdir $(JAF_RELEASEDIR) + @mkdir $(JAF_RELEASEDIR)/docs + @mkdir $(JAF_RELEASEDIR)/docs/javadocs + @mkdir -p $(JAF_RELEASEDIR)/demo + @cp activation.jar $(JAF_RELEASEDIR) + @#cp $(TOPDIR)/src/share/doc/release/CHANGES.txt $(RELEASEDIR) + @rm -f $(RELEASEDIR)/README.txt + @cp $(TOPDIR)/src/share/doc/release/README.txt $(RELEASEDIR) + @rm -f $(RELEASEDIR)/LICENSE.txt + @cp $(TOPDIR)/src/share/doc/release/LICENSE.txt $(RELEASEDIR) + @rm -f $(RELEASEDIR)/distributionREADME.txt + @cp $(TOPDIR)/src/share/doc/release/distributionREADME.txt $(RELEASEDIR) + @rm -f $(RELEASEDIR)/RELNOTES.txt + @cp -r $(TOPDIR)/src/share/doc/api/javadocs $(RELEASEDIR) + @#cp $(TOPDIR)/src/share/doc/release/CHANGES.txt $(JAF_RELEASEDIR) + @cp $(TOPDIR)/src/share/doc/release/README.txt $(JAF_RELEASEDIR) + @cp $(TOPDIR)/src/share/doc/release/LICENSE.txt $(JAF_RELEASEDIR) + @cp $(TOPDIR)/src/share/doc/release/distributionREADME.txt $(JAF_RELEASEDIR) + @cp $(TOPDIR)/src/share/doc/release/RELNOTES.txt $(JAF_RELEASEDIR) + @cp $(TOPDIR)/src/share/classes/demo/*.java $(JAF_RELEASEDIR)/demo + @#cp $(TOPDIR)/src/share/classes/demo/README.txt $(JAF_RELEASEDIR)/demo + @cp -r $(TOPDIR)/src/share/doc/api/javadocs $(JAF_RELEASEDIR)/docs/ + @for i in $(RELEASE_SPECS); do \ + if [ -f $$i ]; then \ + file=`basename $$i`; \ + rm -f $(RELEASEDIR)/$$file; \ + cp $$i $(RELEASEDIR); \ + cp $$i $(JAF_RELEASEDIR)/docs; \ + fi \ + done + @$(ZIP) -r $(JAF_RELEASEFILE) $(JAF_RELEASEDIR) + @rm -rf $(JAF_RELEASEDIR) + @echo Done Making release
diff --git a/build/solaris/META-INF/GNUmakefile b/build/solaris/META-INF/GNUmakefile new file mode 100644 index 0000000..6281b8c --- /dev/null +++ b/build/solaris/META-INF/GNUmakefile
@@ -0,0 +1,27 @@ +# +# @(#)GNUmakefile 1.2 98/01/30 +# +# Makefile for building (copying) the files in META-INF +# + +BUILDDIR = .. +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +SUBDIRS = sun + +include $(MINCLUDES)/resources.res +META_INF_DIR = $(TOPDIR)/build/$(PLATFORM)/classes/META-INF + +all :: + @if [ ! -d $(META_INF_DIR) ] ; then mkdir $(META_INF_DIR); fi + @echo Copying $(RESOURCES) to $(META_INF_DIR) + @cp -f $(RESOURCES) $(META_INF_DIR) + +clean :: + @rm -rf $(META_INF_DIR) + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk
diff --git a/build/solaris/Platform.gmk b/build/solaris/Platform.gmk new file mode 100644 index 0000000..fe9ebf0 --- /dev/null +++ b/build/solaris/Platform.gmk
@@ -0,0 +1,8 @@ +# +# @(#)Platform.gmk 1.1 97/09/07 +# +# Generic definition of PLATFORM, and related, factored-out variables +# + +PLATFORM = solaris +TOPDIR = ../../$(BUILDDIR)
diff --git a/build/solaris/activation.sig b/build/solaris/activation.sig new file mode 100644 index 0000000..f498fac --- /dev/null +++ b/build/solaris/activation.sig
@@ -0,0 +1,182 @@ +//Java signature file +//date: Thu Apr 07 22:16:00 PDT 2005 +//classpath: activation.jar +//package: javax + + +package javax.activation; + +public class ActivationDataFlavor extends java.awt.datatransfer.DataFlavor { + public ActivationDataFlavor(Class, String); + public ActivationDataFlavor(Class, String, String); + public ActivationDataFlavor(String, String); + public boolean equals(java.awt.datatransfer.DataFlavor); + public String getHumanPresentableName(); + public String getMimeType(); + public Class getRepresentationClass(); + public boolean isMimeTypeEqual(String); + protected String normalizeMimeType(String); + protected String normalizeMimeTypeParameter(String, String); + public void setHumanPresentableName(String); +} + +public class CommandInfo { + public CommandInfo(String, String); + public String getCommandClass(); + public String getCommandName(); + public Object getCommandObject(javax.activation.DataHandler, ClassLoader) throws java.io.IOException, ClassNotFoundException; +} + +public abstract class CommandMap { + public CommandMap(); + public abstract javax.activation.DataContentHandler createDataContentHandler(String); + public javax.activation.DataContentHandler createDataContentHandler(String, javax.activation.DataSource); + public abstract javax.activation.CommandInfo[] getAllCommands(String); + public javax.activation.CommandInfo[] getAllCommands(String, javax.activation.DataSource); + public abstract javax.activation.CommandInfo getCommand(String, String); + public javax.activation.CommandInfo getCommand(String, String, javax.activation.DataSource); + public static javax.activation.CommandMap getDefaultCommandMap(); + public String[] getMimeTypes(); + public abstract javax.activation.CommandInfo[] getPreferredCommands(String); + public javax.activation.CommandInfo[] getPreferredCommands(String, javax.activation.DataSource); + public static void setDefaultCommandMap(javax.activation.CommandMap); +} + +public abstract interface CommandObject { + public abstract void setCommandContext(String, javax.activation.DataHandler) throws java.io.IOException; +} + +public abstract interface DataContentHandler { + public abstract Object getContent(javax.activation.DataSource) throws java.io.IOException; + public abstract Object getTransferData(java.awt.datatransfer.DataFlavor, javax.activation.DataSource) throws java.awt.datatransfer.UnsupportedFlavorException, java.io.IOException; + public abstract java.awt.datatransfer.DataFlavor[] getTransferDataFlavors(); + public abstract void writeTo(Object, String, java.io.OutputStream) throws java.io.IOException; +} + +public abstract interface DataContentHandlerFactory { + public abstract javax.activation.DataContentHandler createDataContentHandler(String); +} + +public class DataHandler implements java.awt.datatransfer.Transferable { + public DataHandler(Object, String); + public DataHandler(java.net.URL); + public DataHandler(javax.activation.DataSource); + public javax.activation.CommandInfo[] getAllCommands(); + public Object getBean(javax.activation.CommandInfo); + public javax.activation.CommandInfo getCommand(String); + public Object getContent() throws java.io.IOException; + public String getContentType(); + public javax.activation.DataSource getDataSource(); + public java.io.InputStream getInputStream() throws java.io.IOException; + public String getName(); + public java.io.OutputStream getOutputStream() throws java.io.IOException; + public javax.activation.CommandInfo[] getPreferredCommands(); + public Object getTransferData(java.awt.datatransfer.DataFlavor) throws java.awt.datatransfer.UnsupportedFlavorException, java.io.IOException; + public synchronized java.awt.datatransfer.DataFlavor[] getTransferDataFlavors(); + public boolean isDataFlavorSupported(java.awt.datatransfer.DataFlavor); + public synchronized void setCommandMap(javax.activation.CommandMap); + public static synchronized void setDataContentHandlerFactory(javax.activation.DataContentHandlerFactory); + public void writeTo(java.io.OutputStream) throws java.io.IOException; +} + +public abstract interface DataSource { + public abstract String getContentType(); + public abstract java.io.InputStream getInputStream() throws java.io.IOException; + public abstract String getName(); + public abstract java.io.OutputStream getOutputStream() throws java.io.IOException; +} + +public class FileDataSource implements javax.activation.DataSource { + public FileDataSource(java.io.File); + public FileDataSource(String); + public String getContentType(); + public java.io.File getFile(); + public java.io.InputStream getInputStream() throws java.io.IOException; + public String getName(); + public java.io.OutputStream getOutputStream() throws java.io.IOException; + public void setFileTypeMap(javax.activation.FileTypeMap); +} + +public abstract class FileTypeMap { + public FileTypeMap(); + public abstract String getContentType(java.io.File); + public abstract String getContentType(String); + public static javax.activation.FileTypeMap getDefaultFileTypeMap(); + public static void setDefaultFileTypeMap(javax.activation.FileTypeMap); +} + +public class MailcapCommandMap extends javax.activation.CommandMap { + public MailcapCommandMap(); + public MailcapCommandMap(java.io.InputStream); + public MailcapCommandMap(String) throws java.io.IOException; + public synchronized void addMailcap(String); + public synchronized javax.activation.DataContentHandler createDataContentHandler(String); + public synchronized javax.activation.CommandInfo[] getAllCommands(String); + public synchronized javax.activation.CommandInfo getCommand(String, String); + public synchronized String[] getMimeTypes(); + public synchronized String[] getNativeCommands(String); + public synchronized javax.activation.CommandInfo[] getPreferredCommands(String); +} + +public class MimeType implements java.io.Externalizable { + public MimeType(); + public MimeType(String) throws javax.activation.MimeTypeParseException; + public MimeType(String, String) throws javax.activation.MimeTypeParseException; + public String getBaseType(); + public String getParameter(String); + public javax.activation.MimeTypeParameterList getParameters(); + public String getPrimaryType(); + public String getSubType(); + public boolean match(String) throws javax.activation.MimeTypeParseException; + public boolean match(javax.activation.MimeType); + public void readExternal(java.io.ObjectInput) throws java.io.IOException, ClassNotFoundException; + public void removeParameter(String); + public void setParameter(String, String); + public void setPrimaryType(String) throws javax.activation.MimeTypeParseException; + public void setSubType(String) throws javax.activation.MimeTypeParseException; + public String toString(); + public void writeExternal(java.io.ObjectOutput) throws java.io.IOException; +} + +public class MimeTypeParameterList { + public MimeTypeParameterList(); + public MimeTypeParameterList(String) throws javax.activation.MimeTypeParseException; + public String get(String); + public java.util.Enumeration getNames(); + public boolean isEmpty(); + protected void parse(String) throws javax.activation.MimeTypeParseException; + public void remove(String); + public void set(String, String); + public int size(); + public String toString(); +} + +public class MimeTypeParseException extends Exception { + public MimeTypeParseException(); + public MimeTypeParseException(String); +} + +public class MimetypesFileTypeMap extends javax.activation.FileTypeMap { + public MimetypesFileTypeMap(); + public MimetypesFileTypeMap(java.io.InputStream); + public MimetypesFileTypeMap(String) throws java.io.IOException; + public synchronized void addMimeTypes(String); + public String getContentType(java.io.File); + public synchronized String getContentType(String); +} + +public class URLDataSource implements javax.activation.DataSource { + public URLDataSource(java.net.URL); + public String getContentType(); + public java.io.InputStream getInputStream() throws java.io.IOException; + public String getName(); + public java.io.OutputStream getOutputStream() throws java.io.IOException; + public java.net.URL getURL(); +} + +public class UnsupportedDataTypeException extends java.io.IOException { + public UnsupportedDataTypeException(); + public UnsupportedDataTypeException(String); +} + +//end of Java signature file
diff --git a/build/solaris/com/GNUmakefile b/build/solaris/com/GNUmakefile new file mode 100644 index 0000000..f72e2ae --- /dev/null +++ b/build/solaris/com/GNUmakefile
@@ -0,0 +1,21 @@ +# +# @(#)GNUmakefile 1.3 97/10/22 +# +# Makefile for building all of com +# + +BUILDDIR = .. +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +SUBDIRS = sun + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk + +clean :: + rm -fr $(LIBDIR) $(BINDIR) $(CLASSBINDIR)
diff --git a/build/solaris/com/sun/GNUmakefile b/build/solaris/com/sun/GNUmakefile new file mode 100644 index 0000000..2b8690d --- /dev/null +++ b/build/solaris/com/sun/GNUmakefile
@@ -0,0 +1,21 @@ +# +# @(#)GNUmakefile 1.1 99/03/06 +# +# Makefile for building all of com.sun +# + +BUILDDIR = ../.. +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +SUBDIRS = activation + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk + +clean :: + rm -fr $(LIBDIR) $(BINDIR) $(CLASSBINDIR)
diff --git a/build/solaris/com/sun/activation/GNUmakefile b/build/solaris/com/sun/activation/GNUmakefile new file mode 100644 index 0000000..fbd207a --- /dev/null +++ b/build/solaris/com/sun/activation/GNUmakefile
@@ -0,0 +1,21 @@ +# +# @(#)GNUmakefile 1.1 99/03/06 +# +# Makefile for building all of com.sun.activation +# + +BUILDDIR = ../../.. +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +SUBDIRS = registries viewers + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk + +clean :: + rm -fr $(LIBDIR) $(BINDIR) $(CLASSBINDIR)
diff --git a/build/solaris/com/sun/activation/registries/GNUmakefile b/build/solaris/com/sun/activation/registries/GNUmakefile new file mode 100644 index 0000000..233c5e4 --- /dev/null +++ b/build/solaris/com/sun/activation/registries/GNUmakefile
@@ -0,0 +1,24 @@ +# +# @(#)GNUmakefile 1.4 05/04/07 +# +# Makefile for building all of com.sun.mail.registries +# + +BUILDDIR = ../../../.. +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun +PACKAGE = com.sun.activation.registries + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +default: all + +include $(MINCLUDES)com_sun_activation_registries.jmk +include $(BUILDDIR)/makefiles/Classes.gmk + +all: classes + +clean clobber :: classes.clean + +
diff --git a/build/solaris/com/sun/activation/viewers/GNUmakefile b/build/solaris/com/sun/activation/viewers/GNUmakefile new file mode 100644 index 0000000..62a2347 --- /dev/null +++ b/build/solaris/com/sun/activation/viewers/GNUmakefile
@@ -0,0 +1,24 @@ +# +# @(#)GNUmakefile 1.1 99/03/06 +# +# Makefile for building all of com.sun.activation.viewers +# + +BUILDDIR = ../../../.. +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun +PACKAGE = com.sun.activation.viewers + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +default: all + +include $(MINCLUDES)com_sun_activation_viewers.jmk +include $(BUILDDIR)/makefiles/Classes.gmk + +all: classes + +clean clobber :: classes.clean + +
diff --git a/build/solaris/demo/GNUmakefile b/build/solaris/demo/GNUmakefile new file mode 100644 index 0000000..0e52e30 --- /dev/null +++ b/build/solaris/demo/GNUmakefile
@@ -0,0 +1,24 @@ +# +# @(#)GNUmakefile 1.2 07/05/15 +# +# Makefile for building all of demo +# + +BUILDDIR = .. +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun + +ALT_SRCDIR = demo +ALT_CLASSBINDIR = $(BUILDDIR)/demo_classes +DEPENDS = $(CLASSDIR) + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +include $(MINCLUDES)demo.jmk + +all :: classes + +clean clobber :: classes.clean + +include $(BUILDDIR)/makefiles/Classes.gmk
diff --git a/build/solaris/javax/GNUmakefile b/build/solaris/javax/GNUmakefile new file mode 100644 index 0000000..6f050b8 --- /dev/null +++ b/build/solaris/javax/GNUmakefile
@@ -0,0 +1,31 @@ +# +# @(#)GNUmakefile 1.1 99/03/06 +# +# Makefile for building all of javax +# + +BUILDDIR = .. +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun + +# Javadoc defines +DOCDIR = $(TOPDIR)/src/share/doc/api/javadocs +DOCPACKAGES = javax.activation + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +SUBDIRS = activation + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Subdirs.gmk + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk + +clean :: + rm -fr $(LIBDIR) $(BINDIR) $(CLASSBINDIR) + +# for "docs" target (hack: set JDK to 1.2 so that newer javadoc is used) +JDK = /usr/local/java/jdk1.2/solaris/ +JAVADOC_OPTS= -J-Xmx32m +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Docs.gmk +
diff --git a/build/solaris/javax/activation/GNUmakefile b/build/solaris/javax/activation/GNUmakefile new file mode 100644 index 0000000..0b886f3 --- /dev/null +++ b/build/solaris/javax/activation/GNUmakefile
@@ -0,0 +1,21 @@ +# +# @(#)GNUmakefile 1.6 05/04/07 +# +# Makefile for building all of javax.activation.* +# + +BUILDDIR = ../.. +include $(BUILDDIR)/Platform.gmk + +PRODUCT = sun +PACKAGE = javax.activation + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +include $(MINCLUDES)javax_activation.jmk + +all :: classes + +clean clobber :: classes.clean + +include $(BUILDDIR)/makefiles/Classes.gmk
diff --git a/build/solaris/lib/activation.jar b/build/solaris/lib/activation.jar new file mode 100644 index 0000000..6837774 --- /dev/null +++ b/build/solaris/lib/activation.jar Binary files differ
diff --git a/build/solaris/makefiles/Classes.gmk b/build/solaris/makefiles/Classes.gmk new file mode 100644 index 0000000..df1e6ab --- /dev/null +++ b/build/solaris/makefiles/Classes.gmk
@@ -0,0 +1,17 @@ +# +# @(#)Classes.gmk 1.1 97/09/07 +# +# Generic makefile for building collections of classes that doesn't +# also have to build programs or libraries. +# + +FILES_class = $(FILES_java:%.java=$(CLASSBINDIR)/%.class) + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Rules.gmk + +classes.clean : + rm -rf $(CLASSBINDIR)/$(PKGDIR) .classes.* + +DEBUG = classes + +OPTIMIZED = classes
diff --git a/build/solaris/makefiles/Defs-solaris.gmk b/build/solaris/makefiles/Defs-solaris.gmk new file mode 100644 index 0000000..3b73880 --- /dev/null +++ b/build/solaris/makefiles/Defs-solaris.gmk
@@ -0,0 +1,185 @@ +# +# @(#)Defs-solaris.gmk 1.3 05/04/07 +# +# Makefile to specify compiler flags for programs and libraries +# targeted to Solaris. Should not contain any rules. +# + +ARCH = $(shell uname -p) +OS_VERSION = $(shell uname -r) + +WHOAMI=/usr/ucb/whoami +ZIP=/usr/dist/local/exe/zip + +# This default is redefined during a release build. +RELEASE = $(shell echo `$(WHOAMI)`:`date '+%m/%d/%y-%H:%M'`) +FULL_VERSION = $(shell echo `$(WHOAMI)`:`date '+%m/%d/%y-%H:%M'`) + +## Section 1: Define CC, CPP, AS and LD flags. + +# If -Xa is in CFLAGS_COMMON it will end up ahead of $(POPT) for the +# optimized build, and that ordering of the flags completely freaks +# out cc. Hence, -Xa is instead in each CFLAGS variant. + +ifneq ($(CC_VERSION), gcc) +CFLAGS_COMMON = -v +CFLAGS_OPT = -Xa $(POPT) +CFLAGS_DBG = -Xa -g +else +CFLAGS_COMMON = +CFLAGS_OPT = $(POPT) +CFLAGS_DBG = -g +endif + +# Java memory management is based on memory mapping by default, but a +# system only assuming malloc/free can be built by adding -DUSE_MALLOC + +ifneq ($(CC_VERSION), gcc) +CPPFLAGS_COMMON = -D$(ARCH) -DSOLARIS2 -DRELEASE='"$(RELEASE)"' -DFULL_VERSION='"$(FULL_VERSION)"' +else +CPPFLAGS_COMMON = -D$(ARCH) -DHAVE_ALIGNED_LONGLONGS -DHAVE_ALIGNED_DOUBLES -DSOLARIS2 -DRELEASE='"$(RELEASE)"' -DFULL_VERSION='"$(FULL_VERSION)"' +endif +# [sbb] int32 scaffolding -- to be removed +CPPFLAGS_COMMON += $(USE_INT32) +CPPFLAGS_OPT = +CPPFLAGS_DBG = -DDEBUG + +ASFLAGS_COMMON = -P +ASFLAGS_OPT = +ASFLAGS_DBG = + +ifneq ($(LIBRARY),JdbcOdbc) +LDFLAGS_COMMON = -z defs +else +LDFLAGS_COMMON = +endif +LDFLAGS_OPT = +LDFLAGS_DBG = + +# +# All libraries except libjava and libjvm itself link against libjvm +# and libjava, the latter for its exported common utilities. libjava +# only links against libjvm. Programs' makefiles take their own +# responsibility for adding other libs. +# +ifdef LIBRARY +LDLIBS_COMMON = +ifneq ($(LIBRARY),jvm) +ifneq ($(LIBRARY),java) +# no libjvm in JDK 1.1 +#LDLIBS_OPT = -L$(LIB_LOCATION) -ljvm -ljava +#LDLIBS_DBG = -L$(LIB_LOCATION) -ljvm_g -ljava_g +LDLIBS_OPT = -L$(LIB_LOCATION) -ljava +LDLIBS_DBG = -L$(LIB_LOCATION) -ljava_g +else +LDLIBS_OPT = -L$(LIB_LOCATION) -ljvm +LDLIBS_DBG = -L$(LIB_LOCATION) -ljvm_g +endif +endif +endif + +## Section 2: Variables globally settable from the make +## command line (default values in brackets): +## THREADS_FLAG (native), GPROF (false), JCOV (true). +## Eg: % gnumake THREADS_FLAG=green + +THREADS_FLAG=green + +ifdef LIBRARY +ifeq ($(LIBRARY), jvm) +# do nothing +else +ifeq ($(LIBRARY), agent) +# do nothing +else +BUILD_REENTRANT_LIBS = true +endif +endif +endif + +LDFLAGS_COMMON = -L$(JDK_LIBDIR)/$(ARCH) +ifdef BUILD_REENTRANT_LIBS +CFLAGS_COMMON += -D_REENTRANT +LDFLAGS_COMMON += -L$(LIBDIR)/$(ARCH) +else +ifeq ($(THREADS_FLAG), native) + CFLAGS_COMMON += -D_REENTRANT -DNATIVE + # Even though libjava.so is linked with -lthread, this makes sure that + # the executable sees libthread definitions of thr_* functions before + # libc definitions. Starting in 2.5.1 the libc functions "do the + # right thing" when linked before libthread, but there is at least + # one bug in thr_stksegment that prevents it from working. The + # following line could go away if we decide not to support Solaris + # releases prior to 2.5.1 *and* the libc thread stubs get fixed. + # Dean Long 3/24/97: + LDLIBS_COMMON += -lthread +endif +endif + +GPROF = false +ifeq ($(GPROF), true) + CFLAGS_COMMON += -DGPROF -xpg + LDLIBS_COMMON += -xpg +endif + +JCOV = true +ifeq ($(JCOV), true) +ifeq ($(VARIANT), DBG) + CFLAGS_COMMON += -DJCOV +endif +endif + +ifdef LIBRARY + LDLIBS_COMMON += -lc +endif + + +## Section 3: Are we building some piece of the runtime? + +# Java default optimization -x04 +ifeq ($(PRODUCT), java) +ifneq ($(CC_VERSION), gcc) + _OPT = -xO4 +else + _OPT = -O3 +endif + CPPFLAGS_DBG += -DLOGGING + ASFLAGS_COMMON += -D_ASM +endif + + +## Section 4: Was your answer to Section 3 no? + +# Non-runtime default optimization -x02 +ifneq ($(PRODUCT), java) +ifneq ($(CC_VERSION), gcc) + _OPT = -xO2 +else + _OPT = -O2 +endif +endif + + +## Section 5: Tools + +ifneq ($(CC_VERSION), gcc) +CC = cc +CPP = cc -E +CXX = CC +else +CC = gcc +CPP = gcc -E +CXX = g++ +endif + +AS = as +LD = /usr/ccs/bin/ld +OPENWINHOME = /usr/openwin +LIBRARY_SUFFIX = so + +# SunSoft JIT +ifneq ($(PRODUCT), java) +ifeq ($(BUILD_USES_JIT), true) + JIT_OPTION=-Djava.compiler=sunwjit +endif +endif
diff --git a/build/solaris/makefiles/Defs.gmk b/build/solaris/makefiles/Defs.gmk new file mode 100644 index 0000000..3028ac7 --- /dev/null +++ b/build/solaris/makefiles/Defs.gmk
@@ -0,0 +1,205 @@ +# +# @(#)Defs.gmk 1.21 07/05/15 +# +# Common variables used by all the Java makefiles. This file should not +# contain rules. +# + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs-$(PLATFORM).gmk + + +SHARE_SRC = $(TOPDIR)/src/share +PLATFORM_SRC = $(TOPDIR)/src/$(PLATFORM) + +TARGDIR = +MINCLUDES = $(TOPDIR)/build/share/minclude/ + +# +# Default BOOTDIR +# +_BOOTDIR = /usr/local/java/latest + +# +# Set BOOTDIR to _BOOTDIR if ALT_BOOTDIR isn't set. Otherwise, set +# it to ALT_BOOTDIR +# +BOOTDIR = $(_BOOTDIR$(ALT_BOOTDIR))$(ALT_BOOTDIR) + +# +# Default JAVAHOME +# +ifeq ($(ARCH), sparc) + _JAVAHOME = /java/re/jdk/1.4.2/archive/fcs/binaries/solaris-sparc +else + _JAVAHOME = /java/re/jdk/1.4.2/archive/fcs/binaries/solaris-i586 +endif + +# +# Set JAVAHOME to _JAVAHOME if ALT_JAVAHOME isn't set. Otherwise, set +# it to ALT_JAVAHOME +# +JAVAHOME = $(_JAVAHOME$(ALT_JAVAHOME))$(ALT_JAVAHOME) + +JDK = $(JAVAHOME$(JDK_HOME))$(JDK_HOME) +JDK_BINDIR = $(JDK)/bin +JDK_INCLUDE = $(JDK)/include +JDK_LIBDIR = $(JDK)/jre/lib +BINDIR = $(TOPDIR)/build/$(PLATFORM)/bin +LIBDIR = $(TOPDIR)/build/$(PLATFORM)/lib +INCLUDEDIR = $(TOPDIR)/build/$(PLATFORM)/include +CLASSDIR = $(TOPDIR)/build/$(PLATFORM)/classes +RELEASEDIR = $(TOPDIR)/build/$(PLATFORM)/release +# Set CLASSBINDIR to CLASSDIR if ALT_CLASSBINDIR isn't set. Otheriwse set +# it to ALT_CLASSBINDIR +CLASSBINDIR = $(CLASSDIR$(ALT_CLASSBINDIR))$(ALT_CLASSBINDIR) +_SRCDIR = . +SRCDIR = $(_SRCDIR$(ALT_SRCDIR))$(ALT_SRCDIR) + +INCLUDES = -I. -ICClassHeaders \ + -I$(JDK_INCLUDE) -I$(JDK_INCLUDE)/$(PLATFORM) \ + $(patsubst %,-I%,$(subst :, ,$(VPATH.h))) $(OTHER_INCLUDES) +OTHER_CPPFLAGS = $(INCLUDES) + +# +# vpaths. These are the default locations searched for source files. +# GNUmakefiles of individual areas often override the default settings. +# There are no longer default vpath entries for C and assembler files +# so we can ensure that libraries don't get their hands on JVM files. +# +# We define an intermediate variable for Java files because +# we use its value later to help define $CLASSPATH +# +VPATH.java = $(PLATFORM_SRC)/classes/$(SRCDIR):$(SHARE_SRC)/classes/$(SRCDIR) + +vpath %.java $(VPATH.java) + +vpath %.class $(CLASSBINDIR) + +vpath %.o $(OBJDIR) + +# +# VPATH.h is used elsewhere to generate include flags. By default, +# anyone has access to the include files that the JVM area exports, +# namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific +# relatives. +# +VPATH.h = $(PLATFORM_SRC)/javavm/export:$(SHARE_SRC)/javavm/export + +vpath %.h $(VPATH.h) + +# +# Object Directories +# Create different object directories for green and native threads +# so that both options can be built without clobbering each other + +# Directory name specific to type of threads: green or native +# If THREADS_FLAG is not set or not equal to green or native, then no threads +# specific object directories are made. This would enable to quickly move to +# a build environment with a single threads type, in the future. +# TSOBJDIR = Thread Specific object directory + +ifdef BUILD_REENTRANT_LIBS + TSOBJDIR = . +else +ifeq ($(THREADS_FLAG), native) + TSOBJDIR = native_threads +else +ifeq ($(THREADS_FLAG), green) + TSOBJDIR = green_threads +else + TSOBJDIR = . +endif +endif +endif + +# +OBJDIR_NAME = obj +OBJDIR = $(OBJDIR_NAME)$(SUFFIX)/$(ARCH)/$(TSOBJDIR) +OBJDIRS = $(OBJDIR_NAME)$(OPT_SUFFIX)/$(ARCH)/$(TSOBJDIR) \ + $(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR) + +# +# LIB_LOCATION must be defined in all cases so that we can link against +# libjava in various places. +# +LIB_LOCATION = $(LIBDIR)/$(ARCH) +JDK_LIB_LOCATION = $(JDK_LIBDIR)/$(ARCH) + +# Compute the root of each of the object directories +# used to delete whole object directories when making clean and/or clobber + +OBJROOTS = $(patsubst %/$(ARCH)/$(TSOBJDIR), %, $(OBJDIRS)) + +# +# Java header and stub variables +# +ifeq ($(PRODUCT), java) + CLASSPATH = $(CLASSBINDIR):$(DEPENDS):$(VPATH.java) +else + PKG = $(shell expr $(PACKAGE) : '\([a-z]*\)') + PKGDIR = $(shell echo $(PACKAGE) | sed 's:\.:/:g') + CLASSSRCDIR1 = $(PLATFORM_SRC)/classes/$(SRCDIR) + CLASSSRCDIR2 = $(SHARE_SRC)/classes/$(SRCDIR) + SRCPATH = $(CLASSSRCDIR1):$(CLASSSRCDIR2) + CLASSPATH = $(SRCPATH):$(CLASSBINDIR):$(DEPENDS) +endif + +CLASSHDRDIR = CClassHeaders +CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) +CLASSSTUBOBJS = classstubs.o +STUBPREAMBLE= $(TOPDIR)/build/$(PLATFORM)/classes/StubPreamble.h + +# +# Suffixes for various VARIANTs +# +OPT_SUFFIX = +DBG_SUFFIX = _g +SUFFIX = $($(VARIANT)_SUFFIX) + +# +# Java executables/scripts [I'm not sure whether we really want to be +# getting the raw executables in the other cases rather than going +# through the wrappers. Adding JCMD to fix a problem in JAVAC_CMD is +# conservative for now but may not be best. It's also not clear that +# JCMD should be java$(SUFFIX), but that may be needed for "gnumake +# debug" to do the right thing. Again, do no harm for now.] +# +ifeq ($(PRODUCT), java) + JAVA = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/java$(SUFFIX) + JAVAH = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/javah$(SUFFIX) + JAVAC = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/javac$(SUFFIX) + JAR = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/jar$(SUFFIX) + JCMD = $(BINDIR)/java$(SUFFIX) -$(THREADS_FLAG) +else + JAVA = $(JDK_BINDIR)/java$(SUFFIX) + JAVAC = $(JDK_BINDIR)/javac$(SUFFIX) + JAVAH = $(JDK_BINDIR)/javah$(SUFFIX) + JAVADOC = $(JDK_BINDIR)/javadoc$(SUFFIX) + JAR = $(JDK_BINDIR)/jar$(SUFFIX) + JDB = $(JDK_BINDIR)/jdb$(SUFFIX) + JCMD = $(JAVA) +endif + +# +# Invoking the Java compiler +# +JAVAC_CMD = $(JAVAC) -source 1.4 + +# +# Set opt level to ALT_OPT if set otherwise _OPT +# +POPT = $(_OPT$(ALT_OPT))$(ALT_OPT) + +# +# Tool flags +# +CFLAGS = $(CFLAGS_$(VARIANT)) $(CFLAGS_COMMON) $(OTHER_CFLAGS) +LCFLAGS = $(CFLAGS_$(VARIANT)) $(LCFLAGS_COMMON) $(OTHER_CFLAGS) +CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ + $(DEFINES) $(OPTIONS:%=-D%) +LCPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(LCPPFLAGS_COMMON) \ + $(OTHER_CPPFLAGS) $(DEFINES) $(OPTIONS:%=-D%) +ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) +LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) +LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) +
diff --git a/build/solaris/makefiles/Docs.gmk b/build/solaris/makefiles/Docs.gmk new file mode 100644 index 0000000..305d93b --- /dev/null +++ b/build/solaris/makefiles/Docs.gmk
@@ -0,0 +1,25 @@ +# +# @(#)Docs.gmk 1.5 99/03/06 +# +# Makefile Rule for generating javadocs +# +# Depends on JDK 1.2beta4 or later javadoc. +# + +TITLE = 'JavaBeans Activation Framework 1.0 API documentation' +JAVADOC_OPTS = -use -splitIndex -windowtitle $(TITLE) -doctitle $(TITLE) + +docs: + if [ ! -s $(DOCDIR) ]; then \ + mkdir -p $(DOCDIR); \ + fi + if [ ! -s $(DOCDIR)/images ]; then \ + echo Warning: No Images directory in $(DOCDIR); \ + if [ -s $(DOCDIR)/../misc/images ]; then \ + mkdir $(DOCDIR)/images; \ + cp $(DOCDIR)/../misc/images/*.gif $(DOCDIR)/images; \ + fi; \ + fi + rm -f $(DOCDIR)/*.html + $(JAVADOC) $(JAVADOC_OPTS) -d $(DOCDIR) -sourcepath $(SRCPATH) \ + $(DOCPACKAGES)
diff --git a/build/solaris/makefiles/Library.gmk b/build/solaris/makefiles/Library.gmk new file mode 100644 index 0000000..11dd9ea --- /dev/null +++ b/build/solaris/makefiles/Library.gmk
@@ -0,0 +1,100 @@ +# +# @(#)Library.gmk 1.1 97/09/07 +# +# Generic makefile for building libraries. +# +# This should be included in your library GNUmakefile. +# + +.PHONY: all optimized debug clean .exported.classes + +all: optimized debug + +library: optimized debug + +optimized debug: + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Classes.gmk +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +# It is important to define these *after* including Classes.gmk +# in order to override the values defined inthat makefile. +# +DEBUG = $(LIB_LOCATION)/lib$(LIBRARY)_g.$(LIBRARY_SUFFIX) + +OPTIMIZED = $(LIB_LOCATION)/lib$(LIBRARY).$(LIBRARY_SUFFIX) + +FILES_o = $(patsubst %.c,$(OBJDIR)/%.o,$(FILES_c)) +FILES_o += $(patsubst %.s,$(OBJDIR)/%.o,$(FILES_s)) +FILES_o += $(patsubst %.cpp,$(OBJDIR)/%.o,$(FILES_cpp)) + +ifeq ($(LIBRARY), jvm) +$(OPTIMIZED) $(DEBUG) :: \ + $(INIT) $(OBJDIR)/.library.dirs.$(ARCH) .library.headers + @true +else +$(OPTIMIZED) $(DEBUG) :: \ + $(INIT) $(OBJDIR)/.library.dirs.$(ARCH) classes .library.headers + @true +endif + +$(OPTIMIZED) $(DEBUG):: $(FILES_o) + @set -- $?; \ + echo Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...}; + @echo $@ + @echo "OBJDIR=$(OBJDIR)" + $(CC) -G -o $@ $(FILES_o) $(LDFLAGS) $(LDLIBS) + /usr/ccs/bin/mcs -d -a "$(FULL_VERSION)" $@ + +ifneq ($(PRODUCT), java) +vpath %.c $(SHARE_SRC)/native/$(PKGDIR) +vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR) + +CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR) \ + -I$(PLATFORM_SRC)/native/$(PKGDIR) +endif + +OTHER_INCLUDES += -I$(SHARE_SRC)/native/common \ + -I$(PLATFORM_SRC)/native/common + +CLASSES.export = $(shell echo '$(FILES_export)' '$(FILES_export2)' \ + | sed -e 's:\.java::g' -e 's:/:\.:g' -e 's/\$$/\\\$$/g') + +.exported.classes: .delete.classlist \ + $(FILES_export:%.java=$(CLASSBINDIR)/%.class) .compile.classlist + +# +# Delete these libstubs.c rules once conversion to JNI is completed +# +libstubs.c .library.headers :: .exported.classes + @true + +libstubs.c :: $(FILES_export:%.java=$(CLASSBINDIR)/%.class) + $(JAVAH) $(JAVAHFLAGS) -classpath $(CLASSPATH) -o $@ \ + -stubs $(CLASSES.export) + @-touch $@ # javah only writes file if changed + +.library.headers :: $(FILES_export:%.java=$(CLASSBINDIR)/%.class) + $(JAVAH) $(JAVAHFLAGS) -classpath $(CLASSPATH) -d $(CLASSHDRDIR)/ \ + $(CLASSES.export) + @-touch $@ + +$(OBJDIR)/.library.dirs.$(ARCH): FORCE + mkdir -p $(LIBDIR)/$(ARCH)/$(TSOBJDIR) $(OBJDIRS) + @-touch $(OBJDIR)/.library.dirs.$(ARCH) + +library.clean: + rm -rf libstubs.c $(OBJROOTS) CClassHeaders + rm -rf $(DEBUG) $(OPTIMIZED) .library.* + +clobber :: clean + +# +# Include make dependancies +# +files := $(foreach file, $(wildcard */$(ARCH)/$(TSOBJDIR)/*.d), $(file)) +ifneq ($(strip $(files)),) + include $(files) +endif + +.PHONY : .exported.classes
diff --git a/build/solaris/makefiles/Program.gmk b/build/solaris/makefiles/Program.gmk new file mode 100644 index 0000000..8332ef6 --- /dev/null +++ b/build/solaris/makefiles/Program.gmk
@@ -0,0 +1,91 @@ +# +# @(#)Program.gmk 1.1 97/09/07 +# +# Generic makefile for building executables. + +.PHONY: all optimized debug classes clean clobber + +all: optimized debug + +TSPROGRAM = $(PROGRAM:%=$(TSOBJDIR)/%) +DEBUG = $(BINDIR)/$(ARCH)/$(TSPROGRAM)_g $(BINDIR)/$(PROGRAM)_g +OPTIMIZED = $(BINDIR)/$(ARCH)/$(TSPROGRAM) $(BINDIR)/$(PROGRAM) + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Rules.gmk + +FILES_o = $(patsubst %.c,$(OBJDIR)/%.o,$(FILES_c)) +FILES_o += $(patsubst %.s,$(OBJDIR)/%.o,$(FILES_s)) + +CLASSES.export = $(shell echo $(FILES_export) | \ + sed "s:\.java::g" | sed "s:/:\.:g") + +.PHONY : $(PROGRAM)_g $(PROGRAM) + +$(PROGRAM)_g: debug + +$(PROGRAM): optimized + +# Make a generic link to the executable, for casual users + +$(BINDIR)/$(ARCH)/$(TSPROGRAM)_g $(BINDIR)/$(ARCH)/$(TSPROGRAM) \ + :: $(INIT) $(OBJDIR)/.program.dirs.$(ARCH) classes $(PROGRAM_HEADERS) + @true + +$(BINDIR)/$(ARCH)/$(TSPROGRAM)_g $(BINDIR)/$(ARCH)/$(TSPROGRAM) \ + :: $(FILES_o) + @set -- $?; \ + echo Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...}; + $(CC) $(LDFLAGS) $(FILES_o) $(LDLIBS) -o $(OBJDIR)/$(@F) + -(cp $(OBJDIR)/$(@F) $(BINDIR)/$(ARCH)/$(TSOBJDIR)/$(@F) \ + && echo "Copying" $(@F) "to" \ + $(BINDIR)/$(ARCH)/$(TSOBJDIR)) 2>/dev/null + +$(BINDIR)/$(PROGRAM)_g: $(BINDIR)/.java_wrapper .java_wrapper_local + rm -f $(BINDIR)/$(@F) ; ln -s .java_wrapper $(BINDIR)/$(@F) + rm -f $(@F) ; ln -s .java_wrapper_local $(@F) + +$(BINDIR)/$(PROGRAM): $(BINDIR)/.java_wrapper .java_wrapper_local + rm -f $(BINDIR)/$(@F) ; ln -s .java_wrapper $(BINDIR)/$(@F) + rm -f $(@F) ; ln -s .java_wrapper_local $(@F) + +$(BINDIR)/.java_wrapper: $(PLATFORM_SRC)/bin/java_wrapper.sh + rm -f $(BINDIR)/.java_wrapper + cp $(PLATFORM_SRC)/bin/java_wrapper.sh $(BINDIR)/.java_wrapper + chmod +x $(BINDIR)/.java_wrapper + +.java_wrapper_local: $(PLATFORM_SRC)/bin/java_wrapper_local.sh + rm -f .java_wrapper_local + cp $(PLATFORM_SRC)/bin/java_wrapper_local.sh .java_wrapper_local + chmod +x .java_wrapper_local + +$(OBJDIR)/.program.dirs.$(ARCH): + mkdir -p $(OBJDIRS) $(BINDIR)/$(ARCH)/$(TSOBJDIR) \ + $(CLASSBINDIR) + -touch $(OBJDIR)/.program.dirs.$(ARCH) + +$(PROGRAM_HEADERS): $(FILES_export:%.java=$(CLASSBINDIR)/%.class) + $(JAVAH) $(JAVAHFLAGS) -classpath $(CLASSPATH) -d $(CLASSHDRDIR)/ \ + $(CLASSES.export) + @-touch $@ + +classstubs.c: $(FILES_export:%.java=$(CLASSBINDIR)/%.class) + $(JAVAH) $(JAVAHFLAGS) -classpath $(CLASSPATH) -o $@ \ + -stubs $(CLASSES.export) + @-touch $@ # javah only writes file if changed + +clean :: FORCE + rm -rf $(OBJROOTS) + rm -f classstubs.c .program* + +clobber :: FORCE + rm -f $(OPTIMIZED) $(DEBUG) $(PROGRAM) $(PROGRAM)_g + rm -f .java_wrapper_local + +# +# Now include make dependencies +# +files := $(foreach file, $(wildcard */$(ARCH)/$(TSOBJDIR)/*.d), $(file)) +ifneq ($(strip $(files)),) + include $(files) +endif +
diff --git a/build/solaris/makefiles/Project.gmk b/build/solaris/makefiles/Project.gmk new file mode 100644 index 0000000..1cba7ac --- /dev/null +++ b/build/solaris/makefiles/Project.gmk
@@ -0,0 +1,21 @@ +# +# @(#)Project.gmk 1.2 97/10/25 +# +# Rule to make the Java Workshop project file at each level. +# +# SUBDIRS may be set if there are subdirectories. +# .classes.prj will have been created if there +# are .java files here. + +MAIN_prj = $(MAIN:%=%.prj) + +project :: $(MAIN_prj) GNUmakefile + sh $(TOPDIR)/build/$(PLATFORM)/makefiles/mkproject -d $(CLASSBINDIR) \ + -p $(CLASSPATH) -s "$(SUBDIRS)" -c "-g -J-mx16m -J-mx32m" \ + $(shell if [ -s .classes.prj ] ; then cat .classes.prj; fi) \ + >$(shell basename `pwd`).prj + +%.prj: GNUmakefile + sh $(TOPDIR)/build/$(PLATFORM)/makefiles/mkproject -d $(CLASSBINDIR) \ + -p $(CLASSPATH) -s $(TOPDIR)/build/$(PLATFORM)/$(PLATFORM) \ + -j -mx32m -m $(PACKAGE).$(subst .prj,,$@) > $@
diff --git a/build/solaris/makefiles/Rules.gmk b/build/solaris/makefiles/Rules.gmk new file mode 100644 index 0000000..57cfe2a --- /dev/null +++ b/build/solaris/makefiles/Rules.gmk
@@ -0,0 +1,175 @@ +# +# @(#)Rules.gmk 1.3 97/10/23 +# +# Rules shared by all Java makefiles. +# + +.PHONY: classes + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +# +# This could now be done with vpaths. +# +$(CLASSBINDIR)/%.class: $(PLATFORM_SRC)/classes/%.java + @echo $? >>.classes.list +$(CLASSBINDIR)/%.class: $(SHARE_SRC)/classes/%.java + @echo $? >>.classes.list + +FILES_class = $(FILES_java:%.java=$(CLASSBINDIR)/%.class) + +.delete.classlist: + @/bin/rm -f .classes.list + +.compile.classlist: + if [ -s .classes.list ] ; \ + then $(JAVAC_CMD) -classpath $(CLASSPATH) -d $(CLASSBINDIR) \ + $(JAVACFLAGS) \ + $(shell if [ -s .classes.list ] ; then cat .classes.list; fi ) ; \ + fi + +classes : $(CLASSBINDIR) .delete.classlist $(FILES_class) .compile.classlist + +# +# Special rules to collect the list of source files in this project. +# The leading "X/" is a necessary hack because otherwise "%.class" +# doesn't match anything with a "/" in it. +# +X/%.class: $(PLATFORM_SRC)/classes/%.java + @echo $? >>.classes.prj +X/%.class: $(SHARE_SRC)/classes/%.java + @echo $? >>.classes.prj + +FILES_list = $(FILES_java:%.java=X/%.class) + +# +# Rules for making Java Workshop project files +# +project :: .delete.prjlist $(FILES_list) + +.delete.prjlist: + @/bin/rm -f .classes.prj + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Project.gmk + +# End of Java Workshop rules + +$(CLASSBINDIR): + @mkdir -p $@ + +$(OBJDIR)/%.o: %.c + ifdef VARIANT + $(COMPILE.c) -o $@ $< + @$(CC) -xM1 $(CPPFLAGS) $< 2> /dev/null | \ + sed -e '/:[ ]*[/]/d' -e 's!$*\.o!$(dir $@)&!g' | \ + sort | uniq > $(@:.o=.d) + else + $(MAKE) $@ VARIANT=OPT + endif + +$(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)/%.o: %.c + ifdef VARIANT + $(COMPILE.c) -o $@ $< + @$(CC) -xM1 $(CPPFLAGS) $< 2> /dev/null | \ + sed -e '/:[ ]*[/]/d' -e 's!$*\.o!$(dir $@)&!g' | \ + sort | uniq > $(@:.o=.d) + else + $(MAKE) $@ VARIANT=DBG + endif + +$(OBJDIR_NAME)/$(ARCH)/$(TSOBJDIR)/%.o: %.cpp + $(COMPILE.cc) -o $@ $< + +$(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)/%.o: %.cpp + $(COMPILE.cc) -o $@ $< + +$(OBJDIR_NAME)/$(ARCH)/$(TSOBJDIR)/%.o: %.s + $(COMPILE.s) -o $@ $< + +$(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)/%.o: %.s + $(COMPILE.s) -o $@ $< + +# +# Special targets and dependencies +# +opcodes.h: $(SHARE_SRC)/javavm/include/opcodes.list + @echo "Creating $@ ... " + @rm -f $@ + @awk 'BEGIN {print "typedef enum {" } \ + /^[a-z]/ {printf(" opc_%s = %d,\n", $$1, i++); } \ + END {printf(" opc_first_unused_index = %d,\n", i++); \ + print " opc_software = 254,"; \ + print " opc_hardware = 255"; \ + print "} opcode_type;"; \ + }' \ + $(SHARE_SRC)/javavm/include/opcodes.list > $@ + @chmod 444 $@ + +opcodes.init: $(SHARE_SRC)/javavm/include/opcodes.list + @echo "Creating $@ ... " + @rm -f $@ + @awk 'BEGIN { print "char *opnames[256] = {" } \ + /^[a-z]/ { printf(" \"%s\",\n", $$1); i++; } \ + END { while(i++ < 254) print " \"??\","; \ + print " \"software\","; \ + print " \"hardware\","; \ + print "};" \ + }' \ + $(SHARE_SRC)/javavm/include/opcodes.list > $@ + @chmod 444 $@ + +opcodes.c: $(SHARE_SRC)/javavm/include/opcodes.list + @echo "Creating $@ ... " + @rm -f $@ + @awk 'BEGIN { \ + print "#if defined(TRACING) || defined(STATISTICS)"; \ + print "char *opnames[256] = {"; \ + } \ + /^[a-z]/ { printf(" \"%s\",\n", $$1); i++; } \ + END { \ + while(i++ < 254) \ + print " \"??\","; \ + print " \"software\","; \ + print " \"hardware\","; \ + print "};"; \ + print "#else "; \ + print "char *opnames[1];"; \ + print "#endif"; \ + } \ + ' \ + $(SHARE_SRC)/javavm/include/opcodes.list > $@ + @chmod 444 $@ + +opcodes.length: $(SHARE_SRC)/javavm/include/opcodes.list + @echo "Creating $@ ... " + @rm -f $@ + @awk 'BEGIN { print "short opcode_length[256] = {" } \ + /^[a-z]/ { printf(" %s,\t\t/* %s */\n", $$2, $$1); i++; } \ + END { while(i++ < 256) print " -1,"; print "};" }' \ + $(SHARE_SRC)/javavm/include/opcodes.list > $@ + @chmod 444 $@ + +opcodes.in_out: $(SHARE_SRC)/javavm/include/opcodes.list + @echo "Creating $@ ... " + @rm -f $@ + @awk 'BEGIN { print "char *opcode_in_out[][2] = {" } \ + /^[a-z]/ { if ($$3 == "-") $$3 = ""; \ + if ($$4 == "-") $$4 = ""; \ + printf(" {\"%s\", \"%s\"}, \t\t/* %s */\n", \ + $$3, $$4, $$1); } \ + END { print "};" }' \ + $(SHARE_SRC)/javavm/include/opcodes.list > $@ + @chmod 444 $@ + +clobber :: clean + +FORCE: ; + +.PHONY : .delete.classlist classes .compile.classlist clean clobber + +debug: + $(MAKE) $(DEBUG) VARIANT=DBG + +optimized: + $(MAKE) $(OPTIMIZED) VARIANT=OPT +
diff --git a/build/solaris/makefiles/Subdirs.gmk b/build/solaris/makefiles/Subdirs.gmk new file mode 100644 index 0000000..cb8f954 --- /dev/null +++ b/build/solaris/makefiles/Subdirs.gmk
@@ -0,0 +1,11 @@ +# +# @(#)Subdirs.gmk 1.1 97/10/22 +# +# Generic rule to recurse. +# +all clean clobber project :: + @for i in $(SUBDIRS) ; do \ + echo ">>>Recursively making "$$i" "$@"..."; \ + cd $$i; $(MAKE) $@ RELEASE=$(RELEASE) || exit 1; cd ..; \ + echo "<<<Finished Recursively making "$$i" "$@"." ; \ + done
diff --git a/build/solaris/makefiles/Wrapper.gmk b/build/solaris/makefiles/Wrapper.gmk new file mode 100644 index 0000000..56d21ae --- /dev/null +++ b/build/solaris/makefiles/Wrapper.gmk
@@ -0,0 +1,61 @@ +# @(#)Wrapper.gmk 1.1 97/09/07 +# +# Wrapper installation rules for tools that invoke java with a +# classname (eg: javac, javakey). + + +# Usage: +# Include this file in your makefile and set PROG_SH to be the +# tool(s) name(s). The tool should live in +# src/$(PLATFORM)/bin/tool.sh. For instance: +# +# include $(TOPDIR)/build/$(PLATFORM)/makefiles/Wrapper.gmk +# PROG_SH = javakey javakey_g +# +# Note that multiple scripts can be installed. + + +include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk + +# +# PROG_SH_* variables point to locations of the: +# (a) script in the distribution/build (DEST), +# (b) dirname for DEST (namely DESTDIR), +# (c) script in its source form (SRC), and +# (d) symlink so the tool could use .java_wrapper (LINK). +# +PROG_SH_DESTDIR = $(BINDIR)/$(ARCH)/$(TSOBJDIR) +PROG_SH_DEST = $(PROG_SH:%=$(PROG_SH_DESTDIR)/%) +PROG_SH_SRC = $(PROG_SH:%=$(PLATFORM_SRC)/bin/%.sh) +PROG_SH_LINK = $(PROG_SH:%=$(BINDIR)/%) + +$(PROG_SH_DESTDIR)/%: $(PLATFORM_SRC)/bin/%.sh + @mkdir -p $(BINDIR) + rm -f $@ + cp $< $@ + chmod +x $@ + +$(PROG_SH_LINK): $(BINDIR)/.java_wrapper + rm -f $(PROG_SH_LINK) + cd $(BINDIR) ; \ + for i in $(PROG_SH) ; do \ + ln -s .java_wrapper $$i ; \ + done + +$(BINDIR)/.java_wrapper: $(PLATFORM_SRC)/bin/java_wrapper.sh \ + $(PROG_SH_DESTDIR)/.extract_args + @mkdir -p $(BINDIR) + rm -f $(BINDIR)/.java_wrapper + cp $(PLATFORM_SRC)/bin/java_wrapper.sh $(BINDIR)/.java_wrapper + chmod +x $(BINDIR)/.java_wrapper + +$(PROG_SH_DESTDIR)/.extract_args: $(PLATFORM_SRC)/bin/extract_args.sh + @mkdir -p $(PROG_SH_DESTDIR) + rm -f $(PROG_SH_DESTDIR)/.extract_args + cp $(PLATFORM_SRC)/bin/extract_args.sh $(PROG_SH_DESTDIR)/.extract_args + +all install: $(PROG_SH_DEST) $(PROG_SH_LINK) + +clean clobber:: + rm -f $(PROG_SH_DEST) $(PROG_SH_LINK) +
diff --git a/build/solaris/makefiles/mkproject b/build/solaris/makefiles/mkproject new file mode 100644 index 0000000..f09471a --- /dev/null +++ b/build/solaris/makefiles/mkproject
@@ -0,0 +1,140 @@ +#!/bin/sh +# +# @(#)mkproject 1.4 97/11/26 +# +# Copyright (c) 1997 by Sun Microsystems, Inc. +# All rights reserved. +# +# mkproject - make a Java Workshop project file +# +USAGE='mkproject [-d classdir] [-p classpath] [-s subdirs] [-c compiler-opts] + [-j java-opts] [-m main-class] files ...' +# +CLASSDIR=classes +CLASSPATH= +SUBDIRS= +JAVACFLAGS=-g +JAVAFLAGS= +MAIN= +while getopts d:p:s:c:j:m: i +do + case $i in + d) CLASSDIR="$OPTARG";; + p) CLASSPATH="$OPTARG";; + s) SUBDIRS="$OPTARG";; + c) JAVACFLAGS="$OPTARG";; + j) JAVAFLAGS="$OPTARG";; + m) MAIN="$OPTARG";; + '?') echo "$USAGE"; exit 2;; + esac +done +shift `expr $OPTIND - 1` +echo sun.jws.version.2 +if [ -n "$MAIN" ] +then + PACKAGE=`expr $MAIN : '\(.*\)\..*'` + CLASS=`expr $MAIN : '.*\.\(.*\)'` + cat <<-EOF + sun.jws.package=$PACKAGE + sun.jws.classname=$CLASS + sun.jws.type=standalone + EOF +else + echo sun.jws.type=package +fi +cat <<EOF +sun.jws.useVisual=false +sun.jws.classdir=$CLASSDIR +sun.jws.options=$JAVACFLAGS +EOF +if [ -n "$MAIN" ] +then + echo "sun.jws.javaArguments=$JAVAFLAGS" + # + # Put out the sourcepath, eliminating duplicates and anything + # that doesn't look like a source directory. + # + echo sun.jws.sourcepath=List + oldIFS=$IFS + IFS=: + for i in $CLASSPATH + do + echo $i + done | \ + awk ' + /\/src\// { if (!seen[$1]) { + print; + seen[$1] = 1; + } + } + ' + IFS=$oldIFS + echo EndOfList +fi +# +# Put out the CLASSPATH, eliminating duplicates and anything that looks +# like the JDK or JRE. +# +echo sun.jws.classpath=List +oldIFS=$IFS +IFS=: +for i in $CLASSPATH +do + echo $i +done | \ +awk ' + /^\/.*\/java\/lib\/classes\.zip$/ { next; } + /^\/.*\/solaris\/lib\/classes\.zip$/ { next; } + /^\/.*\/jre\/lib\/rt\.jar$/ { next; } + { if (!seen[$1]) { + print; + seen[$1] = 1; + } + } +' +IFS=$oldIFS +echo EndOfList +# +# If any subdirectories, put out references to sub-projects. +# +if [ -n "$SUBDIRS" ] +then + echo sun.jws.includes=List + for i in $SUBDIRS + do + case $i in + tests) ;; # skip + */*) echo $i.prj;; + *) echo $i/$i.prj;; + esac + done + echo EndOfList +fi +# +# If any files, list them. +# +if [ $# -gt 0 ] +then + echo sun.jws.files=List + for i + do + echo $i + done + echo EndOfList +elif [ -n "$MAIN" ] +then + echo sun.jws.files=List + MAIN_src=`echo "$MAIN" | sed -e 's:\.:/:g'`.java + oldIFS=$IFS + IFS=: + for i in $CLASSPATH + do + if [ -f $i/$MAIN_src ] + then + echo $i/$MAIN_src + break + fi + done + IFS=$oldIFS + echo EndOfList +fi
diff --git a/build/solaris/scslize b/build/solaris/scslize new file mode 100644 index 0000000..316ecdb --- /dev/null +++ b/build/solaris/scslize
@@ -0,0 +1,28 @@ +#!/bin/sh +# +# @(#)scslize 1.1 02/04/02 +# +# A shell script to modify a workspace to make it suitable +# for the SCSL release of the source. We get rid of lots +# of internal-only tests and stuff. +# +# First, remove permission for anyone to putback this workspace. +# +cd $CODEMGR_WS +ed - Codemgr_wsdata/access_control <<'EOF' +/^putback-from/c +putback-from - +. +w +q +EOF +# +# Next, remove the files that don't belong here. +# +workspace filerm \ + tests \ + src/share/classes/javasoft \ + src/share/classes/test \ + src/share/doc/spec \ + build/precompile.jtx \ + build/solaris/scslize
diff --git a/build/solaris/siggen b/build/solaris/siggen new file mode 100644 index 0000000..9429339 --- /dev/null +++ b/build/solaris/siggen
@@ -0,0 +1,16 @@ +#!/bin/sh +# +# @(#)siggen 1.5 04/07/13 +# +# Generate a new signature file. +# +# Usage: siggen -in mail.jar -package javax -out mail.sig +# +#CLASSPATH=/java/re/jct-tools/2.1.6/archive/fcs/binaries/apiCheck.jar +# newer version... +CLASSPATH=/java/re/jct-tools/3.1.4/archive/fcs/binaries/lib/apiCheck.jar +JAVA_HOME=/java/re/jdk/1.3.1/archive/fcs/binaries/solsparc +export CLASSPATH JAVA_HOME +#${JAVA_HOME}/bin/java javasoft.sqe.apiCheck.Setup "$@" +# options used by CTS... +${JAVA_HOME}/bin/java javasoft.sqe.apiCheck.Setup -xpriv -constvalues "$@"
diff --git a/build/solaris/sigtest b/build/solaris/sigtest new file mode 100644 index 0000000..984ab9d --- /dev/null +++ b/build/solaris/sigtest
@@ -0,0 +1,15 @@ +#!/bin/sh +# +# @(#)sigtest 1.5 04/07/13 +# +# Compare API against a signature file. +# +# Usage: sigtest -base mail.sig -test mail.jar -package javax +# -out report.out -updateout update.out +# +#CLASSPATH=/java/re/jct-tools/2.1.6/archive/fcs/binaries/apiCheck.jar +# newer version... +CLASSPATH=/java/re/jct-tools/3.1.4/archive/fcs/binaries/lib/apiCheck.jar +JAVA_HOME=/java/re/jdk/1.3.1/archive/fcs/binaries/solsparc +export CLASSPATH JAVA_HOME +${JAVA_HOME}/bin/java javasoft.sqe.apiCheck.Diff "$@"
diff --git a/build/win32/Makefile b/build/win32/Makefile new file mode 100644 index 0000000..976703f --- /dev/null +++ b/build/win32/Makefile
@@ -0,0 +1,115 @@ +# +# VERSION @(#)Makefile 1.6 97/10/28 +# + +PLATFORM = win32 +PACKAGE = javax.activation +PRODUCT = sun + +# +# important locations +# +TOPDIR = ..\.. +BUILD_DIR = $(TOPDIR)\build +PLATFORM_DIR = $(BUILD_DIR)\$(PLATFORM) +CLASS_DIR = $(PLATFORM_DIR)\classes +SRC_DIR = $(TOPDIR)\src\classes +LIB_DIR = $(PLATFORM_DIR)\lib +META_INF_DIR = $(PLATFORM_DIR)\classes\META-INF +SRC_LIB_DIR = $(TOPDIR)\src\lib + +# +# Set JAVA_HOME to _JAVA_HOME if JDK_HOME isn't set. Otherwise, set +# it to JDK_HOME +# +_JAVA_HOME = C:\jdk +!IF "$(JDK_HOME)" == "" +JAVA_HOME = $(_JAVA_HOME) +!ELSE +JAVA_HOME = $(JDK_HOME) +!ENDIF + +!if "$(OS)" == "Windows_NT" +DEL = del/f/q +DELTREE = rmdir/s/q +!else +DEL = deltree/y +DELTREE = deltree/y +!endif + +# +# the commands to build with +# +JAVA = $(JAVA_HOME)\bin\java +JAVAC = $(JAVA_HOME)\bin\javac -J-mx32m +JAVADOC = $(JAVA_HOME)\bin\javadoc +STDCLASSPATH = $(JAVA_HOME)\classes;$(JAVA_HOME)\lib\classes.zip + +# +# define the variables that specify the source files and class files +# +!include $(BUILD_DIR)\classes.mk + +# +# the targets +# +jaf: classesdir $(JAVAX_CLASSES_LIST) $(COM_SUN_CLASSES_LIST) + @echo Jarring... + @md $(LIB_DIR) + @md $(META_INF_DIR) + @xcopy /f $(SRC_LIB_DIR)\mailcap $(META_INF_DIR) + @xcopy /f $(SRC_LIB_DIR)\mimetypes $(META_INF_DIR) + @cd $(CLASS_DIR) + + @jar cf ..\lib\jaf.jar javax com META-INF + @cd .. + +test: classesdir $(TEST_CLASSES_LIST) + +classesdir: + @md $(CLASS_DIR) + +all: jaf test + +demo: jaf $(DEMO_CLASSES_LIST) + +javahome: + @echo JAVA_HOME is $(JAVA_HOME) + @$(JAVA) -fullversion + +clean: + @echo Cleaning... + @$(DELTREE) $(CLASS_DIR) + @$(DELTREE) $(LIB_DIR) + +# +# Build rules for converting .java files into .class files +# we have to define implicit rules for each directory since boneheaded +# nmake doesn't support static pattern rules =( +# +.SUFFIXES: .java .class + +{$(SRC_DIR)\javax\activation}.java{$(CLASS_DIR)\javax\activation}.class : + @echo Compiling $<... + @$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $< + @echo ----------------------- + +{$(SRC_DIR)\com\sun\activation\registries}.java{$(CLASS_DIR)\com\sun\activation\registries}.class : + @echo Compiling $<... + @$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $< + @echo ----------------------- + +{$(SRC_DIR)\com\sun\activation\viewers}.java{$(CLASS_DIR)\com\sun\activation\viewers}.class : + @echo Compiling $<... + @$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $< + @echo ----------------------- + +{$(SRC_DIR)\com\sun\activation\mime}.java{$(CLASS_DIR)\com\sun\activation\mime}.class : + @echo Compiling $<... + @$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $< + @echo ----------------------- + +{$(SRC_DIR)\test}.java{$(CLASS_DIR)\test}.class : + @echo Compiling $<... + @$(JAVAC) -d $(CLASS_DIR) -classpath $(CLASS_DIR);$(STDCLASSPATH);$(SRC_DIR) $< + @echo -----------------------
diff --git a/src/share/classes/com/sun/activation/registries/LogSupport.java b/src/share/classes/com/sun/activation/registries/LogSupport.java new file mode 100644 index 0000000..fe7aa71 --- /dev/null +++ b/src/share/classes/com/sun/activation/registries/LogSupport.java
@@ -0,0 +1,85 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)LogSupport.java 1.5 07/05/14 + */ + +package com.sun.activation.registries; + +import java.io.*; +import java.util.logging.*; + +/** + * Logging related methods. + */ +public class LogSupport { + private static boolean debug = false; + private static Logger logger; + private static final Level level = Level.FINE; + + static { + try { + debug = Boolean.getBoolean("javax.activation.debug"); + } catch (Throwable t) { + // ignore any errors + } + logger = Logger.getLogger("javax.activation"); + } + + /** + * Constructor. + */ + private LogSupport() { + // private constructor, can't create instances + } + + public static void log(String msg) { + if (debug) + System.out.println(msg); + logger.log(level, msg); + } + + public static void log(String msg, Throwable t) { + if (debug) + System.out.println(msg + "; Exception: " + t); + logger.log(level, msg, t); + } + + public static boolean isLoggable() { + return debug || logger.isLoggable(level); + } +}
diff --git a/src/share/classes/com/sun/activation/registries/MailcapFile.java b/src/share/classes/com/sun/activation/registries/MailcapFile.java new file mode 100644 index 0000000..5c31005 --- /dev/null +++ b/src/share/classes/com/sun/activation/registries/MailcapFile.java
@@ -0,0 +1,578 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)MailcapFile.java 1.25 07/05/14 + */ + +package com.sun.activation.registries; + +import java.io.*; +import java.util.*; + +public class MailcapFile { + + /** + * A Map indexed by MIME type (string) that references + * a Map of commands for each type. The comand Map + * is indexed by the command name and references a List of + * class names (strings) for each command. + */ + private Map type_hash = new HashMap(); + + /** + * Another Map like above, but for fallback entries. + */ + private Map fallback_hash = new HashMap(); + + /** + * A Map indexed by MIME type (string) that references + * a List of native commands (string) corresponding to the type. + */ + private Map native_commands = new HashMap(); + + private static boolean addReverse = false; + + static { + try { + addReverse = Boolean.getBoolean("javax.activation.addreverse"); + } catch (Throwable t) { + // ignore any errors + } + } + + /** + * The constructor that takes a filename as an argument. + * + * @param new_fname The file name of the mailcap file. + */ + public MailcapFile(String new_fname) throws IOException { + if (LogSupport.isLoggable()) + LogSupport.log("new MailcapFile: file " + new_fname); + FileReader reader = null; + try { + reader = new FileReader(new_fname); + parse(new BufferedReader(reader)); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException ex) { } + } + } + } + + /** + * The constructor that takes an input stream as an argument. + * + * @param is the input stream + */ + public MailcapFile(InputStream is) throws IOException { + if (LogSupport.isLoggable()) + LogSupport.log("new MailcapFile: InputStream"); + parse(new BufferedReader(new InputStreamReader(is, "iso-8859-1"))); + } + + /** + * Mailcap file default constructor. + */ + public MailcapFile() { + if (LogSupport.isLoggable()) + LogSupport.log("new MailcapFile: default"); + } + + /** + * Get the Map of MailcapEntries based on the MIME type. + * + * <p> + * <strong>Semantics:</strong> First check for the literal mime type, + * if that fails looks for wildcard <type>/\* and return that. Return the + * list of all that hit. + */ + public Map getMailcapList(String mime_type) { + Map search_result = null; + Map wildcard_result = null; + + // first try the literal + search_result = (Map)type_hash.get(mime_type); + + // ok, now try the wildcard + int separator = mime_type.indexOf('/'); + String subtype = mime_type.substring(separator + 1); + if (!subtype.equals("*")) { + String type = mime_type.substring(0, separator + 1) + "*"; + wildcard_result = (Map)type_hash.get(type); + + if (wildcard_result != null) { // damn, we have to merge!!! + if (search_result != null) + search_result = + mergeResults(search_result, wildcard_result); + else + search_result = wildcard_result; + } + } + return search_result; + } + + /** + * Get the Map of fallback MailcapEntries based on the MIME type. + * + * <p> + * <strong>Semantics:</strong> First check for the literal mime type, + * if that fails looks for wildcard <type>/\* and return that. Return the + * list of all that hit. + */ + public Map getMailcapFallbackList(String mime_type) { + Map search_result = null; + Map wildcard_result = null; + + // first try the literal + search_result = (Map)fallback_hash.get(mime_type); + + // ok, now try the wildcard + int separator = mime_type.indexOf('/'); + String subtype = mime_type.substring(separator + 1); + if (!subtype.equals("*")) { + String type = mime_type.substring(0, separator + 1) + "*"; + wildcard_result = (Map)fallback_hash.get(type); + + if (wildcard_result != null) { // damn, we have to merge!!! + if (search_result != null) + search_result = + mergeResults(search_result, wildcard_result); + else + search_result = wildcard_result; + } + } + return search_result; + } + + /** + * Return all the MIME types known to this mailcap file. + */ + public String[] getMimeTypes() { + Set types = new HashSet(type_hash.keySet()); + types.addAll(fallback_hash.keySet()); + types.addAll(native_commands.keySet()); + String[] mts = new String[types.size()]; + mts = (String[])types.toArray(mts); + return mts; + } + + /** + * Return all the native comands for the given MIME type. + */ + public String[] getNativeCommands(String mime_type) { + String[] cmds = null; + List v = + (List)native_commands.get(mime_type.toLowerCase(Locale.ENGLISH)); + if (v != null) { + cmds = new String[v.size()]; + cmds = (String[])v.toArray(cmds); + } + return cmds; + } + + /** + * Merge the first hash into the second. + * This merge will only effect the hashtable that is + * returned, we don't want to touch the one passed in since + * its integrity must be maintained. + */ + private Map mergeResults(Map first, Map second) { + Iterator verb_enum = second.keySet().iterator(); + Map clonedHash = new HashMap(first); + + // iterate through the verbs in the second map + while (verb_enum.hasNext()) { + String verb = (String)verb_enum.next(); + List cmdVector = (List)clonedHash.get(verb); + if (cmdVector == null) { + clonedHash.put(verb, second.get(verb)); + } else { + // merge the two + List oldV = (List)second.get(verb); + cmdVector = new ArrayList(cmdVector); + cmdVector.addAll(oldV); + clonedHash.put(verb, cmdVector); + } + } + return clonedHash; + } + + /** + * appendToMailcap: Append to this Mailcap DB, use the mailcap + * format: + * Comment == "# <i>comment string</i> + * Entry == "mimetype; javabeanclass<nl> + * + * Example: + * # this is a comment + * image/gif jaf.viewers.ImageViewer + */ + public void appendToMailcap(String mail_cap) { + if (LogSupport.isLoggable()) + LogSupport.log("appendToMailcap: " + mail_cap); + try { + parse(new StringReader(mail_cap)); + } catch (IOException ex) { + // can't happen + } + } + + /** + * parse file into a hash table of MC Type Entry Obj + */ + private void parse(Reader reader) throws IOException { + BufferedReader buf_reader = new BufferedReader(reader); + String line = null; + String continued = null; + + while ((line = buf_reader.readLine()) != null) { + // LogSupport.log("parsing line: " + line); + + line = line.trim(); + + try { + if (line.charAt(0) == '#') + continue; + if (line.charAt(line.length() - 1) == '\\') { + if (continued != null) + continued += line.substring(0, line.length() - 1); + else + continued = line.substring(0, line.length() - 1); + } else if (continued != null) { + // handle the two strings + continued = continued + line; + // LogSupport.log("parse: " + continued); + try { + parseLine(continued); + } catch (MailcapParseException e) { + //e.printStackTrace(); + } + continued = null; + } + else { + // LogSupport.log("parse: " + line); + try { + parseLine(line); + // LogSupport.log("hash.size = " + type_hash.size()); + } catch (MailcapParseException e) { + //e.printStackTrace(); + } + } + } catch (StringIndexOutOfBoundsException e) {} + } + } + + /** + * A routine to parse individual entries in a Mailcap file. + * + * Note that this routine does not handle line continuations. + * They should have been handled prior to calling this routine. + */ + protected void parseLine(String mailcapEntry) + throws MailcapParseException, IOException { + MailcapTokenizer tokenizer = new MailcapTokenizer(mailcapEntry); + tokenizer.setIsAutoquoting(false); + + if (LogSupport.isLoggable()) + LogSupport.log("parse: " + mailcapEntry); + // parse the primary type + int currentToken = tokenizer.nextToken(); + if (currentToken != MailcapTokenizer.STRING_TOKEN) { + reportParseError(MailcapTokenizer.STRING_TOKEN, currentToken, + tokenizer.getCurrentTokenValue()); + } + String primaryType = + tokenizer.getCurrentTokenValue().toLowerCase(Locale.ENGLISH); + String subType = "*"; + + // parse the '/' between primary and sub + // if it's not present that's ok, we just don't have a subtype + currentToken = tokenizer.nextToken(); + if ((currentToken != MailcapTokenizer.SLASH_TOKEN) && + (currentToken != MailcapTokenizer.SEMICOLON_TOKEN)) { + reportParseError(MailcapTokenizer.SLASH_TOKEN, + MailcapTokenizer.SEMICOLON_TOKEN, currentToken, + tokenizer.getCurrentTokenValue()); + } + + // only need to look for a sub type if we got a '/' + if (currentToken == MailcapTokenizer.SLASH_TOKEN) { + // parse the sub type + currentToken = tokenizer.nextToken(); + if (currentToken != MailcapTokenizer.STRING_TOKEN) { + reportParseError(MailcapTokenizer.STRING_TOKEN, + currentToken, tokenizer.getCurrentTokenValue()); + } + subType = + tokenizer.getCurrentTokenValue().toLowerCase(Locale.ENGLISH); + + // get the next token to simplify the next step + currentToken = tokenizer.nextToken(); + } + + String mimeType = primaryType + "/" + subType; + + if (LogSupport.isLoggable()) + LogSupport.log(" Type: " + mimeType); + + // now setup the commands hashtable + Map commands = new LinkedHashMap(); // keep commands in order found + + // parse the ';' that separates the type from the parameters + if (currentToken != MailcapTokenizer.SEMICOLON_TOKEN) { + reportParseError(MailcapTokenizer.SEMICOLON_TOKEN, + currentToken, tokenizer.getCurrentTokenValue()); + } + // eat it + + // parse the required view command + tokenizer.setIsAutoquoting(true); + currentToken = tokenizer.nextToken(); + tokenizer.setIsAutoquoting(false); + if ((currentToken != MailcapTokenizer.STRING_TOKEN) && + (currentToken != MailcapTokenizer.SEMICOLON_TOKEN)) { + reportParseError(MailcapTokenizer.STRING_TOKEN, + MailcapTokenizer.SEMICOLON_TOKEN, currentToken, + tokenizer.getCurrentTokenValue()); + } + + if (currentToken == MailcapTokenizer.STRING_TOKEN) { + // have a native comand, save the entire mailcap entry + //String nativeCommand = tokenizer.getCurrentTokenValue(); + List v = (List)native_commands.get(mimeType); + if (v == null) { + v = new ArrayList(); + v.add(mailcapEntry); + native_commands.put(mimeType, v); + } else { + // XXX - check for duplicates? + v.add(mailcapEntry); + } + } + + // only have to get the next token if the current one isn't a ';' + if (currentToken != MailcapTokenizer.SEMICOLON_TOKEN) { + currentToken = tokenizer.nextToken(); + } + + // look for a ';' which will indicate whether + // a parameter list is present or not + if (currentToken == MailcapTokenizer.SEMICOLON_TOKEN) { + boolean isFallback = false; + do { + // eat the ';' + + // parse the parameter name + currentToken = tokenizer.nextToken(); + if (currentToken != MailcapTokenizer.STRING_TOKEN) { + reportParseError(MailcapTokenizer.STRING_TOKEN, + currentToken, tokenizer.getCurrentTokenValue()); + } + String paramName = tokenizer.getCurrentTokenValue(). + toLowerCase(Locale.ENGLISH); + + // parse the '=' which separates the name from the value + currentToken = tokenizer.nextToken(); + if ((currentToken != MailcapTokenizer.EQUALS_TOKEN) && + (currentToken != MailcapTokenizer.SEMICOLON_TOKEN) && + (currentToken != MailcapTokenizer.EOI_TOKEN)) { + reportParseError(MailcapTokenizer.EQUALS_TOKEN, + MailcapTokenizer.SEMICOLON_TOKEN, + MailcapTokenizer.EOI_TOKEN, + currentToken, tokenizer.getCurrentTokenValue()); + } + + // we only have a useful command if it is named + if (currentToken == MailcapTokenizer.EQUALS_TOKEN) { + // eat it + + // parse the parameter value (which is autoquoted) + tokenizer.setIsAutoquoting(true); + currentToken = tokenizer.nextToken(); + tokenizer.setIsAutoquoting(false); + if (currentToken != MailcapTokenizer.STRING_TOKEN) { + reportParseError(MailcapTokenizer.STRING_TOKEN, + currentToken, tokenizer.getCurrentTokenValue()); + } + String paramValue = + tokenizer.getCurrentTokenValue(); + + // add the class to the list iff it is one we care about + if (paramName.startsWith("x-java-")) { + String commandName = paramName.substring(7); + // 7 == "x-java-".length + + if (commandName.equals("fallback-entry") && + paramValue.equalsIgnoreCase("true")) { + isFallback = true; + } else { + + // setup the class entry list + if (LogSupport.isLoggable()) + LogSupport.log(" Command: " + commandName + + ", Class: " + paramValue); + List classes = (List)commands.get(commandName); + if (classes == null) { + classes = new ArrayList(); + commands.put(commandName, classes); + } + if (addReverse) + classes.add(0, paramValue); + else + classes.add(paramValue); + } + } + + // set up the next iteration + currentToken = tokenizer.nextToken(); + } + } while (currentToken == MailcapTokenizer.SEMICOLON_TOKEN); + + Map masterHash = isFallback ? fallback_hash : type_hash; + Map curcommands = + (Map)masterHash.get(mimeType); + if (curcommands == null) { + masterHash.put(mimeType, commands); + } else { + if (LogSupport.isLoggable()) + LogSupport.log("Merging commands for type " + mimeType); + // have to merge current and new commands + // first, merge list of classes for commands already known + Iterator cn = curcommands.keySet().iterator(); + while (cn.hasNext()) { + String cmdName = (String)cn.next(); + List ccv = (List)curcommands.get(cmdName); + List cv = (List)commands.get(cmdName); + if (cv == null) + continue; + // add everything in cv to ccv, if it's not already there + Iterator cvn = cv.iterator(); + while (cvn.hasNext()) { + String clazz = (String)cvn.next(); + if (!ccv.contains(clazz)) + if (addReverse) + ccv.add(0, clazz); + else + ccv.add(clazz); + } + } + // now, add commands not previously known + cn = commands.keySet().iterator(); + while (cn.hasNext()) { + String cmdName = (String)cn.next(); + if (curcommands.containsKey(cmdName)) + continue; + List cv = (List)commands.get(cmdName); + curcommands.put(cmdName, cv); + } + } + } else if (currentToken != MailcapTokenizer.EOI_TOKEN) { + reportParseError(MailcapTokenizer.EOI_TOKEN, + MailcapTokenizer.SEMICOLON_TOKEN, + currentToken, tokenizer.getCurrentTokenValue()); + } + } + + protected static void reportParseError(int expectedToken, int actualToken, + String actualTokenValue) throws MailcapParseException { + throw new MailcapParseException("Encountered a " + + MailcapTokenizer.nameForToken(actualToken) + " token (" + + actualTokenValue + ") while expecting a " + + MailcapTokenizer.nameForToken(expectedToken) + " token."); + } + + protected static void reportParseError(int expectedToken, + int otherExpectedToken, int actualToken, String actualTokenValue) + throws MailcapParseException { + throw new MailcapParseException("Encountered a " + + MailcapTokenizer.nameForToken(actualToken) + " token (" + + actualTokenValue + ") while expecting a " + + MailcapTokenizer.nameForToken(expectedToken) + " or a " + + MailcapTokenizer.nameForToken(otherExpectedToken) + " token."); + } + + protected static void reportParseError(int expectedToken, + int otherExpectedToken, int anotherExpectedToken, int actualToken, + String actualTokenValue) throws MailcapParseException { + if (LogSupport.isLoggable()) + LogSupport.log("PARSE ERROR: " + "Encountered a " + + MailcapTokenizer.nameForToken(actualToken) + " token (" + + actualTokenValue + ") while expecting a " + + MailcapTokenizer.nameForToken(expectedToken) + ", a " + + MailcapTokenizer.nameForToken(otherExpectedToken) + ", or a " + + MailcapTokenizer.nameForToken(anotherExpectedToken) + " token."); + throw new MailcapParseException("Encountered a " + + MailcapTokenizer.nameForToken(actualToken) + " token (" + + actualTokenValue + ") while expecting a " + + MailcapTokenizer.nameForToken(expectedToken) + ", a " + + MailcapTokenizer.nameForToken(otherExpectedToken) + ", or a " + + MailcapTokenizer.nameForToken(anotherExpectedToken) + " token."); + } + + /** for debugging + public static void main(String[] args) throws Exception { + Map masterHash = new HashMap(); + for (int i = 0; i < args.length; ++i) { + System.out.println("Entry " + i + ": " + args[i]); + parseLine(args[i], masterHash); + } + + Enumeration types = masterHash.keys(); + while (types.hasMoreElements()) { + String key = (String)types.nextElement(); + System.out.println("MIME Type: " + key); + + Map commandHash = (Map)masterHash.get(key); + Enumeration commands = commandHash.keys(); + while (commands.hasMoreElements()) { + String command = (String)commands.nextElement(); + System.out.println(" Command: " + command); + + Vector classes = (Vector)commandHash.get(command); + for (int i = 0; i < classes.size(); ++i) { + System.out.println(" Class: " + + (String)classes.elementAt(i)); + } + } + + System.out.println(""); + } + } + */ +}
diff --git a/src/share/classes/com/sun/activation/registries/MailcapParseException.java b/src/share/classes/com/sun/activation/registries/MailcapParseException.java new file mode 100644 index 0000000..9092c11 --- /dev/null +++ b/src/share/classes/com/sun/activation/registries/MailcapParseException.java
@@ -0,0 +1,55 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)MailcapParseException.java 1.5 07/05/14 + */ + +package com.sun.activation.registries; + +/** + * A class to encapsulate Mailcap parsing related exceptions + */ +public class MailcapParseException extends Exception { + + public MailcapParseException() { + super(); + } + + public MailcapParseException(String inInfo) { + super(inInfo); + } +}
diff --git a/src/share/classes/com/sun/activation/registries/MailcapTokenizer.java b/src/share/classes/com/sun/activation/registries/MailcapTokenizer.java new file mode 100644 index 0000000..01631f8 --- /dev/null +++ b/src/share/classes/com/sun/activation/registries/MailcapTokenizer.java
@@ -0,0 +1,337 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)MailcapTokenizer.java 1.8 07/05/14 + */ + +package com.sun.activation.registries; + +/** + * A tokenizer for strings in the form of "foo/bar; prop1=val1; ... ". + * Useful for parsing MIME content types. + */ +public class MailcapTokenizer { + + public static final int UNKNOWN_TOKEN = 0; + public static final int START_TOKEN = 1; + public static final int STRING_TOKEN = 2; + public static final int EOI_TOKEN = 5; + public static final int SLASH_TOKEN = '/'; + public static final int SEMICOLON_TOKEN = ';'; + public static final int EQUALS_TOKEN = '='; + + /** + * Constructor + * + * @parameter inputString the string to tokenize + */ + public MailcapTokenizer(String inputString) { + data = inputString; + dataIndex = 0; + dataLength = inputString.length(); + + currentToken = START_TOKEN; + currentTokenValue = ""; + + isAutoquoting = false; + autoquoteChar = ';'; + } + + /** + * Set whether auto-quoting is on or off. + * + * Auto-quoting means that all characters after the first + * non-whitespace, non-control character up to the auto-quote + * terminator character or EOI (minus any whitespace immediatley + * preceeding it) is considered a token. + * + * This is required for handling command strings in a mailcap entry. + */ + public void setIsAutoquoting(boolean value) { + isAutoquoting = value; + } + + /** + * Retrieve current token. + * + * @returns The current token value + */ + public int getCurrentToken() { + return currentToken; + } + + /* + * Get a String that describes the given token. + */ + public static String nameForToken(int token) { + String name = "really unknown"; + + switch(token) { + case UNKNOWN_TOKEN: + name = "unknown"; + break; + case START_TOKEN: + name = "start"; + break; + case STRING_TOKEN: + name = "string"; + break; + case EOI_TOKEN: + name = "EOI"; + break; + case SLASH_TOKEN: + name = "'/'"; + break; + case SEMICOLON_TOKEN: + name = "';'"; + break; + case EQUALS_TOKEN: + name = "'='"; + break; + } + + return name; + } + + /* + * Retrieve current token value. + * + * @returns A String containing the current token value + */ + public String getCurrentTokenValue() { + return currentTokenValue; + } + + /* + * Process the next token. + * + * @returns the next token + */ + public int nextToken() { + if (dataIndex < dataLength) { + // skip white space + while ((dataIndex < dataLength) && + (isWhiteSpaceChar(data.charAt(dataIndex)))) { + ++dataIndex; + } + + if (dataIndex < dataLength) { + // examine the current character and see what kind of token we have + char c = data.charAt(dataIndex); + if (isAutoquoting) { + if (c == ';' || c == '=') { + currentToken = c; + currentTokenValue = new Character(c).toString(); + ++dataIndex; + } else { + processAutoquoteToken(); + } + } else { + if (isStringTokenChar(c)) { + processStringToken(); + } else if ((c == '/') || (c == ';') || (c == '=')) { + currentToken = c; + currentTokenValue = new Character(c).toString(); + ++dataIndex; + } else { + currentToken = UNKNOWN_TOKEN; + currentTokenValue = new Character(c).toString(); + ++dataIndex; + } + } + } else { + currentToken = EOI_TOKEN; + currentTokenValue = null; + } + } else { + currentToken = EOI_TOKEN; + currentTokenValue = null; + } + + return currentToken; + } + + private void processStringToken() { + // capture the initial index + int initialIndex = dataIndex; + + // skip to 1st non string token character + while ((dataIndex < dataLength) && + isStringTokenChar(data.charAt(dataIndex))) { + ++dataIndex; + } + + currentToken = STRING_TOKEN; + currentTokenValue = data.substring(initialIndex, dataIndex); + } + + private void processAutoquoteToken() { + // capture the initial index + int initialIndex = dataIndex; + + // now skip to the 1st non-escaped autoquote termination character + // XXX - doesn't actually consider escaping + boolean foundTerminator = false; + while ((dataIndex < dataLength) && !foundTerminator) { + char c = data.charAt(dataIndex); + if (c != autoquoteChar) { + ++dataIndex; + } else { + foundTerminator = true; + } + } + + currentToken = STRING_TOKEN; + currentTokenValue = + fixEscapeSequences(data.substring(initialIndex, dataIndex)); + } + + private static boolean isSpecialChar(char c) { + boolean lAnswer = false; + + switch(c) { + case '(': + case ')': + case '<': + case '>': + case '@': + case ',': + case ';': + case ':': + case '\\': + case '"': + case '/': + case '[': + case ']': + case '?': + case '=': + lAnswer = true; + break; + } + + return lAnswer; + } + + private static boolean isControlChar(char c) { + return Character.isISOControl(c); + } + + private static boolean isWhiteSpaceChar(char c) { + return Character.isWhitespace(c); + } + + private static boolean isStringTokenChar(char c) { + return !isSpecialChar(c) && !isControlChar(c) && !isWhiteSpaceChar(c); + } + + private static String fixEscapeSequences(String inputString) { + int inputLength = inputString.length(); + StringBuffer buffer = new StringBuffer(); + buffer.ensureCapacity(inputLength); + + for (int i = 0; i < inputLength; ++i) { + char currentChar = inputString.charAt(i); + if (currentChar != '\\') { + buffer.append(currentChar); + } else { + if (i < inputLength - 1) { + char nextChar = inputString.charAt(i + 1); + buffer.append(nextChar); + + // force a skip over the next character too + ++i; + } else { + buffer.append(currentChar); + } + } + } + + return buffer.toString(); + } + + private String data; + private int dataIndex; + private int dataLength; + private int currentToken; + private String currentTokenValue; + private boolean isAutoquoting; + private char autoquoteChar; + + /* + public static void main(String[] args) { + for (int i = 0; i < args.length; ++i) { + MailcapTokenizer tokenizer = new MailcapTokenizer(args[i]); + + System.out.println("Original: |" + args[i] + "|"); + + int currentToken = tokenizer.nextToken(); + while (currentToken != EOI_TOKEN) { + switch(currentToken) { + case UNKNOWN_TOKEN: + System.out.println(" Unknown Token: |" + tokenizer.getCurrentTokenValue() + "|"); + break; + case START_TOKEN: + System.out.println(" Start Token: |" + tokenizer.getCurrentTokenValue() + "|"); + break; + case STRING_TOKEN: + System.out.println(" String Token: |" + tokenizer.getCurrentTokenValue() + "|"); + break; + case EOI_TOKEN: + System.out.println(" EOI Token: |" + tokenizer.getCurrentTokenValue() + "|"); + break; + case SLASH_TOKEN: + System.out.println(" Slash Token: |" + tokenizer.getCurrentTokenValue() + "|"); + break; + case SEMICOLON_TOKEN: + System.out.println(" Semicolon Token: |" + tokenizer.getCurrentTokenValue() + "|"); + break; + case EQUALS_TOKEN: + System.out.println(" Equals Token: |" + tokenizer.getCurrentTokenValue() + "|"); + break; + default: + System.out.println(" Really Unknown Token: |" + tokenizer.getCurrentTokenValue() + "|"); + break; + } + + currentToken = tokenizer.nextToken(); + } + + System.out.println(""); + } + } + */ +}
diff --git a/src/share/classes/com/sun/activation/registries/MimeTypeEntry.java b/src/share/classes/com/sun/activation/registries/MimeTypeEntry.java new file mode 100644 index 0000000..51fec2a --- /dev/null +++ b/src/share/classes/com/sun/activation/registries/MimeTypeEntry.java
@@ -0,0 +1,65 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)MimeTypeEntry.java 1.5 07/05/14 + */ + +package com.sun.activation.registries; + +import java.lang.*; + +public class MimeTypeEntry { + private String type; + private String extension; + + public MimeTypeEntry(String mime_type, String file_ext) { + type = mime_type; + extension = file_ext; + } + + public String getMIMEType() { + return type; + } + + public String getFileExtension() { + return extension; + } + + public String toString() { + return "MIMETypeEntry: " + type + ", " + extension; + } +}
diff --git a/src/share/classes/com/sun/activation/registries/MimeTypeFile.java b/src/share/classes/com/sun/activation/registries/MimeTypeFile.java new file mode 100644 index 0000000..0574266 --- /dev/null +++ b/src/share/classes/com/sun/activation/registries/MimeTypeFile.java
@@ -0,0 +1,332 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)MimeTypeFile.java 1.9 07/05/14 + */ + +package com.sun.activation.registries; + +import java.io.*; +import java.util.*; + +public class MimeTypeFile { + private String fname = null; + private Hashtable type_hash = new Hashtable(); + + /** + * The construtor that takes a filename as an argument. + * + * @param new_fname The file name of the mime types file. + */ + public MimeTypeFile(String new_fname) throws IOException { + File mime_file = null; + FileReader fr = null; + + fname = new_fname; // remember the file name + + mime_file = new File(fname); // get a file object + + fr = new FileReader(mime_file); + + try { + parse(new BufferedReader(fr)); + } finally { + try { + fr.close(); // close it + } catch (IOException e) { + // ignore it + } + } + } + + public MimeTypeFile(InputStream is) throws IOException { + parse(new BufferedReader(new InputStreamReader(is, "iso-8859-1"))); + } + + /** + * Creates an empty DB. + */ + public MimeTypeFile() { + } + + /** + * get the MimeTypeEntry based on the file extension + */ + public MimeTypeEntry getMimeTypeEntry(String file_ext) { + return (MimeTypeEntry)type_hash.get((Object)file_ext); + } + + /** + * Get the MIME type string corresponding to the file extension. + */ + public String getMIMETypeString(String file_ext) { + MimeTypeEntry entry = this.getMimeTypeEntry(file_ext); + + if (entry != null) + return entry.getMIMEType(); + else + return null; + } + + /** + * Appends string of entries to the types registry, must be valid + * .mime.types format. + * A mime.types entry is one of two forms: + * + * type/subtype ext1 ext2 ... + * or + * type=type/subtype desc="description of type" exts=ext1,ext2,... + * + * Example: + * # this is a test + * audio/basic au + * text/plain txt text + * type=application/postscript exts=ps,eps + */ + public void appendToRegistry(String mime_types) { + try { + parse(new BufferedReader(new StringReader(mime_types))); + } catch (IOException ex) { + // can't happen + } + } + + /** + * Parse a stream of mime.types entries. + */ + private void parse(BufferedReader buf_reader) throws IOException { + String line = null, prev = null; + + while ((line = buf_reader.readLine()) != null) { + if (prev == null) + prev = line; + else + prev += line; + int end = prev.length(); + if (prev.length() > 0 && prev.charAt(end - 1) == '\\') { + prev = prev.substring(0, end - 1); + continue; + } + this.parseEntry(prev); + prev = null; + } + if (prev != null) + this.parseEntry(prev); + } + + /** + * Parse single mime.types entry. + */ + private void parseEntry(String line) { + String mime_type = null; + String file_ext = null; + line = line.trim(); + + if (line.length() == 0) // empty line... + return; // BAIL! + + // check to see if this is a comment line? + if (line.charAt(0) == '#') + return; // then we are done! + + // is it a new format line or old format? + if (line.indexOf('=') > 0) { + // new format + LineTokenizer lt = new LineTokenizer(line); + while (lt.hasMoreTokens()) { + String name = lt.nextToken(); + String value = null; + if (lt.hasMoreTokens() && lt.nextToken().equals("=") && + lt.hasMoreTokens()) + value = lt.nextToken(); + if (value == null) { + if (LogSupport.isLoggable()) + LogSupport.log("Bad .mime.types entry: " + line); + return; + } + if (name.equals("type")) + mime_type = value; + else if (name.equals("exts")) { + StringTokenizer st = new StringTokenizer(value, ","); + while (st.hasMoreTokens()) { + file_ext = st.nextToken(); + MimeTypeEntry entry = + new MimeTypeEntry(mime_type, file_ext); + type_hash.put(file_ext, entry); + if (LogSupport.isLoggable()) + LogSupport.log("Added: " + entry.toString()); + } + } + } + } else { + // old format + // count the tokens + StringTokenizer strtok = new StringTokenizer(line); + int num_tok = strtok.countTokens(); + + if (num_tok == 0) // empty line + return; + + mime_type = strtok.nextToken(); // get the MIME type + + while (strtok.hasMoreTokens()) { + MimeTypeEntry entry = null; + + file_ext = strtok.nextToken(); + entry = new MimeTypeEntry(mime_type, file_ext); + type_hash.put(file_ext, entry); + if (LogSupport.isLoggable()) + LogSupport.log("Added: " + entry.toString()); + } + } + } + + // for debugging + /* + public static void main(String[] argv) throws Exception { + MimeTypeFile mf = new MimeTypeFile(argv[0]); + System.out.println("ext " + argv[1] + " type " + + mf.getMIMETypeString(argv[1])); + System.exit(0); + } + */ +} + +class LineTokenizer { + private int currentPosition; + private int maxPosition; + private String str; + private Vector stack = new Vector(); + private static final String singles = "="; // single character tokens + + /** + * Constructs a tokenizer for the specified string. + * <p> + * + * @param str a string to be parsed. + */ + public LineTokenizer(String str) { + currentPosition = 0; + this.str = str; + maxPosition = str.length(); + } + + /** + * Skips white space. + */ + private void skipWhiteSpace() { + while ((currentPosition < maxPosition) && + Character.isWhitespace(str.charAt(currentPosition))) { + currentPosition++; + } + } + + /** + * Tests if there are more tokens available from this tokenizer's string. + * + * @return <code>true</code> if there are more tokens available from this + * tokenizer's string; <code>false</code> otherwise. + */ + public boolean hasMoreTokens() { + if (stack.size() > 0) + return true; + skipWhiteSpace(); + return (currentPosition < maxPosition); + } + + /** + * Returns the next token from this tokenizer. + * + * @return the next token from this tokenizer. + * @exception NoSuchElementException if there are no more tokens in this + * tokenizer's string. + */ + public String nextToken() { + int size = stack.size(); + if (size > 0) { + String t = (String)stack.elementAt(size - 1); + stack.removeElementAt(size - 1); + return t; + } + skipWhiteSpace(); + + if (currentPosition >= maxPosition) { + throw new NoSuchElementException(); + } + + int start = currentPosition; + char c = str.charAt(start); + if (c == '"') { + currentPosition++; + boolean filter = false; + while (currentPosition < maxPosition) { + c = str.charAt(currentPosition++); + if (c == '\\') { + currentPosition++; + filter = true; + } else if (c == '"') { + String s; + + if (filter) { + StringBuffer sb = new StringBuffer(); + for (int i = start + 1; i < currentPosition - 1; i++) { + c = str.charAt(i); + if (c != '\\') + sb.append(c); + } + s = sb.toString(); + } else + s = str.substring(start + 1, currentPosition - 1); + return s; + } + } + } else if (singles.indexOf(c) >= 0) { + currentPosition++; + } else { + while ((currentPosition < maxPosition) && + singles.indexOf(str.charAt(currentPosition)) < 0 && + !Character.isWhitespace(str.charAt(currentPosition))) { + currentPosition++; + } + } + return str.substring(start, currentPosition); + } + + public void pushToken(String token) { + stack.addElement(token); + } +}
diff --git a/src/share/classes/com/sun/activation/viewers/ImageViewer.java b/src/share/classes/com/sun/activation/viewers/ImageViewer.java new file mode 100644 index 0000000..491ef21 --- /dev/null +++ b/src/share/classes/com/sun/activation/viewers/ImageViewer.java
@@ -0,0 +1,138 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)ImageViewer.java 1.9 07/05/14 + */ + +package com.sun.activation.viewers; + +import java.awt.*; +import java.io.*; +import java.beans.*; +import javax.activation.*; + +public class ImageViewer extends Panel implements CommandObject { + // UI Vars... + private ImageViewerCanvas canvas = null; + + // File Vars + // private InputStream data_ins = null; + private Image image = null; + private DataHandler _dh = null; + + private boolean DEBUG = false; + /** + * Constructor + */ + public ImageViewer(){ + + // create the ImageViewerCanvas + canvas = new ImageViewerCanvas(); + add(canvas); + } + /** + * Set the DataHandler for this CommandObject + * @param DataHandler the DataHandler + */ + public void setCommandContext(String verb, DataHandler dh) throws IOException{ + _dh = dh; + this.setInputStream( _dh.getInputStream() ); + } + //-------------------------------------------------------------------- + + /** + * Set the data stream, component to assume it is ready to + * be read. + */ + private void setInputStream(InputStream ins) throws IOException { + MediaTracker mt = new MediaTracker(this); + int bytes_read = 0; + byte data[] = new byte[1024]; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + while((bytes_read = ins.read(data)) >0) + baos.write(data, 0, bytes_read); + ins.close(); + + // convert the buffer into an image + image = getToolkit().createImage(baos.toByteArray()); + + mt.addImage(image, 0); + + try { + mt.waitForID(0); + mt.waitForAll(); + if(mt.statusID(0, true ) != MediaTracker.COMPLETE){ + System.out.println("Error occured in image loading = " + + mt.getErrorsID(0)); + + } + + } + catch(InterruptedException e) { + throw new IOException("Error reading image data"); + } + + canvas.setImage(image); + if(DEBUG) + System.out.println("calling invalidate"); + + } + //-------------------------------------------------------------------- + public void addNotify(){ + super.addNotify(); // call the real one first... + this.invalidate(); + this.validate(); + this.doLayout(); + } + //-------------------------------------------------------------------- + public Dimension getPreferredSize(){ + return canvas.getPreferredSize(); + } + +} + + + + + + + + + + +
diff --git a/src/share/classes/com/sun/activation/viewers/ImageViewerCanvas.java b/src/share/classes/com/sun/activation/viewers/ImageViewerCanvas.java new file mode 100644 index 0000000..9d939b4 --- /dev/null +++ b/src/share/classes/com/sun/activation/viewers/ImageViewerCanvas.java
@@ -0,0 +1,95 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)ImageViewerCanvas.java 1.4 07/05/14 + */ + +package com.sun.activation.viewers; + +import java.awt.*; + +public class ImageViewerCanvas extends Canvas +{ + private Image canvas_image = null; + + /** + * The constructor + */ + public ImageViewerCanvas() + { + + } + + /** + * set the image + */ + public void setImage(Image new_image) + { + canvas_image = new_image; + this.invalidate(); + this.repaint(); + } + + /** + * getPreferredSize + */ + public Dimension getPreferredSize() + { + Dimension d = null; + + if(canvas_image == null) + { + d = new Dimension(200, 200); + } + else + d = new Dimension(canvas_image.getWidth(this), + canvas_image.getHeight(this)); + + return d; + } + /** + * paint method + */ + public void paint(Graphics g) + { + + if(canvas_image != null) + g.drawImage(canvas_image, 0, 0, this); + + } + +}
diff --git a/src/share/classes/com/sun/activation/viewers/TextEditor.java b/src/share/classes/com/sun/activation/viewers/TextEditor.java new file mode 100644 index 0000000..94518ff --- /dev/null +++ b/src/share/classes/com/sun/activation/viewers/TextEditor.java
@@ -0,0 +1,203 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)TextEditor.java 1.10 07/07/13 + */ + +package com.sun.activation.viewers; + +import java.awt.*; +import java.awt.event.*; +import java.io.*; +import java.beans.*; +import javax.activation.*; + +public class TextEditor extends Panel implements CommandObject, + ActionListener { + // UI Vars... + private TextArea text_area = null; + private GridBagLayout panel_gb = null; + private Panel button_panel = null; + private Button save_button = null; + // File Vars + private File text_file = null; + private String text_buffer = null; + private InputStream data_ins = null; + private FileInputStream fis = null; + + private DataHandler _dh = null; + private boolean DEBUG = false; + /** + * Constructor + */ + public TextEditor() { + panel_gb = new GridBagLayout(); + setLayout(panel_gb); + + button_panel = new Panel(); + // button_panel.setBackground(Color.white); + button_panel.setLayout( new FlowLayout() ); + save_button = new Button("SAVE"); + button_panel.add(save_button); + addGridComponent(this, + button_panel, + panel_gb, + 0,0, + 1,1, + 1,0); + + // create the text area + text_area = new TextArea("This is text",24, 80, + TextArea.SCROLLBARS_VERTICAL_ONLY ); + // text_area.setBackground(Color.lightGray); + text_area.setEditable( true ); + + addGridComponent(this, + text_area, + panel_gb, + 0,1, + 1,2, + 1,1); + + // add listeners + save_button.addActionListener( this ); + + } + + //////////////////////////////////////////////////////////////////////// + /** + * adds a component to our gridbag layout + */ + private void addGridComponent(Container cont, + Component comp, + GridBagLayout mygb, + int gridx, + int gridy, + int gridw, + int gridh, + int weightx, + int weighty) { + GridBagConstraints c = new GridBagConstraints(); + c.gridx = gridx; + c.gridy = gridy; + c.gridwidth = gridw; + c.gridheight = gridh; + c.fill = GridBagConstraints.BOTH; + c.weighty = weighty; + c.weightx = weightx; + c.anchor = GridBagConstraints.CENTER; + mygb.setConstraints(comp, c); + cont.add(comp); + } + + //-------------------------------------------------------------------- + public void setCommandContext(String verb, DataHandler dh) throws IOException { + _dh = dh; + this.setInputStream( _dh.getInputStream() ); + + } + //-------------------------------------------------------------------- + + /** + * set the data stream, component to assume it is ready to + * be read. + */ + public void setInputStream(InputStream ins) throws IOException { + + byte data[] = new byte[1024]; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + int bytes_read = 0; + // check that we can actually read + + while((bytes_read = ins.read(data)) >0) + baos.write(data, 0, bytes_read); + ins.close(); + + + // convert the buffer into a string + // popuplate the buffer + text_buffer = baos.toString(); + + // place in the text area + text_area.setText(text_buffer); + } + /////////////////////////////////////////////////////////////////////// + private void performSaveOperation(){ + OutputStream fos = null; + try { + fos = _dh.getOutputStream(); + } catch (Exception e) {} + + String buffer = text_area.getText(); + + // make sure we got one + if(fos == null) { + System.out.println("Invalid outputstream in TextEditor!"); + System.out.println("not saving!"); + return; + } + + try { + fos.write( buffer.getBytes() ); + fos.flush(); // flush it! + fos.close(); // close it! + } catch(IOException e) + { + System.out.println("TextEditor Save Operation failed with: " + e); + } + + } + //-------------------------------------------------------------------- + public void addNotify() { + super.addNotify(); + invalidate(); + } + //-------------------------------------------------------------------- + public Dimension getPreferredSize() { + return text_area.getMinimumSize(24, 80); + } + ///////////////////////////////////////////////////////////////////// + // for ActionListener + public void actionPerformed(ActionEvent evt){ + if(evt.getSource() == save_button) { // save button pressed! + + // Save ourselves + this.performSaveOperation(); + } + } + +}
diff --git a/src/share/classes/com/sun/activation/viewers/TextViewer.java b/src/share/classes/com/sun/activation/viewers/TextViewer.java new file mode 100644 index 0000000..0fb22c7 --- /dev/null +++ b/src/share/classes/com/sun/activation/viewers/TextViewer.java
@@ -0,0 +1,118 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)TextViewer.java 1.10 07/05/14 + */ + +package com.sun.activation.viewers; + +import java.awt.*; +import java.io.*; +import java.beans.*; +import javax.activation.*; + +public class TextViewer extends Panel implements CommandObject { + // UI Vars... + private TextArea text_area = null; + + // File Vars + private File text_file = null; + private String text_buffer = null; + + private DataHandler _dh = null; + private boolean DEBUG = false; + /** + * Constructor + */ + public TextViewer() { + setLayout( new GridLayout(1,1)); + // create the text area + text_area = new TextArea("", 24, 80, + TextArea.SCROLLBARS_VERTICAL_ONLY ); + text_area.setEditable( false ); + + add(text_area); + } + + //-------------------------------------------------------------------- + public void setCommandContext(String verb, DataHandler dh) throws IOException { + _dh = dh; + this.setInputStream( _dh.getInputStream() ); + } + //-------------------------------------------------------------------- + + /** + * set the data stream, component to assume it is ready to + * be read. + */ + public void setInputStream(InputStream ins) throws IOException { + + int bytes_read = 0; + // check that we can actually read + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte data[] = new byte[1024]; + + while((bytes_read = ins.read(data)) >0) + baos.write(data, 0, bytes_read); + + ins.close(); + + // convert the buffer into a string + // popuplate the buffer + text_buffer = baos.toString(); + + // place in the text area + text_area.setText(text_buffer); + + } + //-------------------------------------------------------------------- + public void addNotify() { + super.addNotify(); + invalidate(); + } + //-------------------------------------------------------------------- + public Dimension getPreferredSize() { + return text_area.getMinimumSize(24, 80); + } + +} + + + + + +
diff --git a/src/share/classes/demo/CompViewer.java b/src/share/classes/demo/CompViewer.java new file mode 100644 index 0000000..3a214b8 --- /dev/null +++ b/src/share/classes/demo/CompViewer.java
@@ -0,0 +1,144 @@ +/* + * @(#)CompViewer.java 1.5 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.awt.*; +import java.beans.*; +import java.lang.reflect.Method; +import java.io.*; +import java.awt.event.*; + +/** + * Class <code>CompViewer</code> creates a 'viewer' component + * that implements the CommandObject interface. + * + */ +public class CompViewer extends Frame implements WindowListener { + + /** + * Our constructor... + */ + public CompViewer(){ + super("Component"); + this.initCompViewer(null); + } + + public CompViewer(String name){ + super(name); + this.initCompViewer(name); + } + + public void initCompViewer(String name){ + if (name != null) + setTitle(name); + setSize(400,400); + setLayout(new BorderLayout()); + this.addWindowListener(this); + } + + //////////////////////////////////////////////////////////////////////// + // we got our bean as a component display it! + void setBean(Component new_bean) + { + Dimension start_dim = null; + add((Component)new_bean, "Center"); + start_dim = ((Component)new_bean).getPreferredSize(); + + if(start_dim.width != 0 && start_dim.height != 0) { + // this is what we do under normal conditions + start_dim.height += 40; + start_dim.width += 15; + this.setSize( start_dim ); + ((Component)new_bean).invalidate(); + ((Component)new_bean).validate(); + ((Component)new_bean).doLayout(); + show(); + } + else { + // we get here if for some reason our child's + // getPref size needs to have it's peer created + // first... + show(); + start_dim = ((Component)new_bean).getPreferredSize(); + start_dim.height += 40; + start_dim.width += 15; + this.setSize( start_dim ); + ((Component)new_bean).validate(); + } + this.setSize(this.getSize()); + validate(); + } + + + /** + * Make the bean based on it's class loader and name + */ + private Object makeBean(ClassLoader cls, String beanName) { + Object new_bean = null; + + try { + try { + new_bean = java.beans.Beans.instantiate(cls, beanName); + } + catch(IOException e) { + System.out.println("CompViewer:Beans.instantiate:IOException " + beanName + "."); + System.out.println(e); + System.exit(1); + } + } + catch (ClassNotFoundException e) { + System.out.println("CompViewer:Beans.instantiate:ClassNotFoundException " + beanName + "."); + System.out.println(e); + System.exit(1); + } + + if( !(new_bean instanceof Component) ) { + System.out.println("CompViewer: " + beanName + " not instance of awt.Component exiting"); + System.exit(1); + } + return new_bean; + } + + public void windowOpened(WindowEvent e) {} + public void windowClosing(WindowEvent e) { + this.setVisible(false); + } + public void windowClosed(WindowEvent e) {} + public void windowIconified(WindowEvent e) {} + public void windowDeiconified(WindowEvent e) {} + public void windowActivated(WindowEvent e) {} + public void windowDeactivated(WindowEvent e) {} + +} + + +
diff --git a/src/share/classes/demo/DCHTest.java b/src/share/classes/demo/DCHTest.java new file mode 100644 index 0000000..5e2550c --- /dev/null +++ b/src/share/classes/demo/DCHTest.java
@@ -0,0 +1,108 @@ +/* + * @(#)DCHTest.java 1.5 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.io.*; +import javax.activation.*; +import java.awt.datatransfer.*; + +public class DCHTest { + private FileDataSource fds = null; + private DataHandler dh = null; + private DataContentHandlerFactory dchf = null; + /** + * main function + */ + public static void main(String args[]) { + DCHTest test = new DCHTest(); + + if(args.length == 0) { + System.out.println("usage: DCHTest file.txt"); + System.exit(1); + } + + // first let's get a DataSource + + test.setFile(args[0]); + + test.doit(); + } + + private void doit() { + DataFlavor xfer_flavors[]; + Object content = null; + + // now let's create a DataHandler + dh = new DataHandler(fds); + System.out.println("DCHTest: DataHandler created"); + + // now lets set a DataContentHandlerFactory + dchf = new SimpleDCF("text/plain:PlainDCH\n"); + System.out.println("DCHTest: Simple dchf created"); + + // now let's set the dchf in the dh + dh.setDataContentHandlerFactory(dchf); + System.out.println("DCHTest: DataContentHandlerFactory set in DataHandler"); + + // get the dataflavors + xfer_flavors = dh.getTransferDataFlavors(); + System.out.println("DCHTest: dh.getTransferDF returned " + + xfer_flavors.length + " data flavors."); + + // get the content: + try { + content = dh.getContent(); + } catch (Exception e) { e.printStackTrace(); } + + if(content == null) + System.out.println("DCHTest: no content to be had!!!"); + else + System.out.println("DCHTest: got content of the following type: " + + content.getClass().getName()); + + } + + /** + * set the file + */ + public void setFile(String filename) { + fds = new FileDataSource(filename); + System.out.println("DCHTest: FileDataSource created"); + if(!fds.getContentType().equals("text/plain")) { + System.out.println("Type must be text/plain"); + System.exit(1); + } + } + +} + +
diff --git a/src/share/classes/demo/DCHTest2.java b/src/share/classes/demo/DCHTest2.java new file mode 100644 index 0000000..b07742c --- /dev/null +++ b/src/share/classes/demo/DCHTest2.java
@@ -0,0 +1,116 @@ +/* + * @(#)DCHTest2.java 1.7 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.io.*; +import javax.activation.*; +import java.awt.datatransfer.*; + +public class DCHTest2 { + private FileDataSource fds = null; + private MailcapCommandMap cmdMap = null; + private DataHandler dh = null; + private DataContentHandlerFactory dchf = null; + /** + * main function + */ + public static void main(String args[]) { + DCHTest2 test = new DCHTest2(); + + if(args.length < 2) { + System.out.println("usage: DCHTest2 file.txt mailcap"); + System.exit(1); + } + + // first let's get a DataSource + + test.setFile(args[0]); + + test.setMailcap(args[1]); + test.doit(); + } + + private void doit() { + DataFlavor xfer_flavors[]; + Object content = null; + + // now let's create a DataHandler + dh = new DataHandler(fds); + dh.setCommandMap(cmdMap); + System.out.println("DCHTest2: DataHandler created"); + + // get the dataflavors + xfer_flavors = dh.getTransferDataFlavors(); + System.out.println("DCHTest2: dh.getTransferDF returned " + + xfer_flavors.length + " data flavors."); + + // get the content: + try { + content = dh.getContent(); + } catch (Exception e) { e.printStackTrace(); } + if(content == null) + System.out.println("DCHTest2: no content to be had!!!"); + else + System.out.println("DCHTest2: got content of the following type: " + + content.getClass().getName()); + + } + + /** + * set the file + */ + public void setFile(String filename) { + fds = new FileDataSource(filename); + System.out.println("DCHTest2: FileDataSource created"); + if(!fds.getContentType().equals("text/plain")) { + System.out.println("Type must be text/plain"); + System.exit(1); + } + } + + /** + * set the mailcap file in the CMD Map + */ + public void setMailcap(String mailcap) { + + try { + cmdMap = new MailcapCommandMap(mailcap); + } catch(Exception e){ + e.printStackTrace(); + System.exit(1); + } + } + + +} + +
diff --git a/src/share/classes/demo/DHURL.java b/src/share/classes/demo/DHURL.java new file mode 100644 index 0000000..095794e --- /dev/null +++ b/src/share/classes/demo/DHURL.java
@@ -0,0 +1,87 @@ +/* + * @(#)DHURL.java 1.5 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.net.*; +import java.io.*; +import javax.activation.*; + +public class DHURL { + URL url = null; + DataHandler dh = null; + + public static void main(String args[]){ + DHURL test = new DHURL(); + + if(args.length == 0) { + System.out.println("usage: DHURL url"); + System.exit(1); + } + + test.setURL(args[0]); + + test.doit(); + + } + + public void setURL(String url) { + + try { + this.url = new URL(url); + } catch(MalformedURLException e) { + e.printStackTrace(); + System.out.println("malformed URL!!!"); + System.exit(1); + } + + } + + public void doit() { + System.out.print("Creating DataHandler..."); + dh = new DataHandler(url); + System.out.println("...done."); + + System.out.println("The MimeType of the DH : " + + dh.getContentType()); + try { + InputStream is = dh.getInputStream(); + if(is != null) + System.out.println("got an inputstream"); + } catch(Exception e) { + e.printStackTrace(); + } + + + } + + +}
diff --git a/src/share/classes/demo/FileView.java b/src/share/classes/demo/FileView.java new file mode 100644 index 0000000..d440cfd --- /dev/null +++ b/src/share/classes/demo/FileView.java
@@ -0,0 +1,70 @@ +/* + * @(#)FileView.java 1.7 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.awt.*; +import java.beans.*; +import java.net.*; +import javax.activation.*; + +public class FileView { + private Frame frame; + + public static void main(String args[]) throws Exception { + FileView fv = new FileView(); + if (args.length == 0) { + System.out.println("usage: FileView file.txt"); + System.exit(1); + } + fv.view(args[0]); + } + + private void view(String filename) throws Exception { + FileDataSource fds = new FileDataSource(filename); + DataHandler dh = new DataHandler(fds); + // comment out previous two lines, and uncomment next + // line and pass in a URL on the command line. + // DataHandler dh = new DataHandler(new URL(filename)); + + CommandInfo bi = dh.getCommand("view"); + + if (bi == null) { + System.out.println("no viewer found, exiting"); + System.exit(1); + } + + frame = new Frame("Viewer"); + frame.add((Component)dh.getBean(bi)); + frame.setSize(new Dimension(400,300)); + frame.show(); + } +}
diff --git a/src/share/classes/demo/JAFApp.java b/src/share/classes/demo/JAFApp.java new file mode 100644 index 0000000..42bc2a4 --- /dev/null +++ b/src/share/classes/demo/JAFApp.java
@@ -0,0 +1,414 @@ +/* + * @(#)JAFApp.java 1.13 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.awt.*; +import java.awt.event.*; +import java.beans.*; +import java.io.*; +import javax.activation.*; + +public class JAFApp extends Frame implements WindowListener, ItemListener, ActionListener { + + // UI stuff... + private GridBagLayout gridbag = null; + private GridBagLayout panel_gb = null; + private List file_list = null; + private Panel results_panel = null; + private Label f_title = null; + private Label f_name_label = null; + private Label type_label = null; + private Label type_title = null; + private Button launch_button = null; + private Choice verb_choice = null; + // File stuff... + private File _file = null; + // private FileDataSource fds[] = null; + private DataHandler dh[] = null; + + private boolean debug = false; + // private + /////////////////////////////////////////////////////////////////////// + // ctor + public JAFApp(String title) + { + super(title); + initMe(); + } + + public JAFApp() + { + super(); + initMe(); + } + + /////////////////////////////////////////////////////////////////////// + // initME -- init the UI + private void initMe() + { + Font label_font = new Font("Default", Font.PLAIN, 12); + Font title_font = new Font("Default", Font.BOLD, 12); + + gridbag = new GridBagLayout(); + setLayout(gridbag); + + this.setBackground(Color.white); + + // results panel create + results_panel = new Panel(); + panel_gb = new GridBagLayout(); + results_panel.setLayout(panel_gb); + results_panel.setBackground(Color.lightGray); + addGridComponent(this, + results_panel, + gridbag, + 0,0, + 1,1, + 1,0 ); + + // file name label + f_title = new Label("File Name:"); + f_title.setBackground(Color.lightGray); + f_title.setAlignment(Label.RIGHT); + f_title.setFont(title_font); + addGridComponent(results_panel, + f_title, + panel_gb, + 0, 0, + 1, 1, + 5, 100); + + // file name label + f_name_label = new Label("<none selected>"); + f_name_label.setBackground(Color.lightGray); + f_name_label.setAlignment(Label.LEFT); + f_name_label.setFont(label_font); + addGridComponent(results_panel, + f_name_label, + panel_gb, + 1, 0, + 1, 1, + 15, 100); + + // file name label + f_title = new Label("MIME Type:"); + f_title.setBackground(Color.lightGray); + f_title.setAlignment(Label.RIGHT); + f_title.setFont(title_font); + addGridComponent(results_panel, + f_title, + panel_gb, + 2, 0, + 1, 1, + 5, 100); + + // type_label + type_label = new Label("<no type>"); + type_label.setBackground(Color.lightGray); + type_label.setAlignment(Label.LEFT); + type_label.setFont(label_font); + addGridComponent(results_panel, + type_label, + panel_gb, + 3,0, + 1,1, + 10, 100); + + // launch button + launch_button = new Button("Launch!"); + launch_button.setEnabled( false ); + launch_button.setBackground(Color.red); + launch_button.setFont(title_font); + addGridComponent(results_panel, + launch_button, + panel_gb, + 4,0, + 1,1, + 5, 100); + + // verb popup + verb_choice = new Choice(); + verb_choice.setEnabled( false ); + verb_choice.setFont(label_font); + verb_choice.add("<empty>"); + addGridComponent(results_panel, + verb_choice, + panel_gb, + 5,0, + 1,1, + 10, 100); + + // file list + file_list = new List(); + file_list.setBackground(Color.white); + file_list.setFont(label_font); + addGridComponent(this, + file_list, + gridbag, + 0,1, + 1, 2, + 1,1); + + this.invalidate(); + + // set up events + this.addWindowListener(this); + file_list.addItemListener(this); + launch_button.addActionListener(this); + + } + + //////////////////////////////////////////////////////////////////////// + /** + * adds a component to our gridbag layout + */ + private void addGridComponent(Container cont, + Component comp, + GridBagLayout mygb, + int gridx, + int gridy, + int gridw, + int gridh, + int weightx, + int weighty) + { + GridBagConstraints c = new GridBagConstraints(); + c.gridx = gridx; + c.gridy = gridy; + c.gridwidth = gridw; + c.gridheight = gridh; + c.fill = GridBagConstraints.BOTH; + c.weighty = weighty; + c.weightx = weightx; + c.anchor = GridBagConstraints.CENTER; + mygb.setConstraints(comp, c); + cont.add(comp); + } + + /////////////////////////////////////////////////////////////////////// + // setFile - sets the file/directory for this frame at startup usually + // + public void setFile( File file ) + { + _file = file; + int i; + MailcapCommandMap cmdmap = + (MailcapCommandMap)CommandMap.getDefaultCommandMap(); + cmdmap.addMailcap("application/x-int; jaf.viewers.IntViewer"); + + if(_file.isFile()) + { + dh = new DataHandler[1]; + dh[0] = new DataHandler(new FileDataSource( _file )); + + file_list.add( dh[0].getName() ); + } + else if( _file.isDirectory() ) + { + String files[] = _file.list(); + MimetypesFileTypeMap map = new MimetypesFileTypeMap(); + map.addMimeTypes("text/java java\n"); + FileTypeMap.setDefaultFileTypeMap(map); + dh = new DataHandler[ files.length ]; + // iterate through the list and make fds + for( i = 0; i < files.length; i++) + { + + + if(debug) + System.out.println(files[i]); + + dh[i] = new DataHandler( + new FileDataSource( _file.getAbsolutePath() + + _file.separator + + files[i] ) + ); + dh[i].setCommandMap(cmdmap); + +// try { +// ((FileDataSource)dh[i].getDataSource()).addMimeTypes("text/plain java\n"); +// } catch(IOException e){ System.out.println(e); } + file_list.add(dh[i].getName()); + } + System.out.println("number of files: " + files.length + + " read : " + i); + + } + + } + /////////////////***ACTION LISTENER***/////////////////////// + // is called when a monkey (user) presses the launch button + public void actionPerformed(ActionEvent evt) + { + Object source = evt.getSource(); + int index = file_list.getSelectedIndex(); + + // make sure it's the launch button and that + // a list item is selected... + if(source == launch_button && index > -1){ + CommandInfo cmds[] = null; + String mimeType = dh[index].getContentType(); + + if(debug) + System.out.println("Finding..."); + + // get the available commands for this type + cmds = dh[index].getPreferredCommands(); + + // if we actually got some back... + if(cmds.length > 0){ + CompViewer cont = null; + Object my_bean = null; + // take the first one + if(debug) + System.out.println("Launching..."); + + // get the first one + my_bean = dh[index].getBean( cmds[verb_choice.getSelectedIndex()] ); + + // if it isn't a CommandObject we still + // have to give it it's data... +// if(!(my_bean instanceof javax.activation.CommandObject)) +// { +// System.out.println("WHOOOAAA!"); +// if(my_bean instanceof +// java.io.Externalizable) + +// { +// try +// { +// ((Externalizable)my_bean).readExternal( +// new ObjectInputStream( +// dh[index].getInputStream() +// ) +// ); +// } catch(Exception e) +// { +// System.out.println("There was a problem reading the Externalized Data in the viewer bean : " + e); +// } +// } +// } + if(debug) + System.out.println("GOTTA BEAN!: " + + my_bean.getClass().getName() ); + // create a new bean container + cont = new CompViewer( "JAF Component" ); + cont.setBean( (Component) my_bean); + cont.show(); + } + } + } + /////////////////***ITEM LISTENER***///////////////////////// + public void itemStateChanged(ItemEvent evt) + { + Integer id = (Integer)evt.getItem(); + + if(evt.getStateChange() == ItemEvent.SELECTED) + { + // get the content type from the data handler... + String mime_type = dh[id.intValue()].getContentType(); + // set the state in the info dlog: + f_name_label.setText(dh[id.intValue()].getName()); + + // set the field in the UI and enable launch button + if(mime_type != null) + { + CommandInfo cmds[] = null; + // set the text label + type_label.setText(mime_type); + + // check to see if any commands are available + cmds = dh[id.intValue()].getPreferredCommands(); + if(cmds != null && cmds.length > 0) // we got a command! + { + launch_button.setEnabled( true ); + verb_choice.setEnabled( true ); + launch_button.setBackground( Color.green ); + + verb_choice.removeAll(); + for(int i = 0; i < cmds.length; i++) + { + // verb_choice.addItem(cmds[i].getBeanDescriptor().getName()); + verb_choice.addItem(cmds[i].getCommandName()); + } + } + else + { + launch_button.setEnabled( false ); + verb_choice.setEnabled( false ); + launch_button.setBackground( Color.red ); + } + + } + else + { + // set label to be unknown and launch button off! + type_label.setText("<unknown>"); + launch_button.setEnabled( false ); + launch_button.setBackground( Color.red ); + } + + } + } + /////////////////***WINDOW LISTENER***//////////////////////// + public void windowOpened(WindowEvent e){} + public void windowClosing(WindowEvent e) + { + System.exit(0); // quit + } + public void windowClosed(WindowEvent e){} + public void windowIconified(WindowEvent e){} + public void windowDeiconified(WindowEvent e){} + public void windowActivated(WindowEvent e){} + public void windowDeactivated(WindowEvent e){} + + /////////////////////////////////////////////////////////////////////// + // main + public static void main(String args[]) + { + JAFApp appFrame = new JAFApp("JAF Testing Application"); + appFrame.setSize(600, 400); + appFrame.show(); + + // set the directory + if(args.length == 0) + { + appFrame.setFile( new File(".")); + } + else + { + appFrame.setFile( new File(args[0]) ); + } + } + + +}
diff --git a/src/share/classes/demo/MCDump.java b/src/share/classes/demo/MCDump.java new file mode 100644 index 0000000..3bc1447 --- /dev/null +++ b/src/share/classes/demo/MCDump.java
@@ -0,0 +1,107 @@ +/* + * @(#)MCDump.java 1.3 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import java.io.*; +import java.beans.*; +import com.sun.activation.registries.*; +import javax.activation.*; + +/** + * Dump out everything we know about a MailcapCommandMap. + */ +public class MCDump { + static MailcapCommandMap mcf = null; + + public static void main(String args[]) { + + try { + if (args.length == 0) + mcf = new MailcapCommandMap(); + else + mcf = new MailcapCommandMap(args[0]); + } catch (Exception e){ + e.printStackTrace(); + System.exit(1); + } + + String[] types = mcf.getMimeTypes(); + if (types == null) { + System.out.println("No known MIME types"); + System.exit(0); + } else { + System.out.println("Known MIME types:"); + for (int i = 0; i < types.length; i++) + System.out.println("\t" + types[i]); + } + + System.out.println(); + System.out.println("All commands for each MIME type:"); + for (int i = 0; i < types.length; i++) { + System.out.println(" " + types[i]); + CommandInfo[] cmdinfo = mcf.getAllCommands(types[i]); + if (cmdinfo == null) { + System.out.println("\tNONE"); + } else { + for (int k = 0; k < cmdinfo.length; k++) + System.out.println("\t" + cmdinfo[k].getCommandName() + + ": " + cmdinfo[k].getCommandClass()); + } + } + + System.out.println(); + System.out.println("Preferred commands for each MIME type:"); + for (int i = 0; i < types.length; i++) { + System.out.println(" " + types[i]); + CommandInfo[] cmdinfo = mcf.getPreferredCommands(types[i]); + if (cmdinfo == null) { + System.out.println("\tNONE"); + } else { + for (int k = 0; k < cmdinfo.length; k++) + System.out.println("\t" + cmdinfo[k].getCommandName() + + ": " + cmdinfo[k].getCommandClass()); + } + } + + System.out.println(); + System.out.println("Native commands for each MIME type:"); + for (int i = 0; i < types.length; i++) { + System.out.println(" " + types[i]); + String[] cmds = mcf.getNativeCommands(types[i]); + if (cmds.length == 0) { + System.out.println("\tNONE"); + } else { + for (int k = 0; k < cmds.length; k++) + System.out.println("\t" + cmds[k]); + } + } + } +}
diff --git a/src/share/classes/demo/MCTest.java b/src/share/classes/demo/MCTest.java new file mode 100644 index 0000000..f68448d --- /dev/null +++ b/src/share/classes/demo/MCTest.java
@@ -0,0 +1,78 @@ +/* + * @(#)MCTest.java 1.9 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import java.io.*; +import java.beans.*; +import com.sun.activation.registries.*; +import javax.activation.*; + +public class MCTest { + static MailcapCommandMap mcf = null; + + public static void main(String args[]) { + + try { + if (args.length == 0) + mcf = new MailcapCommandMap(); + else + mcf = new MailcapCommandMap(args[0]); + } catch (Exception e){ + e.printStackTrace(); + System.exit(1); + } + + CommandInfo cmdinfo[] = mcf.getAllCommands("text/plain"); + System.out.print("Are there any commands for text/plain?"); + + if (cmdinfo != null) { + System.out.println("number of cmds = " + cmdinfo.length); + System.out.println("now try an individual cmd"); + CommandInfo info = mcf.getCommand("text/plain", "view"); + if (info != null) { + System.out.println("Got command..."); + } else { + System.out.println("no cmds"); + } + + mcf.addMailcap("text/plain;; x-java-flobotz=com.sun.activation.flobotz\n"); + // System.out.println("...dome"); + if (cmdinfo != null) { + cmdinfo = mcf.getAllCommands("text/plain"); + System.out.println("now we have cmds = " + cmdinfo.length); + + } + + } else { + System.out.println("NO CMDS AT ALL!"); + } + } +}
diff --git a/src/share/classes/demo/ODCHTest.java b/src/share/classes/demo/ODCHTest.java new file mode 100644 index 0000000..7e72f01 --- /dev/null +++ b/src/share/classes/demo/ODCHTest.java
@@ -0,0 +1,99 @@ +/* + * @(#)ODCHTest.java 1.4 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.io.*; +import javax.activation.*; +import java.awt.datatransfer.*; + +public class ODCHTest { + private FileDataSource fds = null; + private DataHandler dh = null; + private DataContentHandlerFactory dchf = null; + private String str; + /** + * main function + */ + public static void main(String args[]) { + ODCHTest test = new ODCHTest(); + + if(args.length != 0) { + System.out.println("usage: ODCHTest"); + System.exit(1); + } + + // first let's get a DataSource + + + test.doit(); + } + + private void doit() { + DataFlavor xfer_flavors[]; + Object content = null; + + str = new String("This is a test"); + + // now let's create a DataHandler + dh = new DataHandler(str, "text/plain"); + System.out.println("ODCHTest: DataHandler created with str & text/plain"); + + // now lets set a DataContentHandlerFactory + dchf = new SimpleDCF("text/plain:PlainDCH\n"); + System.out.println("ODCHTest: Simple dchf created"); + + // now let's set the dchf in the dh + dh.setDataContentHandlerFactory(dchf); + System.out.println("ODCHTest: DataContentHandlerFactory set in DataHandler"); + + // get the dataflavors + xfer_flavors = dh.getTransferDataFlavors(); + System.out.println("ODCHTest: dh.getTransferDF returned " + + xfer_flavors.length + " data flavors."); + + // get the content: + try { + content = dh.getContent(); + } catch (Exception e) { e.printStackTrace(); } + + if(content == null) + System.out.println("ODCHTest: no content to be had!!!"); + else { + System.out.println("ODCHTest: got content of the following type: " + + content.getClass().getName()); + if(content == str) + System.out.println("get content works"); + + } + } + +}
diff --git a/src/share/classes/demo/PlainDCH.java b/src/share/classes/demo/PlainDCH.java new file mode 100644 index 0000000..7a3734b --- /dev/null +++ b/src/share/classes/demo/PlainDCH.java
@@ -0,0 +1,149 @@ +/* + * @(#)PlainDCH.java 1.10 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import java.io.*; +import java.awt.datatransfer.DataFlavor; +import javax.activation.*; + + +public class PlainDCH implements DataContentHandler { + /** + * return the DataFlavors for this <code>DataContentHandler</code> + * @return The DataFlavors. + */ + public DataFlavor[] getTransferDataFlavors() { // throws Exception; + DataFlavor flavors[] = new DataFlavor[2]; + + + try { + flavors[0] = new ActivationDataFlavor(Class.forName("java.lang.String"), + "text/plain", + "text string"); + } catch(Exception e) + { System.out.println(e); } + + flavors[1] = new DataFlavor("text/plain", "Plain Text"); + return flavors; + } + /** + * return the Transfer Data of type DataFlavor from InputStream + * @param df The DataFlavor. + * @param ins The InputStream corresponding to the data. + * @return The constructed Object. + */ + public Object getTransferData(DataFlavor df, DataSource ds) { + + // this is sort of hacky, but will work for the + // sake of testing... + if(df.getMimeType().equals("text/plain")) { + if(df.getRepresentationClass().getName().equals( + "java.lang.String")) { + // spit out String + StringBuffer buf = new StringBuffer(); + char data[] = new char[1024]; + // InputStream is = null; + InputStreamReader isr = null; + int bytes_read = 0; + int total_bytes = 0; + + try { + isr = new InputStreamReader(ds.getInputStream()); + +// while(is.read(data) > 0) +// buf.append(data); + + while(true){ + bytes_read = isr.read(data); + if(bytes_read > 0) + buf.append(data, total_bytes, bytes_read); + else + break; + total_bytes += bytes_read; + } + } catch(Exception e) {} + + return buf.toString(); + + } + else if(df.getRepresentationClass().getName().equals( + "java.io.InputStream")){ + // spit out InputStream + try { + return ds.getInputStream(); + } catch (Exception e) {} + } + + } + + return null; + } + + /** + * + */ + public Object getContent(DataSource ds) { // throws Exception; + StringBuffer buf = new StringBuffer(); + char data[] = new char[1024]; + // InputStream is = null; + InputStreamReader isr = null; + int bytes_read = 0; + int total_bytes = 0; + + try { + isr = new InputStreamReader(ds.getInputStream()); + + // while(is.read(data) > 0) + // buf.append(data); + + while(true){ + bytes_read = isr.read(data); + if(bytes_read > 0) + buf.append(data, total_bytes, bytes_read); + else + break; + total_bytes += bytes_read; + } + } catch(Exception e) {} + + return buf.toString(); + } + /** + * construct an object from a byte stream + * (similar semantically to previous method, we are deciding + * which one to support) + */ + public void writeTo(Object obj, String mimeTye, OutputStream os) + throws IOException { + // throws Exception; + } + +}
diff --git a/src/share/classes/demo/PrefTest.java b/src/share/classes/demo/PrefTest.java new file mode 100644 index 0000000..104ecc1 --- /dev/null +++ b/src/share/classes/demo/PrefTest.java
@@ -0,0 +1,79 @@ +/* + * @(#)PrefTest.java 1.6 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import java.io.*; +import java.beans.*; +import javax.activation.*; + +public class PrefTest { + + public static void main(String args[]) { + MailcapCommandMap mcf = null; + + if (args.length > 0) { + try { + mcf = new MailcapCommandMap(args[0]); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + } else + mcf = new MailcapCommandMap(); + + CommandInfo cmdinfo[] = mcf.getAllCommands("text/plain"); + + if (cmdinfo != null) { + System.out.println("ALL Commands for text/plain:"); + for (int i = 0; i < cmdinfo.length; i++) { + System.out.println("Verb: " + cmdinfo[i].getCommandName() + + " Class: " + cmdinfo[i].getCommandClass()); + } + System.out.println("done"); + } else { + System.out.println("no commands"); + } + System.out.println(); + + cmdinfo = mcf.getPreferredCommands("text/plain"); + if (cmdinfo != null) { + System.out.println("PREFERRED Commands for text/plain:"); + for (int i = 0; i < cmdinfo.length; i++) { + System.out.println("Verb: " + cmdinfo[i].getCommandName() + + " Class: " + cmdinfo[i].getCommandClass()); + } + System.out.println("done"); + } else { + System.out.println("no commands"); + } + System.out.println(); + } +}
diff --git a/src/share/classes/demo/SimpleDCF.java b/src/share/classes/demo/SimpleDCF.java new file mode 100644 index 0000000..da1ba57 --- /dev/null +++ b/src/share/classes/demo/SimpleDCF.java
@@ -0,0 +1,117 @@ +/* + * @(#)SimpleDCF.java 1.4 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import javax.activation.*; +import java.util.StringTokenizer; +import java.util.Hashtable; + +public class SimpleDCF implements DataContentHandlerFactory { + Hashtable entry_hash = new Hashtable(); + /** + * the constructor, takes a list of classes as an argument in the + * form: + * <mimetype>:<class name>\n + * + * For Example: + * + * application/x-wombat:com.womco.WombatDCH + * text/plain:com.textco.TextDCH + * + */ + public SimpleDCF(String entries) { + StringTokenizer tok = new StringTokenizer(entries); + + String entry; + System.out.println("SimpleDCH: new SimpleDCF being created"); + + // parse the string + while(tok.hasMoreTokens()) { + int colon; + + entry = tok.nextToken(); + System.out.println("full entry = " + entry); + + // parse out the fields + colon = entry.indexOf(':'); + VectorEntry ve = new VectorEntry(entry.substring(0,colon), + entry.substring(colon + 1, + entry.length())); + System.out.println("adding element = " + ve); + entry_hash.put(ve.getMimeType(),ve); + } + } + + /** + * implement the factor interface + */ + public DataContentHandler createDataContentHandler(String mimeType){ + DataContentHandler dch = null; + + System.out.print("SimpleDCF: trying to create a DCH"); + + VectorEntry ve = (VectorEntry)entry_hash.get(mimeType); + if(ve != null) { + System.out.print("...found token"); + try { + + dch = (DataContentHandler)Class.forName( + ve.getClassName()).newInstance(); + if(dch == null) + System.out.println("...FAILED!!!"); + else + System.out.println("...SUCCESS!!!"); + + } catch(Exception e) { + System.out.println(e); + } + } + return dch; + } +} + +class VectorEntry { + private String mimeType; + private String className; + + public VectorEntry(String mimeType, String className) { + this.mimeType = mimeType; + this.className = className; + } + + public String getMimeType() { return mimeType; } + public String getClassName() { return className; } + public String toString() { + return new String("type: " + mimeType + " class name: " + className); + } + +}
diff --git a/src/share/classes/demo/TextInternalizer.java b/src/share/classes/demo/TextInternalizer.java new file mode 100644 index 0000000..c58bff8 --- /dev/null +++ b/src/share/classes/demo/TextInternalizer.java
@@ -0,0 +1,113 @@ +/* + * @(#)TextInternalizer.java 1.4 07/07/13 + * + * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Sun Microsystems nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.awt.*; +import java.io.*; +import java.beans.*; +import javax.activation.*; + +public class TextInternalizer extends Panel implements Externalizable { + // UI Vars... + private TextArea text_area = null; + + // File Vars + private File text_file = null; + private String text_buffer = null; + + private DataHandler _dh = null; + private boolean DEBUG = false; + /** + * Constructor + */ + public TextInternalizer() { + System.out.println("TextInternalizer!!!!!"); + + setLayout( new GridLayout(1,1)); + // create the text area + text_area = new TextArea("", 24, 80, + TextArea.SCROLLBARS_VERTICAL_ONLY ); + text_area.setEditable( false ); + + add(text_area); + } + + public void writeExternal(ObjectOutput out) throws IOException{ + + } + + public void readExternal(ObjectInput in) throws IOException, + ClassNotFoundException { + + + this.setObjectInput(in); + } + + + + //-------------------------------------------------------------------- +// public void setCommandContext(String verb, DataHandler dh) throws IOException { +// _dh = dh; +// this.setInputStream( _dh.getInputStream() ); +// } + //-------------------------------------------------------------------- + + /** + * set the data stream, component to assume it is ready to + * be read. + */ + public void setObjectInput(ObjectInput ins) throws IOException { + try { + + text_buffer = (String)ins.readObject(); + } catch(Exception e){ e.printStackTrace(); } + // place in the text area + text_area.setText(text_buffer); + + } + //-------------------------------------------------------------------- + public void addNotify() { + super.addNotify(); + invalidate(); + } + //-------------------------------------------------------------------- + public Dimension getPreferredSize() { + return text_area.getMinimumSize(24, 80); + } + +} + + + + + +
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestActivationDataFlavor.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestActivationDataFlavor.java new file mode 100644 index 0000000..436d657 --- /dev/null +++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestActivationDataFlavor.java
@@ -0,0 +1,46 @@ +/* @(#)TestActivationDataFlavor.java 1.1 98/02/09 + * + * Copyright (c) 1997-1998 Sun Microsystems, Inc. All Rights Reserved. + * This software is the confidential and proprietary information of Sun + * Microsystems, Inc. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with Sun. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + */ +package javasoft.sqe.tests.api.javax.activation.TestClasses; + +import java.awt.datatransfer.*; +import javax.activation.*; + +/** + * this class extends ActivationDataFlavor and provides + * public versions of protected methods for JCK testing + */ + +public class TestActivationDataFlavor extends ActivationDataFlavor { + + public TestActivationDataFlavor(String mimeType, + String humanReadableName) + { + super(mimeType, humanReadableName); + } + + // we will only override protected methods: + public String testNormalizeMimeTypeParameter(String parameterName, + String parameterValue) + { + return super.normalizeMimeTypeParameter(parameterName,parameterValue); + } + + public String testNormalizeMimeType(String mimeType) + { + return super.normalizeMimeType(mimeType); + } +}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandMap.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandMap.java new file mode 100644 index 0000000..0b91731 --- /dev/null +++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandMap.java
@@ -0,0 +1,84 @@ +/* @(#)TestCommandMap.java 1.1 98/02/09 + * + * Copyright (c) 1997-1998 Sun Microsystems, Inc. All Rights Reserved. + * This software is the confidential and proprietary information of Sun + * Microsystems, Inc. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with Sun. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * + */ + +package javasoft.sqe.tests.api.javax.activation.TestClasses; + +import javax.activation.*; +import javasoft.sqe.tests.api.javax.activation.TestClasses.*; + +/** This class is used to provide an alternative to the default MailcapCommandMap + * for testing purposes. It provides a number of distinct values which can be used + * to validate that it is being correctly used by a DataHandler. + */ + +public class TestCommandMap extends CommandMap { + + public static String getClassName() { + return "test.package.TestClass"; + } + + public static String getVerb() { + return "testVerb"; + } + + public static String getPreferredClassName() { + return "test.package.PreferredClass"; + } + + public static String getPreferredVerb() { + return "preferredVerb"; + } + + public static String getIncorrectMimeTypeVerb() { + return "incorrectMimeType"; + } + + private String requiredMimeType = null; + + public TestCommandMap(String requiredMimeType) + { + this.requiredMimeType = requiredMimeType; + } + + public CommandInfo[] getPreferredCommands(String mimeType) + { + CommandInfo cmdArray[] = new CommandInfo[1]; + String verb = (requiredMimeType.equals(mimeType)) ? getPreferredVerb() : getIncorrectMimeTypeVerb(); + cmdArray[0] = new CommandInfo(verb, getPreferredClassName()); + return cmdArray; + } + + public CommandInfo[] getAllCommands(String mimeType) + { + CommandInfo cmdArray[] = new CommandInfo[1]; + String verb = (requiredMimeType.equals(mimeType)) ? getVerb() : getIncorrectMimeTypeVerb(); + cmdArray[0] = new CommandInfo(verb, getClassName()); + return cmdArray; + } + + public CommandInfo getCommand(String mimeType, String cmdName) + { + String verb = (requiredMimeType.equals(mimeType)) ? cmdName : getIncorrectMimeTypeVerb(); + return new CommandInfo(verb, getClassName()); + } + + public DataContentHandler createDataContentHandler(String mimeType) + { + return (requiredMimeType.equals(mimeType)) ? new TestDCH(mimeType) : null; + } +}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandObject.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandObject.java new file mode 100644 index 0000000..d4a3b42 --- /dev/null +++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestCommandObject.java
@@ -0,0 +1,52 @@ +/* @(#)TestCommandObject.java 1.1 98/02/09 + * + * Copyright (c) 1997-1998 Sun Microsystems, Inc. All Rights Reserved. + * This software is the confidential and proprietary information of Sun + * Microsystems, Inc. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with Sun. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + */ + +package javasoft.sqe.tests.api.javax.activation.TestClasses; + +import javax.activation.*; + +/** + * This is utility library routine. + */ + +public class TestCommandObject implements CommandObject { + + private DataHandler dh = null; + private String verb = null; + private boolean wasCalled = false; + + public TestCommandObject() { + } + + public void setCommandContext(String verb, DataHandler dh) { + this.dh = dh; + this.verb = verb; + wasCalled = true; + } + + public String getVerb() { + return verb; + } + + public DataHandler getDataHandler() { + return dh; + } + + public boolean getWasCalled() { + return wasCalled; + } +}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCH.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCH.java new file mode 100644 index 0000000..13269d6 --- /dev/null +++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCH.java
@@ -0,0 +1,97 @@ +/* @(#)TestDCH.java 1.1 98/02/09 + * + * Copyright (c) 1997-1998 Sun Microsystems, Inc. All Rights Reserved. + * This software is the confidential and proprietary information of Sun + * Microsystems, Inc. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with Sun. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * + */ + +package javasoft.sqe.tests.api.javax.activation.TestClasses; + +import java.awt.datatransfer.*; +import java.io.*; +import java.io.IOException; +import javax.activation.*; + +/** Test DCH that does nothing. Just provides an object + */ + +public class TestDCH implements DataContentHandler { + + private DataFlavor df = null; + private static Object obj = null; + + public static String getDefaultMimeType() { + return "test/test"; + } + + public static String getDataFlavorName() { + return "madeInTestDCH"; + } + + public static Object getObject() + { + if (obj == null) + obj = new TestCommandObject(); + + return obj; + } + + public TestDCH(String mimeType) + { + this.df = new DataFlavor(mimeType, getDataFlavorName()); + } + + public TestDCH() + { + this(getDefaultMimeType()); + } + + public DataFlavor[] getTransferDataFlavors() + { + DataFlavor dfs [] = new DataFlavor[1]; + dfs[0] = df; + return dfs; + } + + public Object getTransferData(DataFlavor df, DataSource ds) throws UnsupportedFlavorException, IOException { + if (!this.df.isMimeTypeEqual(df.getMimeType())) + throw new UnsupportedFlavorException(df); + + return getObject(); + } + /** + * Return an object representing the data in its most preferred form. + * Generally this will be the form described by the first DataFlavor + * returned by the getTransferDataFlavors method. + */ + + public Object getContent(DataSource ds) throws IOException + { + return obj; + } + /** + * Convert the object to a byte stream of the specified MIME type + * and write it to the output stream. + */ + + public void writeTo(Object obj, String mimeType, OutputStream os ) throws IOException { + // tests not counting on this doing anything for now. + } + // methods of TestDCH (testing convenience) + + public String getMimeType() + { + return df.getMimeType(); + } +}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCHFactory.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCHFactory.java new file mode 100644 index 0000000..054c439 --- /dev/null +++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDCHFactory.java
@@ -0,0 +1,48 @@ +/* @(#)TestDCHFactory.java 1.1 98/02/09 + * + * Copyright (c) 1997-1998 Sun Microsystems, Inc. All Rights Reserved. + * This software is the confidential and proprietary information of Sun + * Microsystems, Inc. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with Sun. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * + */ + +package javasoft.sqe.tests.api.javax.activation.TestClasses; + +import javax.activation.*; + +/** Test uitlity used by DataHandler class. + */ + +public class TestDCHFactory implements DataContentHandlerFactory +{ + private String mimeType = null; + + public TestDCHFactory() { + } + + public TestDCHFactory(String mimeType) + { + this.mimeType = mimeType; + } + // We allow the factory to make a distinctive TestDCH based upon an optional + // mimeType constructor argument, to allow tests to prove that + // DataHandler.setDataContentHandlerFactory overrides the affect setCommandMap. + + public DataContentHandler createDataContentHandler(String mimeType) + { + if (this.mimeType != null) + return new TestDCH(this.mimeType); + else + return new TestDCH(mimeType); + } +}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDataSource.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDataSource.java new file mode 100644 index 0000000..7f1490b --- /dev/null +++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestDataSource.java
@@ -0,0 +1,50 @@ +/* @(#)TestDataSource.java 1.1 98/02/09 + * + * Copyright (c) 1997-1998 Sun Microsystems, Inc. All Rights Reserved. + * This software is the confidential and proprietary information of Sun + * Microsystems, Inc. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with Sun. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + */ + +package javasoft.sqe.tests.api.javax.activation.TestClasses; + +import javax.activation.*; +import java.io.*; + +/** + * A TestDataSource for the DataHandler tests. It will return a + * the passed in byte stream via the getinputstream method. + */ + +public class TestDataSource implements DataSource { + + byte byte_array[] = null; + + public TestDataSource(byte byte_array[]){ + this.byte_array = byte_array; + } + + public InputStream getInputStream() throws IOException { + ByteArrayInputStream bis = new ByteArrayInputStream(byte_array); + return bis; + + } + public OutputStream getOutputStream() throws IOException { + return null; + } + public String getContentType(){ + return "application/octet-stream"; + } + public String getName() { + return "name"; + } +}
diff --git a/src/share/classes/javasoft/sqe/api/javax/activation/util/TestFileTypeMap.java b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestFileTypeMap.java new file mode 100644 index 0000000..37e0142 --- /dev/null +++ b/src/share/classes/javasoft/sqe/api/javax/activation/util/TestFileTypeMap.java
@@ -0,0 +1,40 @@ +/* @(#)TestFileTypeMap.java 1.1 98/02/09 + * + * Copyright (c) 1997-1998 Sun Microsystems, Inc. All Rights Reserved. + * This software is the confidential and proprietary information of Sun + * Microsystems, Inc. ("Confidential Information"). You shall not + * disclose such Confidential Information and shall use it only in + * accordance with the terms of the license agreement you entered into + * with Sun. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * + */ + +package javasoft.sqe.tests.api.javax.activation.TestClasses; + +import java.io.*; +import javax.activation.*; + +/** Test utility library used by FileTypeMap tests. + */ + +public class TestFileTypeMap extends FileTypeMap +{ + public static String getTestType(){ + return "test/test"; + } + + public String getContentType(File f) { + return getTestType(); + } + + public String getContentType(String filename){ + return getTestType(); + } +}
diff --git a/src/share/classes/javax/activation/ActivationDataFlavor.java b/src/share/classes/javax/activation/ActivationDataFlavor.java new file mode 100644 index 0000000..ee47d92 --- /dev/null +++ b/src/share/classes/javax/activation/ActivationDataFlavor.java
@@ -0,0 +1,263 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)ActivationDataFlavor.java 1.16 07/07/13 + */ + +package javax.activation; + +import java.awt.datatransfer.DataFlavor; +import java.io.IOException; +import javax.activation.MimeType; + +/** + * The ActivationDataFlavor class is a special subclass of + * <code>java.awt.datatransfer.DataFlavor</code>. It allows the JAF to + * set all three values stored by the DataFlavor class via a new + * constructor. It also contains improved MIME parsing in the <code>equals + * </code> method. Except for the improved parsing, its semantics are + * identical to that of the JDK's DataFlavor class. + */ + +public class ActivationDataFlavor extends DataFlavor { + + /* + * Raison d'etre: + * + * The DataFlavor class included in JDK 1.1 has several limitations + * including piss poor MIME type parsing, and the limitation of + * only supporting serialized objects and InputStreams as + * representation objects. This class 'fixes' that. + */ + + // I think for now I'll keep copies of all the variables and + // then later I may choose try to better coexist with the base + // class *sigh* + private String mimeType = null; + private MimeType mimeObject = null; + private String humanPresentableName = null; + private Class representationClass = null; + + /** + * Construct a DataFlavor that represents an arbitrary + * Java object. This constructor is an extension of the + * JDK's DataFlavor in that it allows the explicit setting + * of all three DataFlavor attributes. + * <p> + * The returned DataFlavor will have the following characteristics: + * <p> + * representationClass = representationClass<br> + * mimeType = mimeType<br> + * humanName = humanName + * <p> + * + * @param representationClass the class used in this DataFlavor + * @param mimeType the MIME type of the data represented by this class + * @param humanPresentableName the human presentable name of the flavor + */ + public ActivationDataFlavor(Class representationClass, + String mimeType, String humanPresentableName) { + super(mimeType, humanPresentableName); // need to call super + + // init private variables: + this.mimeType = mimeType; + this.humanPresentableName = humanPresentableName; + this.representationClass = representationClass; + } + + /** + * Construct a DataFlavor that represents a MimeType. + * <p> + * The returned DataFlavor will have the following characteristics: + * <p> + * If the mimeType is "application/x-java-serialized-object; + * class=", the result is the same as calling new + * DataFlavor(Class.forName()) as above. + * <p> + * otherwise: + * <p> + * representationClass = InputStream<p> + * mimeType = mimeType<p> + * + * @param representationClass the class used in this DataFlavor + * @param humanPresentableName the human presentable name of the flavor + */ + public ActivationDataFlavor(Class representationClass, + String humanPresentableName) { + super(representationClass, humanPresentableName); + this.mimeType = super.getMimeType(); + this.representationClass = representationClass; + this.humanPresentableName = humanPresentableName; + } + + /** + * Construct a DataFlavor that represents a MimeType. + * <p> + * The returned DataFlavor will have the following characteristics: + * <p> + * If the mimeType is "application/x-java-serialized-object; class=", + * the result is the same as calling new DataFlavor(Class.forName()) as + * above, otherwise: + * <p> + * representationClass = InputStream<p> + * mimeType = mimeType + * + * @param mimeType the MIME type of the data represented by this class + * @param humanPresentableName the human presentable name of the flavor + */ + public ActivationDataFlavor(String mimeType, String humanPresentableName) { + super(mimeType, humanPresentableName); + this.mimeType = mimeType; + try { + this.representationClass = Class.forName("java.io.InputStream"); + } catch (ClassNotFoundException ex) { + // XXX - should never happen, ignore it + } + this.humanPresentableName = humanPresentableName; + } + + /** + * Return the MIME type for this DataFlavor. + * + * @return the MIME type + */ + public String getMimeType() { + return mimeType; + } + + /** + * Return the representation class. + * + * @return the representation class + */ + public Class getRepresentationClass() { + return representationClass; + } + + /** + * Return the Human Presentable name. + * + * @return the human presentable name + */ + public String getHumanPresentableName() { + return humanPresentableName; + } + + /** + * Set the human presentable name. + * + * @param humanPresentableName the name to set + */ + public void setHumanPresentableName(String humanPresentableName) { + this.humanPresentableName = humanPresentableName; + } + + /** + * Compares the DataFlavor passed in with this DataFlavor; calls + * the <code>isMimeTypeEqual</code> method. + * + * @param dataFlavor the DataFlavor to compare with + * @return true if the MIME type and representation class + * are the same + */ + public boolean equals(DataFlavor dataFlavor) { + return (isMimeTypeEqual(dataFlavor) && + dataFlavor.getRepresentationClass() == representationClass); + } + + /** + * Is the string representation of the MIME type passed in equivalent + * to the MIME type of this DataFlavor. <p> + * + * ActivationDataFlavor delegates the comparison of MIME types to + * the MimeType class included as part of the JavaBeans Activation + * Framework. This provides a more robust comparison than is normally + * available in the DataFlavor class. + * + * @param mimeType the MIME type + * @return true if the same MIME type + */ + public boolean isMimeTypeEqual(String mimeType) { + MimeType mt = null; + try { + if (mimeObject == null) + mimeObject = new MimeType(this.mimeType); + mt = new MimeType(mimeType); + } catch (MimeTypeParseException e) { + // something didn't parse, do a crude comparison + return this.mimeType.equalsIgnoreCase(mimeType); + } + + return mimeObject.match(mt); + } + + /** + * Called on DataFlavor for every MIME Type parameter to allow DataFlavor + * subclasses to handle special parameters like the text/plain charset + * parameters, whose values are case insensitive. (MIME type parameter + * values are supposed to be case sensitive). + * <p> + * This method is called for each parameter name/value pair and should + * return the normalized representation of the parameterValue. + * This method is never invoked by this implementation. + * + * @param parameterName the parameter name + * @param parameterValue the parameter value + * @return the normalized parameter value + * @deprecated + */ + protected String normalizeMimeTypeParameter(String parameterName, + String parameterValue) { + return parameterValue; + } + + /** + * Called for each MIME type string to give DataFlavor subtypes the + * opportunity to change how the normalization of MIME types is + * accomplished. + * One possible use would be to add default parameter/value pairs in cases + * where none are present in the MIME type string passed in. + * This method is never invoked by this implementation. + * + * @param mimeType the MIME type + * @return the normalized MIME type + * @deprecated + */ + protected String normalizeMimeType(String mimeType) { + return mimeType; + } +}
diff --git a/src/share/classes/javax/activation/CommandInfo.java b/src/share/classes/javax/activation/CommandInfo.java new file mode 100644 index 0000000..ca3257a --- /dev/null +++ b/src/share/classes/javax/activation/CommandInfo.java
@@ -0,0 +1,151 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)CommandInfo.java 1.12 07/05/14 + */ + +package javax.activation; + +import java.io.*; +import java.beans.Beans; + +/** + * The CommandInfo class is used by CommandMap implementations to + * describe the results of command requests. It provides the requestor + * with both the verb requested, as well as an instance of the + * bean. There is also a method that will return the name of the + * class that implements the command but <i>it is not guaranteed to + * return a valid value</i>. The reason for this is to allow CommandMap + * implmentations that subclass CommandInfo to provide special + * behavior. For example a CommandMap could dynamically generate + * JavaBeans. In this case, it might not be possible to create an + * object with all the correct state information solely from the class + * name. + */ + +public class CommandInfo { + private String verb; + private String className; + + /** + * The Constructor for CommandInfo. + * @param verb The command verb this CommandInfo decribes. + * @param className The command's fully qualified class name. + */ + public CommandInfo(String verb, String className) { + this.verb = verb; + this.className = className; + } + + /** + * Return the command verb. + * + * @return the command verb. + */ + public String getCommandName() { + return verb; + } + + /** + * Return the command's class name. <i>This method MAY return null in + * cases where a CommandMap subclassed CommandInfo for its + * own purposes.</i> In other words, it might not be possible to + * create the correct state in the command by merely knowing + * its class name. <b>DO NOT DEPEND ON THIS METHOD RETURNING + * A VALID VALUE!</b> + * + * @return The class name of the command, or <i>null</i> + */ + public String getCommandClass() { + return className; + } + + /** + * Return the instantiated JavaBean component. + * <p> + * Begin by instantiating the component with + * <code>Beans.instantiate()</code>. + * <p> + * If the bean implements the <code>javax.activation.CommandObject</code> + * interface, call its <code>setCommandContext</code> method. + * <p> + * If the DataHandler parameter is null, then the bean is + * instantiated with no data. NOTE: this may be useful + * if for some reason the DataHandler that is passed in + * throws IOExceptions when this method attempts to + * access its InputStream. It will allow the caller to + * retrieve a reference to the bean if it can be + * instantiated. + * <p> + * If the bean does NOT implement the CommandObject interface, + * this method will check if it implements the + * java.io.Externalizable interface. If it does, the bean's + * readExternal method will be called if an InputStream + * can be acquired from the DataHandler.<p> + * + * @param dh The DataHandler that describes the data to be + * passed to the command. + * @param loader The ClassLoader to be used to instantiate the bean. + * @return The bean + * @see java.beans.Beans#instantiate + * @see javax.activation.CommandObject + */ + public Object getCommandObject(DataHandler dh, ClassLoader loader) + throws IOException, ClassNotFoundException { + Object new_bean = null; + + // try to instantiate the bean + new_bean = java.beans.Beans.instantiate(loader, className); + + // if we got one and it is a CommandObject + if (new_bean != null) { + if (new_bean instanceof CommandObject) { + ((CommandObject)new_bean).setCommandContext(verb, dh); + } else if (new_bean instanceof Externalizable) { + if (dh != null) { + InputStream is = dh.getInputStream(); + if (is != null) { + ((Externalizable)new_bean).readExternal( + new ObjectInputStream(is)); + } + } + } + } + + return new_bean; + } +}
diff --git a/src/share/classes/javax/activation/CommandMap.java b/src/share/classes/javax/activation/CommandMap.java new file mode 100644 index 0000000..7da1e2a --- /dev/null +++ b/src/share/classes/javax/activation/CommandMap.java
@@ -0,0 +1,233 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)CommandMap.java 1.20 07/05/14 + */ + +package javax.activation; + + +/** + * The CommandMap class provides an interface to a registry of + * command objects available in the system. + * Developers are expected to either use the CommandMap + * implementation included with this package (MailcapCommandMap) or + * develop their own. Note that some of the methods in this class are + * abstract. + */ +public abstract class CommandMap { + private static CommandMap defaultCommandMap = null; + + /** + * Get the default CommandMap. + * <p> + * + * <ul> + * <li> In cases where a CommandMap instance has been previously set + * to some value (via <i>setDefaultCommandMap</i>) + * return the CommandMap. + * <li> + * In cases where no CommandMap has been set, the CommandMap + * creates an instance of <code>MailcapCommandMap</code> and + * set that to the default, returning its value. + * + * </ul> + * + * @return the CommandMap + */ + public static CommandMap getDefaultCommandMap() { + if (defaultCommandMap == null) + defaultCommandMap = new MailcapCommandMap(); + + return defaultCommandMap; + } + + /** + * Set the default CommandMap. Reset the CommandMap to the default by + * calling this method with <code>null</code>. + * + * @param commandMap The new default CommandMap. + * @exception SecurityException if the caller doesn't have permission + * to change the default + */ + public static void setDefaultCommandMap(CommandMap commandMap) { + SecurityManager security = System.getSecurityManager(); + if (security != null) { + try { + // if it's ok with the SecurityManager, it's ok with me... + security.checkSetFactory(); + } catch (SecurityException ex) { + // otherwise, we also allow it if this code and the + // factory come from the same class loader (e.g., + // the JAF classes were loaded with the applet classes). + if (CommandMap.class.getClassLoader() != + commandMap.getClass().getClassLoader()) + throw ex; + } + } + defaultCommandMap = commandMap; + } + + /** + * Get the preferred command list from a MIME Type. The actual semantics + * are determined by the implementation of the CommandMap. + * + * @param mimeType the MIME type + * @return the CommandInfo classes that represent the command Beans. + */ + abstract public CommandInfo[] getPreferredCommands(String mimeType); + + /** + * Get the preferred command list from a MIME Type. The actual semantics + * are determined by the implementation of the CommandMap. <p> + * + * The <code>DataSource</code> provides extra information, such as + * the file name, that a CommandMap implementation may use to further + * refine the list of commands that are returned. The implementation + * in this class simply calls the <code>getPreferredCommands</code> + * method that ignores this argument. + * + * @param mimeType the MIME type + * @param ds a DataSource for the data + * @return the CommandInfo classes that represent the command Beans. + * @since JAF 1.1 + */ + public CommandInfo[] getPreferredCommands(String mimeType, DataSource ds) { + return getPreferredCommands(mimeType); + } + + /** + * Get all the available commands for this type. This method + * should return all the possible commands for this MIME type. + * + * @param mimeType the MIME type + * @return the CommandInfo objects representing all the commands. + */ + abstract public CommandInfo[] getAllCommands(String mimeType); + + /** + * Get all the available commands for this type. This method + * should return all the possible commands for this MIME type. <p> + * + * The <code>DataSource</code> provides extra information, such as + * the file name, that a CommandMap implementation may use to further + * refine the list of commands that are returned. The implementation + * in this class simply calls the <code>getAllCommands</code> + * method that ignores this argument. + * + * @param mimeType the MIME type + * @param ds a DataSource for the data + * @return the CommandInfo objects representing all the commands. + * @since JAF 1.1 + */ + public CommandInfo[] getAllCommands(String mimeType, DataSource ds) { + return getAllCommands(mimeType); + } + + /** + * Get the default command corresponding to the MIME type. + * + * @param mimeType the MIME type + * @param cmdName the command name + * @return the CommandInfo corresponding to the command. + */ + abstract public CommandInfo getCommand(String mimeType, String cmdName); + + /** + * Get the default command corresponding to the MIME type. <p> + * + * The <code>DataSource</code> provides extra information, such as + * the file name, that a CommandMap implementation may use to further + * refine the command that is chosen. The implementation + * in this class simply calls the <code>getCommand</code> + * method that ignores this argument. + * + * @param mimeType the MIME type + * @param cmdName the command name + * @param ds a DataSource for the data + * @return the CommandInfo corresponding to the command. + * @since JAF 1.1 + */ + public CommandInfo getCommand(String mimeType, String cmdName, + DataSource ds) { + return getCommand(mimeType, cmdName); + } + + /** + * Locate a DataContentHandler that corresponds to the MIME type. + * The mechanism and semantics for determining this are determined + * by the implementation of the particular CommandMap. + * + * @param mimeType the MIME type + * @return the DataContentHandler for the MIME type + */ + abstract public DataContentHandler createDataContentHandler(String + mimeType); + + /** + * Locate a DataContentHandler that corresponds to the MIME type. + * The mechanism and semantics for determining this are determined + * by the implementation of the particular CommandMap. <p> + * + * The <code>DataSource</code> provides extra information, such as + * the file name, that a CommandMap implementation may use to further + * refine the choice of DataContentHandler. The implementation + * in this class simply calls the <code>createDataContentHandler</code> + * method that ignores this argument. + * + * @param mimeType the MIME type + * @param ds a DataSource for the data + * @return the DataContentHandler for the MIME type + * @since JAF 1.1 + */ + public DataContentHandler createDataContentHandler(String mimeType, + DataSource ds) { + return createDataContentHandler(mimeType); + } + + /** + * Get all the MIME types known to this command map. + * If the command map doesn't support this operation, + * null is returned. + * + * @return array of MIME types as strings, or null if not supported + * @since JAF 1.1 + */ + public String[] getMimeTypes() { + return null; + } +}
diff --git a/src/share/classes/javax/activation/CommandObject.java b/src/share/classes/javax/activation/CommandObject.java new file mode 100644 index 0000000..fe62451 --- /dev/null +++ b/src/share/classes/javax/activation/CommandObject.java
@@ -0,0 +1,67 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)CommandObject.java 1.10 07/05/14 + */ + +package javax.activation; + +import java.io.IOException; + +/** + * JavaBeans components that are Activation Framework aware implement + * this interface to find out which command verb they're being asked + * to perform, and to obtain the DataHandler representing the + * data they should operate on. JavaBeans that don't implement + * this interface may be used as well. Such commands may obtain + * the data using the Externalizable interface, or using an + * application-specific method.<p> + */ +public interface CommandObject { + + /** + * Initialize the Command with the verb it is requested to handle + * and the DataHandler that describes the data it will + * operate on. <b>NOTE:</b> it is acceptable for the caller + * to pass <i>null</i> as the value for <code>DataHandler</code>. + * + * @param verb The Command Verb this object refers to. + * @param dh The DataHandler. + */ + public void setCommandContext(String verb, DataHandler dh) + throws IOException; +}
diff --git a/src/share/classes/javax/activation/DataContentHandler.java b/src/share/classes/javax/activation/DataContentHandler.java new file mode 100644 index 0000000..18aa837 --- /dev/null +++ b/src/share/classes/javax/activation/DataContentHandler.java
@@ -0,0 +1,114 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)DataContentHandler.java 1.17 07/05/14 + */ + +package javax.activation; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.InputStream; +import java.io.IOException; +import java.io.OutputStream; +import javax.activation.DataSource; + +/** + * The DataContentHandler interface is implemented by objects that can + * be used to extend the capabilities of the DataHandler's implementation + * of the Transferable interface. Through <code>DataContentHandlers</code> + * the framework can be extended to convert streams in to objects, and + * to write objects to streams. <p> + * + * Applications don't generally call the methods in DataContentHandlers + * directly. Instead, an application calls the equivalent methods in + * DataHandler. The DataHandler will attempt to find an appropriate + * DataContentHandler that corresponds to its MIME type using the + * current DataContentHandlerFactory. The DataHandler then calls + * through to the methods in the DataContentHandler. + */ + +public interface DataContentHandler { + /** + * Returns an array of DataFlavor objects indicating the flavors the + * data can be provided in. The array should be ordered according to + * preference for providing the data (from most richly descriptive to + * least descriptive). + * + * @return The DataFlavors. + */ + public DataFlavor[] getTransferDataFlavors(); + + /** + * Returns an object which represents the data to be transferred. + * The class of the object returned is defined by the representation class + * of the flavor. + * + * @param df The DataFlavor representing the requested type. + * @param ds The DataSource representing the data to be converted. + * @return The constructed Object. + * @exception UnsupportedFlavorException if the handler doesn't + * support the requested flavor + * @exception IOException if the data can't be accessed + */ + public Object getTransferData(DataFlavor df, DataSource ds) + throws UnsupportedFlavorException, IOException; + + /** + * Return an object representing the data in its most preferred form. + * Generally this will be the form described by the first DataFlavor + * returned by the <code>getTransferDataFlavors</code> method. + * + * @param ds The DataSource representing the data to be converted. + * @return The constructed Object. + * @exception IOException if the data can't be accessed + */ + public Object getContent(DataSource ds) throws IOException; + + /** + * Convert the object to a byte stream of the specified MIME type + * and write it to the output stream. + * + * @param obj The object to be converted. + * @param mimeType The requested MIME type of the resulting byte stream. + * @param os The output stream into which to write the converted + * byte stream. + * @exception IOException errors writing to the stream + */ + public void writeTo(Object obj, String mimeType, OutputStream os) + throws IOException; +}
diff --git a/src/share/classes/javax/activation/DataContentHandlerFactory.java b/src/share/classes/javax/activation/DataContentHandlerFactory.java new file mode 100644 index 0000000..27206a9 --- /dev/null +++ b/src/share/classes/javax/activation/DataContentHandlerFactory.java
@@ -0,0 +1,61 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)DataContentHandlerFactory.java 1.7 07/05/14 + */ + +package javax.activation; + +/** + * This interface defines a factory for <code>DataContentHandlers</code>. An + * implementation of this interface should map a MIME type into an + * instance of DataContentHandler. The design pattern for classes implementing + * this interface is the same as for the ContentHandler mechanism used in + * <code>java.net.URL</code>. + */ + +public interface DataContentHandlerFactory { + + /** + * Creates a new DataContentHandler object for the MIME type. + * + * @param mimeType the MIME type to create the DataContentHandler for. + * @return The new <code>DataContentHandler</code>, or <i>null</i> + * if none are found. + */ + public DataContentHandler createDataContentHandler(String mimeType); +}
diff --git a/src/share/classes/javax/activation/DataHandler.java b/src/share/classes/javax/activation/DataHandler.java new file mode 100644 index 0000000..901a93f --- /dev/null +++ b/src/share/classes/javax/activation/DataHandler.java
@@ -0,0 +1,908 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)DataHandler.java 1.41 07/05/14 + */ + +package javax.activation; + +import java.io.InputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; +import java.io.OutputStreamWriter; +import java.net.URL; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.UnsupportedFlavorException; + +/** + * The DataHandler class provides a consistent interface to data + * available in many different sources and formats. + * It manages simple stream to string conversions and related operations + * using DataContentHandlers. + * It provides access to commands that can operate on the data. + * The commands are found using a CommandMap. <p> + * + * <b>DataHandler and the Transferable Interface</b><p> + * DataHandler implements the Transferable interface so that data can + * be used in AWT data transfer operations, such as cut and paste and + * drag and drop. The implementation of the Transferable interface + * relies on the availability of an installed DataContentHandler + * object corresponding to the MIME type of the data represented in + * the specific instance of the DataHandler.<p> + * + * <b>DataHandler and CommandMaps</b><p> + * The DataHandler keeps track of the current CommandMap that it uses to + * service requests for commands (<code>getCommand</code>, + * <code>getAllCommands</code>, <code>getPreferredCommands</code>). + * Each instance of a DataHandler may have a CommandMap associated with + * it using the <code>setCommandMap</code> method. If a CommandMap was + * not set, DataHandler calls the <code>getDefaultCommandMap</code> + * method in CommandMap and uses the value it returns. See + * <i>CommandMap</i> for more information. <p> + * + * <b>DataHandler and URLs</b><p> + * The current DataHandler implementation creates a private + * instance of URLDataSource when it is constructed with a URL. + * + * @see javax.activation.CommandMap + * @see javax.activation.DataContentHandler + * @see javax.activation.DataSource + * @see javax.activation.URLDataSource + */ + +public class DataHandler implements Transferable { + + // Use the datasource to indicate whether we were started via the + // DataSource constructor or the object constructor. + private DataSource dataSource = null; + private DataSource objDataSource = null; + + // The Object and mimetype from the constructor (if passed in). + // object remains null if it was instantiated with a + // DataSource. + private Object object = null; + private String objectMimeType = null; + + // Keep track of the CommandMap + private CommandMap currentCommandMap = null; + + // our transfer flavors + private static final DataFlavor emptyFlavors[] = new DataFlavor[0]; + private DataFlavor transferFlavors[] = emptyFlavors; + + // our DataContentHandler + private DataContentHandler dataContentHandler = null; + private DataContentHandler factoryDCH = null; + + // our DataContentHandlerFactory + private static DataContentHandlerFactory factory = null; + private DataContentHandlerFactory oldFactory = null; + // the short representation of the ContentType (sans params) + private String shortType = null; + + /** + * Create a <code>DataHandler</code> instance referencing the + * specified DataSource. The data exists in a byte stream form. + * The DataSource will provide an InputStream to access the data. + * + * @param ds the DataSource + */ + public DataHandler(DataSource ds) { + // save a reference to the incoming DS + dataSource = ds; + oldFactory = factory; // keep track of the factory + } + + /** + * Create a <code>DataHandler</code> instance representing an object + * of this MIME type. This constructor is + * used when the application already has an in-memory representation + * of the data in the form of a Java Object. + * + * @param obj the Java Object + * @param mimeType the MIME type of the object + */ + public DataHandler(Object obj, String mimeType) { + object = obj; + objectMimeType = mimeType; + oldFactory = factory; // keep track of the factory + } + + /** + * Create a <code>DataHandler</code> instance referencing a URL. + * The DataHandler internally creates a <code>URLDataSource</code> + * instance to represent the URL. + * + * @param url a URL object + */ + public DataHandler(URL url) { + dataSource = new URLDataSource(url); + oldFactory = factory; // keep track of the factory + } + + /** + * Return the CommandMap for this instance of DataHandler. + */ + private synchronized CommandMap getCommandMap() { + if (currentCommandMap != null) + return currentCommandMap; + else + return CommandMap.getDefaultCommandMap(); + } + + /** + * Return the DataSource associated with this instance + * of DataHandler. + * <p> + * For DataHandlers that have been instantiated with a DataSource, + * this method returns the DataSource that was used to create the + * DataHandler object. In other cases the DataHandler + * constructs a DataSource from the data used to construct + * the DataHandler. DataSources created for DataHandlers <b>not</b> + * instantiated with a DataSource are cached for performance + * reasons. + * + * @return a valid DataSource object for this DataHandler + */ + public DataSource getDataSource() { + if (dataSource == null) { + // create one on the fly + if (objDataSource == null) + objDataSource = new DataHandlerDataSource(this); + return objDataSource; + } + return dataSource; + } + + /** + * Return the name of the data object. If this DataHandler + * was created with a DataSource, this method calls through + * to the <code>DataSource.getName</code> method, otherwise it + * returns <i>null</i>. + * + * @return the name of the object + */ + public String getName() { + if (dataSource != null) + return dataSource.getName(); + else + return null; + } + + /** + * Return the MIME type of this object as retrieved from + * the source object. Note that this is the <i>full</i> + * type with parameters. + * + * @return the MIME type + */ + public String getContentType() { + if (dataSource != null) // data source case + return dataSource.getContentType(); + else + return objectMimeType; // obj/type case + } + + /** + * Get the InputStream for this object. <p> + * + * For DataHandlers instantiated with a DataSource, the DataHandler + * calls the <code>DataSource.getInputStream</code> method and + * returns the result to the caller. + * <p> + * For DataHandlers instantiated with an Object, the DataHandler + * first attempts to find a DataContentHandler for the Object. If + * the DataHandler can not find a DataContentHandler for this MIME + * type, it throws an UnsupportedDataTypeException. If it is + * successful, it creates a pipe and a thread. The thread uses the + * DataContentHandler's <code>writeTo</code> method to write the + * stream data into one end of the pipe. The other end of the pipe + * is returned to the caller. Because a thread is created to copy + * the data, IOExceptions that may occur during the copy can not be + * propagated back to the caller. The result is an empty stream.<p> + * + * @return the InputStream representing this data + * @exception IOException if an I/O error occurs + * + * @see javax.activation.DataContentHandler#writeTo + * @see javax.activation.UnsupportedDataTypeException + */ + public InputStream getInputStream() throws IOException { + InputStream ins = null; + + if (dataSource != null) { + ins = dataSource.getInputStream(); + } else { + DataContentHandler dch = getDataContentHandler(); + // we won't even try if we can't get a dch + if (dch == null) + throw new UnsupportedDataTypeException( + "no DCH for MIME type " + getBaseType()); + + if (dch instanceof ObjectDataContentHandler) { + if (((ObjectDataContentHandler)dch).getDCH() == null) + throw new UnsupportedDataTypeException( + "no object DCH for MIME type " + getBaseType()); + } + // there is none but the default^^^^^^^^^^^^^^^^ + final DataContentHandler fdch = dch; + + // from bill s. + // ce n'est pas une pipe! + // + // NOTE: This block of code needs to throw exceptions, but + // can't because it is in another thread!!! ARG! + // + final PipedOutputStream pos = new PipedOutputStream(); + PipedInputStream pin = new PipedInputStream(pos); + new Thread( + new Runnable() { + public void run() { + try { + fdch.writeTo(object, objectMimeType, pos); + } catch (IOException e) { + + } finally { + try { + pos.close(); + } catch (IOException ie) { } + } + } + }, + "DataHandler.getInputStream").start(); + ins = pin; + } + + return ins; + } + + /** + * Write the data to an <code>OutputStream</code>.<p> + * + * If the DataHandler was created with a DataSource, writeTo + * retrieves the InputStream and copies the bytes from the + * InputStream to the OutputStream passed in. + * <p> + * If the DataHandler was created with an object, writeTo + * retrieves the DataContentHandler for the object's type. + * If the DataContentHandler was found, it calls the + * <code>writeTo</code> method on the <code>DataContentHandler</code>. + * + * @param os the OutputStream to write to + * @exception IOException if an I/O error occurs + */ + public void writeTo(OutputStream os) throws IOException { + // for the DataSource case + if (dataSource != null) { + InputStream is = null; + byte data[] = new byte[8*1024]; + int bytes_read; + + is = dataSource.getInputStream(); + + try { + while ((bytes_read = is.read(data)) > 0) { + os.write(data, 0, bytes_read); + } + } finally { + is.close(); + is = null; + } + } else { // for the Object case + DataContentHandler dch = getDataContentHandler(); + dch.writeTo(object, objectMimeType, os); + } + } + + /** + * Get an OutputStream for this DataHandler to allow overwriting + * the underlying data. + * If the DataHandler was created with a DataSource, the + * DataSource's <code>getOutputStream</code> method is called. + * Otherwise, <code>null</code> is returned. + * + * @return the OutputStream + * + * @see javax.activation.DataSource#getOutputStream + * @see javax.activation.URLDataSource + */ + public OutputStream getOutputStream() throws IOException { + if (dataSource != null) + return dataSource.getOutputStream(); + else + return null; + } + + /** + * Return the DataFlavors in which this data is available. <p> + * + * Returns an array of DataFlavor objects indicating the flavors + * the data can be provided in. The array is usually ordered + * according to preference for providing the data, from most + * richly descriptive to least richly descriptive.<p> + * + * The DataHandler attempts to find a DataContentHandler that + * corresponds to the MIME type of the data. If one is located, + * the DataHandler calls the DataContentHandler's + * <code>getTransferDataFlavors</code> method. <p> + * + * If a DataContentHandler can <i>not</i> be located, and if the + * DataHandler was created with a DataSource (or URL), one + * DataFlavor is returned that represents this object's MIME type + * and the <code>java.io.InputStream</code> class. If the + * DataHandler was created with an object and a MIME type, + * getTransferDataFlavors returns one DataFlavor that represents + * this object's MIME type and the object's class. + * + * @return an array of data flavors in which this data can be transferred + * @see javax.activation.DataContentHandler#getTransferDataFlavors + */ + public synchronized DataFlavor[] getTransferDataFlavors() { + if (factory != oldFactory) // if the factory has changed, clear cache + transferFlavors = emptyFlavors; + + // if it's not set, set it... + if (transferFlavors == emptyFlavors) + transferFlavors = getDataContentHandler().getTransferDataFlavors(); + return transferFlavors; + } + + /** + * Returns whether the specified data flavor is supported + * for this object.<p> + * + * This method iterates through the DataFlavors returned from + * <code>getTransferDataFlavors</code>, comparing each with + * the specified flavor. + * + * @param flavor the requested flavor for the data + * @return true if the data flavor is supported + * @see javax.activation.DataHandler#getTransferDataFlavors + */ + public boolean isDataFlavorSupported(DataFlavor flavor) { + DataFlavor[] lFlavors = getTransferDataFlavors(); + + for (int i = 0; i < lFlavors.length; i++) { + if (lFlavors[i].equals(flavor)) + return true; + } + return false; + } + + /** + * Returns an object that represents the data to be + * transferred. The class of the object returned is defined by the + * representation class of the data flavor.<p> + * + * <b>For DataHandler's created with DataSources or URLs:</b><p> + * + * The DataHandler attempts to locate a DataContentHandler + * for this MIME type. If one is found, the passed in DataFlavor + * and the type of the data are passed to its <code>getTransferData</code> + * method. If the DataHandler fails to locate a DataContentHandler + * and the flavor specifies this object's MIME type and the + * <code>java.io.InputStream</code> class, this object's InputStream + * is returned. + * Otherwise it throws an UnsupportedFlavorException. <p> + * + * <b>For DataHandler's created with Objects:</b><p> + * + * The DataHandler attempts to locate a DataContentHandler + * for this MIME type. If one is found, the passed in DataFlavor + * and the type of the data are passed to its getTransferData + * method. If the DataHandler fails to locate a DataContentHandler + * and the flavor specifies this object's MIME type and its class, + * this DataHandler's referenced object is returned. + * Otherwise it throws an UnsupportedFlavorException. + * + * @param flavor the requested flavor for the data + * @return the object + * @exception UnsupportedFlavorException if the data could not be + * converted to the requested flavor + * @exception IOException if an I/O error occurs + * @see javax.activation.ActivationDataFlavor + */ + public Object getTransferData(DataFlavor flavor) + throws UnsupportedFlavorException, IOException { + return getDataContentHandler().getTransferData(flavor, dataSource); + } + + /** + * Set the CommandMap for use by this DataHandler. + * Setting it to <code>null</code> causes the CommandMap to revert + * to the CommandMap returned by the + * <code>CommandMap.getDefaultCommandMap</code> method. + * Changing the CommandMap, or setting it to <code>null</code>, + * clears out any data cached from the previous CommandMap. + * + * @param commandMap the CommandMap to use in this DataHandler + * + * @see javax.activation.CommandMap#setDefaultCommandMap + */ + public synchronized void setCommandMap(CommandMap commandMap) { + if (commandMap != currentCommandMap || commandMap == null) { + // clear cached values... + transferFlavors = emptyFlavors; + dataContentHandler = null; + + currentCommandMap = commandMap; + } + } + + /** + * Return the <i>preferred</i> commands for this type of data. + * This method calls the <code>getPreferredCommands</code> method + * in the CommandMap associated with this instance of DataHandler. + * This method returns an array that represents a subset of + * available commands. In cases where multiple commands for the + * MIME type represented by this DataHandler are present, the + * installed CommandMap chooses the appropriate commands. + * + * @return the CommandInfo objects representing the preferred commands + * + * @see javax.activation.CommandMap#getPreferredCommands + */ + public CommandInfo[] getPreferredCommands() { + if (dataSource != null) + return getCommandMap().getPreferredCommands(getBaseType(), + dataSource); + else + return getCommandMap().getPreferredCommands(getBaseType()); + } + + /** + * Return all the commands for this type of data. + * This method returns an array containing all commands + * for the type of data represented by this DataHandler. The + * MIME type for the underlying data represented by this DataHandler + * is used to call through to the <code>getAllCommands</code> method + * of the CommandMap associated with this DataHandler. + * + * @return the CommandInfo objects representing all the commands + * + * @see javax.activation.CommandMap#getAllCommands + */ + public CommandInfo[] getAllCommands() { + if (dataSource != null) + return getCommandMap().getAllCommands(getBaseType(), dataSource); + else + return getCommandMap().getAllCommands(getBaseType()); + } + + /** + * Get the command <i>cmdName</i>. Use the search semantics as + * defined by the CommandMap installed in this DataHandler. The + * MIME type for the underlying data represented by this DataHandler + * is used to call through to the <code>getCommand</code> method + * of the CommandMap associated with this DataHandler. + * + * @param cmdName the command name + * @return the CommandInfo corresponding to the command + * + * @see javax.activation.CommandMap#getCommand + */ + public CommandInfo getCommand(String cmdName) { + if (dataSource != null) + return getCommandMap().getCommand(getBaseType(), cmdName, + dataSource); + else + return getCommandMap().getCommand(getBaseType(), cmdName); + } + + /** + * Return the data in its preferred Object form. <p> + * + * If the DataHandler was instantiated with an object, return + * the object. <p> + * + * If the DataHandler was instantiated with a DataSource, + * this method uses a DataContentHandler to return the content + * object for the data represented by this DataHandler. If no + * <code>DataContentHandler</code> can be found for the + * the type of this data, the DataHandler returns an + * InputStream for the data. + * + * @return the content. + * @exception IOException if an IOException occurs during + * this operation. + */ + public Object getContent() throws IOException { + if (object != null) + return object; + else + return getDataContentHandler().getContent(getDataSource()); + } + + /** + * A convenience method that takes a CommandInfo object + * and instantiates the corresponding command, usually + * a JavaBean component. + * <p> + * This method calls the CommandInfo's <code>getCommandObject</code> + * method with the <code>ClassLoader</code> used to load + * the <code>javax.activation.DataHandler</code> class itself. + * + * @param cmdinfo the CommandInfo corresponding to a command + * @return the instantiated command object + */ + public Object getBean(CommandInfo cmdinfo) { + Object bean = null; + + try { + // make the bean + ClassLoader cld = null; + // First try the "application's" class loader. + cld = SecuritySupport.getContextClassLoader(); + if (cld == null) + cld = this.getClass().getClassLoader(); + bean = cmdinfo.getCommandObject(this, cld); + } catch (IOException e) { + } catch (ClassNotFoundException e) { } + + return bean; + } + + /** + * Get the DataContentHandler for this DataHandler: <p> + * + * If a DataContentHandlerFactory is set, use it. + * Otherwise look for an object to serve DCH in the + * following order: <p> + * + * 1) if a factory is set, use it <p> + * 2) if a CommandMap is set, use it <p> + * 3) use the default CommandMap <p> + * + * In any case, wrap the real DataContentHandler with one of our own + * to handle any missing cases, fill in defaults, and to ensure that + * we always have a non-null DataContentHandler. + * + * @return the requested DataContentHandler + */ + private synchronized DataContentHandler getDataContentHandler() { + + // make sure the factory didn't change + if (factory != oldFactory) { + oldFactory = factory; + factoryDCH = null; + dataContentHandler = null; + transferFlavors = emptyFlavors; + } + + if (dataContentHandler != null) + return dataContentHandler; + + String simpleMT = getBaseType(); + + if (factoryDCH == null && factory != null) + factoryDCH = factory.createDataContentHandler(simpleMT); + + if (factoryDCH != null) + dataContentHandler = factoryDCH; + + if (dataContentHandler == null) { + if (dataSource != null) + dataContentHandler = getCommandMap(). + createDataContentHandler(simpleMT, dataSource); + else + dataContentHandler = getCommandMap(). + createDataContentHandler(simpleMT); + } + + // getDataContentHandler always uses these 'wrapper' handlers + // to make sure it returns SOMETHING meaningful... + if (dataSource != null) + dataContentHandler = new DataSourceDataContentHandler( + dataContentHandler, + dataSource); + else + dataContentHandler = new ObjectDataContentHandler( + dataContentHandler, + object, + objectMimeType); + return dataContentHandler; + } + + /** + * Use the MimeType class to extract the MIME type/subtype, + * ignoring the parameters. The type is cached. + */ + private synchronized String getBaseType() { + if (shortType == null) { + String ct = getContentType(); + try { + MimeType mt = new MimeType(ct); + shortType = mt.getBaseType(); + } catch (MimeTypeParseException e) { + shortType = ct; + } + } + return shortType; + } + + /** + * Sets the DataContentHandlerFactory. The DataContentHandlerFactory + * is called first to find DataContentHandlers. + * The DataContentHandlerFactory can only be set once. + * <p> + * If the DataContentHandlerFactory has already been set, + * this method throws an Error. + * + * @param newFactory the DataContentHandlerFactory + * @exception Error if the factory has already been defined. + * + * @see javax.activation.DataContentHandlerFactory + */ + public static synchronized void setDataContentHandlerFactory( + DataContentHandlerFactory newFactory) { + if (factory != null) + throw new Error("DataContentHandlerFactory already defined"); + + SecurityManager security = System.getSecurityManager(); + if (security != null) { + try { + // if it's ok with the SecurityManager, it's ok with me... + security.checkSetFactory(); + } catch (SecurityException ex) { + // otherwise, we also allow it if this code and the + // factory come from the same class loader (e.g., + // the JAF classes were loaded with the applet classes). + if (DataHandler.class.getClassLoader() != + newFactory.getClass().getClassLoader()) + throw ex; + } + } + factory = newFactory; + } +} + +/** + * The DataHanderDataSource class implements the + * DataSource interface when the DataHandler is constructed + * with an Object and a mimeType string. + */ +class DataHandlerDataSource implements DataSource { + DataHandler dataHandler = null; + + /** + * The constructor. + */ + public DataHandlerDataSource(DataHandler dh) { + this.dataHandler = dh; + } + + /** + * Returns an <code>InputStream</code> representing this object. + * @return the <code>InputStream</code> + */ + public InputStream getInputStream() throws IOException { + return dataHandler.getInputStream(); + } + + /** + * Returns the <code>OutputStream</code> for this object. + * @return the <code>OutputStream</code> + */ + public OutputStream getOutputStream() throws IOException { + return dataHandler.getOutputStream(); + } + + /** + * Returns the MIME type of the data represented by this object. + * @return the MIME type + */ + public String getContentType() { + return dataHandler.getContentType(); + } + + /** + * Returns the name of this object. + * @return the name of this object + */ + public String getName() { + return dataHandler.getName(); // what else would it be? + } +} + +/* + * DataSourceDataContentHandler + * + * This is a <i>private</i> DataContentHandler that wraps the real + * DataContentHandler in the case where the DataHandler was instantiated + * with a DataSource. + */ +class DataSourceDataContentHandler implements DataContentHandler { + private DataSource ds = null; + private DataFlavor transferFlavors[] = null; + private DataContentHandler dch = null; + + /** + * The constructor. + */ + public DataSourceDataContentHandler(DataContentHandler dch, DataSource ds) { + this.ds = ds; + this.dch = dch; + } + + /** + * Return the DataFlavors for this <code>DataContentHandler</code>. + * @return the DataFlavors + */ + public DataFlavor[] getTransferDataFlavors() { + + if (transferFlavors == null) { + if (dch != null) { // is there a dch? + transferFlavors = dch.getTransferDataFlavors(); + } else { + transferFlavors = new DataFlavor[1]; + transferFlavors[0] = + new ActivationDataFlavor(ds.getContentType(), + ds.getContentType()); + } + } + return transferFlavors; + } + + /** + * Return the Transfer Data of type DataFlavor from InputStream. + * @param df the DataFlavor + * @param ds the DataSource + * @return the constructed Object + */ + public Object getTransferData(DataFlavor df, DataSource ds) throws + UnsupportedFlavorException, IOException { + + if (dch != null) + return dch.getTransferData(df, ds); + else if (df.equals(getTransferDataFlavors()[0])) // only have one now + return ds.getInputStream(); + else + throw new UnsupportedFlavorException(df); + } + + public Object getContent(DataSource ds) throws IOException { + + if (dch != null) + return dch.getContent(ds); + else + return ds.getInputStream(); + } + + /** + * Write the object to the output stream. + */ + public void writeTo(Object obj, String mimeType, OutputStream os) + throws IOException { + if (dch != null) + dch.writeTo(obj, mimeType, os); + else + throw new UnsupportedDataTypeException( + "no DCH for content type " + ds.getContentType()); + } +} + +/* + * ObjectDataContentHandler + * + * This is a <i>private</i> DataContentHandler that wraps the real + * DataContentHandler in the case where the DataHandler was instantiated + * with an object. + */ +class ObjectDataContentHandler implements DataContentHandler { + private DataFlavor transferFlavors[] = null; + private Object obj; + private String mimeType; + private DataContentHandler dch = null; + + /** + * The constructor. + */ + public ObjectDataContentHandler(DataContentHandler dch, + Object obj, String mimeType) { + this.obj = obj; + this.mimeType = mimeType; + this.dch = dch; + } + + /** + * Return the DataContentHandler for this object. + * Used only by the DataHandler class. + */ + public DataContentHandler getDCH() { + return dch; + } + + /** + * Return the DataFlavors for this <code>DataContentHandler</code>. + * @return the DataFlavors + */ + public synchronized DataFlavor[] getTransferDataFlavors() { + if (transferFlavors == null) { + if (dch != null) { + transferFlavors = dch.getTransferDataFlavors(); + } else { + transferFlavors = new DataFlavor[1]; + transferFlavors[0] = new ActivationDataFlavor(obj.getClass(), + mimeType, mimeType); + } + } + return transferFlavors; + } + + /** + * Return the Transfer Data of type DataFlavor from InputStream. + * @param df the DataFlavor + * @param ds the DataSource + * @return the constructed Object + */ + public Object getTransferData(DataFlavor df, DataSource ds) + throws UnsupportedFlavorException, IOException { + + if (dch != null) + return dch.getTransferData(df, ds); + else if (df.equals(getTransferDataFlavors()[0])) // only have one now + return obj; + else + throw new UnsupportedFlavorException(df); + + } + + public Object getContent(DataSource ds) { + return obj; + } + + /** + * Write the object to the output stream. + */ + public void writeTo(Object obj, String mimeType, OutputStream os) + throws IOException { + if (dch != null) + dch.writeTo(obj, mimeType, os); + else if (obj instanceof byte[]) + os.write((byte[])obj); + else if (obj instanceof String) { + OutputStreamWriter osw = new OutputStreamWriter(os); + osw.write((String)obj); + osw.flush(); + } else + throw new UnsupportedDataTypeException( + "no object DCH for MIME type " + this.mimeType); + } +}
diff --git a/src/share/classes/javax/activation/DataSource.java b/src/share/classes/javax/activation/DataSource.java new file mode 100644 index 0000000..5d9ed1c --- /dev/null +++ b/src/share/classes/javax/activation/DataSource.java
@@ -0,0 +1,99 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)DataSource.java 1.12 07/05/14 + */ + +package javax.activation; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +/** + * The DataSource interface provides the JavaBeans Activation Framework + * with an abstraction of an arbitrary collection of data. It + * provides a type for that data as well as access + * to it in the form of <code>InputStreams</code> and + * <code>OutputStreams</code> where appropriate. + */ + +public interface DataSource { + + /** + * This method returns an <code>InputStream</code> representing + * the data and throws the appropriate exception if it can + * not do so. Note that a new <code>InputStream</code> object must be + * returned each time this method is called, and the stream must be + * positioned at the beginning of the data. + * + * @return an InputStream + */ + public InputStream getInputStream() throws IOException; + + /** + * This method returns an <code>OutputStream</code> where the + * data can be written and throws the appropriate exception if it can + * not do so. Note that a new <code>OutputStream</code> object must + * be returned each time this method is called, and the stream must + * be positioned at the location the data is to be written. + * + * @return an OutputStream + */ + public OutputStream getOutputStream() throws IOException; + + /** + * This method returns the MIME type of the data in the form of a + * string. It should always return a valid type. It is suggested + * that getContentType return "application/octet-stream" if the + * DataSource implementation can not determine the data type. + * + * @return the MIME Type + */ + public String getContentType(); + + /** + * Return the <i>name</i> of this object where the name of the object + * is dependant on the nature of the underlying objects. DataSources + * encapsulating files may choose to return the filename of the object. + * (Typically this would be the last component of the filename, not an + * entire pathname.) + * + * @return the name of the object. + */ + public String getName(); +}
diff --git a/src/share/classes/javax/activation/FileDataSource.java b/src/share/classes/javax/activation/FileDataSource.java new file mode 100644 index 0000000..0900681 --- /dev/null +++ b/src/share/classes/javax/activation/FileDataSource.java
@@ -0,0 +1,171 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)FileDataSource.java 1.10 07/05/14 + */ + +package javax.activation; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileNotFoundException; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import com.sun.activation.registries.MimeTypeFile; + +/** + * The FileDataSource class implements a simple DataSource object + * that encapsulates a file. It provides data typing services via + * a FileTypeMap object. <p> + * + * <b>FileDataSource Typing Semantics</b><p> + * + * The FileDataSource class delegates data typing of files + * to an object subclassed from the FileTypeMap class. + * The <code>setFileTypeMap</code> method can be used to explicitly + * set the FileTypeMap for an instance of FileDataSource. If no + * FileTypeMap is set, the FileDataSource will call the FileTypeMap's + * getDefaultFileTypeMap method to get the System's default FileTypeMap. + * + * @see javax.activation.DataSource + * @see javax.activation.FileTypeMap + * @see javax.activation.MimetypesFileTypeMap + */ +public class FileDataSource implements DataSource { + + // keep track of original 'ref' passed in, non-null + // one indicated which was passed in: + private File _file = null; + private FileTypeMap typeMap = null; + + /** + * Creates a FileDataSource from a File object. <i>Note: + * The file will not actually be opened until a method is + * called that requires the file to be opened.</i> + * + * @param file the file + */ + public FileDataSource(File file) { + _file = file; // save the file Object... + } + + /** + * Creates a FileDataSource from + * the specified path name. <i>Note: + * The file will not actually be opened until a method is + * called that requires the file to be opened.</i> + * + * @param name the system-dependent file name. + */ + public FileDataSource(String name) { + this(new File(name)); // use the file constructor + } + + /** + * This method will return an InputStream representing the + * the data and will throw an IOException if it can + * not do so. This method will return a new + * instance of InputStream with each invocation. + * + * @return an InputStream + */ + public InputStream getInputStream() throws IOException { + return new FileInputStream(_file); + } + + /** + * This method will return an OutputStream representing the + * the data and will throw an IOException if it can + * not do so. This method will return a new instance of + * OutputStream with each invocation. + * + * @return an OutputStream + */ + public OutputStream getOutputStream() throws IOException { + return new FileOutputStream(_file); + } + + /** + * This method returns the MIME type of the data in the form of a + * string. This method uses the currently installed FileTypeMap. If + * there is no FileTypeMap explictly set, the FileDataSource will + * call the <code>getDefaultFileTypeMap</code> method on + * FileTypeMap to acquire a default FileTypeMap. <i>Note: By + * default, the FileTypeMap used will be a MimetypesFileTypeMap.</i> + * + * @return the MIME Type + * @see javax.activation.FileTypeMap#getDefaultFileTypeMap + */ + public String getContentType() { + // check to see if the type map is null? + if (typeMap == null) + return FileTypeMap.getDefaultFileTypeMap().getContentType(_file); + else + return typeMap.getContentType(_file); + } + + /** + * Return the <i>name</i> of this object. The FileDataSource + * will return the file name of the object. + * + * @return the name of the object. + * @see javax.activation.DataSource + */ + public String getName() { + return _file.getName(); + } + + /** + * Return the File object that corresponds to this FileDataSource. + * @return the File object for the file represented by this object. + */ + public File getFile() { + return _file; + } + + /** + * Set the FileTypeMap to use with this FileDataSource + * + * @param map The FileTypeMap for this object. + */ + public void setFileTypeMap(FileTypeMap map) { + typeMap = map; + } +}
diff --git a/src/share/classes/javax/activation/FileTypeMap.java b/src/share/classes/javax/activation/FileTypeMap.java new file mode 100644 index 0000000..8b7079e --- /dev/null +++ b/src/share/classes/javax/activation/FileTypeMap.java
@@ -0,0 +1,131 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)FileTypeMap.java 1.9 07/05/14 + */ + +package javax.activation; + +import java.io.File; + +/** + * The FileTypeMap is an abstract class that provides a data typing + * interface for files. Implementations of this class will + * implement the getContentType methods which will derive a content + * type from a file name or a File object. FileTypeMaps could use any + * scheme to determine the data type, from examining the file extension + * of a file (like the MimetypesFileTypeMap) to opening the file and + * trying to derive its type from the contents of the file. The + * FileDataSource class uses the default FileTypeMap (a MimetypesFileTypeMap + * unless changed) to determine the content type of files. + * + * @see javax.activation.FileTypeMap + * @see javax.activation.FileDataSource + * @see javax.activation.MimetypesFileTypeMap + */ + +public abstract class FileTypeMap { + + private static FileTypeMap defaultMap = null; + + /** + * The default constructor. + */ + public FileTypeMap() { + super(); + } + + /** + * Return the type of the file object. This method should + * always return a valid MIME type. + * + * @param file A file to be typed. + * @return The content type. + */ + abstract public String getContentType(File file); + + /** + * Return the type of the file passed in. This method should + * always return a valid MIME type. + * + * @param filename the pathname of the file. + * @return The content type. + */ + abstract public String getContentType(String filename); + + /** + * Sets the default FileTypeMap for the system. This instance + * will be returned to callers of getDefaultFileTypeMap. + * + * @param map The FileTypeMap. + * @exception SecurityException if the caller doesn't have permission + * to change the default + */ + public static void setDefaultFileTypeMap(FileTypeMap map) { + SecurityManager security = System.getSecurityManager(); + if (security != null) { + try { + // if it's ok with the SecurityManager, it's ok with me... + security.checkSetFactory(); + } catch (SecurityException ex) { + // otherwise, we also allow it if this code and the + // factory come from the same class loader (e.g., + // the JAF classes were loaded with the applet classes). + if (FileTypeMap.class.getClassLoader() != + map.getClass().getClassLoader()) + throw ex; + } + } + defaultMap = map; + } + + /** + * Return the default FileTypeMap for the system. + * If setDefaultFileTypeMap was called, return + * that instance, otherwise return an instance of + * <code>MimetypesFileTypeMap</code>. + * + * @return The default FileTypeMap + * @see javax.activation.FileTypeMap#setDefaultFileTypeMap + */ + public static FileTypeMap getDefaultFileTypeMap() { + // XXX - probably should be synchronized + if (defaultMap == null) + defaultMap = new MimetypesFileTypeMap(); + return defaultMap; + } +}
diff --git a/src/share/classes/javax/activation/MailcapCommandMap.java b/src/share/classes/javax/activation/MailcapCommandMap.java new file mode 100644 index 0000000..5f2c319 --- /dev/null +++ b/src/share/classes/javax/activation/MailcapCommandMap.java
@@ -0,0 +1,714 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can obtain + * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html + * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. + * Sun designates this particular file as subject to the "Classpath" exception + * as provided by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the License + * Header, with the fields enclosed by brackets [] replaced by your own + * identifying information: "Portions Copyrighted [year] + * [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +/* + * @(#)MailcapCommandMap.java 1.42 07/05/14 + */ + + +package javax.activation; + +import java.util.*; +import java.io.*; +import java.net.*; +import com.sun.activation.registries.MailcapFile; +import com.sun.activation.registries.LogSupport; + +/** + * MailcapCommandMap extends the CommandMap + * abstract class. It implements a CommandMap whose configuration + * is based on mailcap files + * (<A HREF="http://www.ietf.org/rfc/rfc1524.txt">RFC 1524</A>). + * The MailcapCommandMap can be configured both programmatically + * and via configuration files. + * <p> + * <b>Mailcap file search order:</b><p> + * The MailcapCommandMap looks in various places in the user's + * system for mailcap file entries. When requests are made + * to search for commands in the MailcapCommandMap, it searches + * mailcap files in the following order: + * <p> + * <ol> + * <li> Programatically added entries to the MailcapCommandMap instance. + * <li> The file <code>.mailcap</code> in the user's home directory. + * <li> The file <<i>java.home</i>><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-<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> + * <mime type>; ; <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 <<i>java.home</i>><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 <mime type> <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