Thread: [Japi-cvs] SF.net SVN: japi: [185] libs/swing-tod/trunk
Status: Beta
Brought to you by:
christianhujer
|
From: <chr...@us...> - 2006-10-14 12:44:19
|
Revision: 185
http://svn.sourceforge.net/japi/?rev=185&view=rev
Author: christianhujer
Date: 2006-10-14 05:44:08 -0700 (Sat, 14 Oct 2006)
Log Message:
-----------
Copied tip of the day classes from historic to swing-tod subproject.
Added Paths:
-----------
libs/swing-tod/trunk/src/
libs/swing-tod/trunk/src/net/
libs/swing-tod/trunk/src/net/sf/
libs/swing-tod/trunk/src/net/sf/japi/
libs/swing-tod/trunk/src/net/sf/japi/swing/
libs/swing-tod/trunk/src/net/sf/japi/swing/TipOfTheDayManager.java
Copied: libs/swing-tod/trunk/src/net/sf/japi/swing/TipOfTheDayManager.java (from rev 181, historic/trunk/src/app/net/sf/japi/swing/TipOfTheDayManager.java)
===================================================================
--- libs/swing-tod/trunk/src/net/sf/japi/swing/TipOfTheDayManager.java (rev 0)
+++ libs/swing-tod/trunk/src/net/sf/japi/swing/TipOfTheDayManager.java 2006-10-14 12:44:08 UTC (rev 185)
@@ -0,0 +1,331 @@
+/* JAPI - (Yet another (hopefully) useful) Java API
+ *
+ * Copyright (C) 2004-2006 Christian Hujer
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+package net.sf.japi.swing;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.MissingResourceException;
+import java.util.Random;
+import java.util.ResourceBundle;
+import static java.util.ResourceBundle.getBundle;
+import java.util.prefs.Preferences;
+import static java.util.prefs.Preferences.userNodeForPackage;
+import java.io.InputStream;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.security.PrivilegedAction;
+import java.security.AccessController;
+import javax.swing.Action;
+import static javax.swing.Action.ACCELERATOR_KEY;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
+import static javax.swing.SwingConstants.TRAILING;
+import org.jetbrains.annotations.Nullable;
+import static net.sf.japi.swing.ActionFactory.ACCELERATOR_KEY_2;
+import static net.sf.japi.swing.IconManager.getDefaultIconManager;
+
+/** Class that manages tips of the day.
+ * The tips of the day are read from a property file.
+ * The name of the property file is tried to retrieve in exactly the following order:
+ * <ol>
+ * <li>The System Property <code>net.sf.japi.swing.tod</code> is queried and taken as a ResourceBundle base name.</li>
+ * <li>The Service file <code>META-INF/services/net.sf.japi.swing.tod</code> is read and its first line taken as a ResourceBundle base name.</li>
+ * </ol>
+ * If both fails, the behaviour is undefined.
+ * <p/>
+ * Setting the ResourceBundle for the TipOfTheDayManager via services is the preferred way, because you do not need any additional coding apart from
+ * invoking the TipOfTheDayManager somewhere at startup.
+ * <p />
+ * The format of that property file follows the normal Java Properties convention, with the property keys being numbered, starting at "tod.text.1".
+ * Example:
+ * <pre># Tip Of The Days, English Version
+ * tod.text.1=<html>For analysis with other tools you can export the symbol map to XML, MS-Excel and CSV.
+ * tod.text.2=<html>For analysis with other tools you can export the mapping map to XML, MS-Excel and CSV.
+ * tod.text.3=<html>The supported map file formats are: Intel, GCC and MSVC.
+ * </pre>
+ * @fixme The preferences properties lastTipOfTheDayNumber and showTipOfTheDayAtStartup are stored in the wrong package, they must be stored in the client package instead of this package
+ * @todo Allow parametrization of properties, e.g. via a String sequence like <code>${property.name}</code>, which should then be looked up using
+ * a defined scheme from one or perhaps more definable {@link ActionFactory ActionFactories}.
+ * @author <a href="mailto:ch...@ri...">Christian Hujer</a>
+ * @serial exclude
+ */
+public final class TipOfTheDayManager extends JOptionPane {
+
+ /** Action Factory. */
+ private static final ActionFactory ACTION_FACTORY = ActionFactory.getFactory("net.sf.japi.swing");
+
+ /** Random number generator for random tods. */
+ private static final Random RND = new Random();
+
+ /** Preferences. */
+ private static final Preferences PREFS = userNodeForPackage(TipOfTheDayManager.class);
+
+ /** The Action keys used for accelerators. */
+ private static final String[] ACCELERATOR_KEYS = new String[] { ACCELERATOR_KEY, ACCELERATOR_KEY_2 };
+
+ /** The static instance. */
+ private static final TipOfTheDayManager INSTANCE = new TipOfTheDayManager();
+
+ /** JButton for close. */
+ private JButton closeButton;
+
+ /** JDialog. */
+ private JDialog dialog;
+
+ /** JCheckBox for showing at startup. */
+ private JCheckBox showAtStartup = new JCheckBox(ACTION_FACTORY.createAction(false, "todShowAtStartup", null));
+
+ /** The JLabel showing the current number of the tod. */
+ private JLabel currentTodIndex = new JLabel();
+
+ /** The JEditorPane displaying the tod text. */
+ private JEditorPane todText = new JEditorPane("text/html", "");
+
+ /** List with tod texts. */
+ private List<String> todTexts = new ArrayList<String>();
+
+ /** Number of current Tip of the day.
+ * In visible state, the index must range between 0 and the number of tods available - 1, inclusive.
+ */
+ private int todIndex;
+
+ /** Show Tip Of The Day at startup.
+ * This method is only a proxy for show(Component) but looks at user preferences.
+ * If the user chose not to see TipOfTheDays this method simply returns.
+ * @param parentComponent the parent component of this dialog.
+ */
+ public static void showAtStartup(final Component parentComponent) {
+ if (PREFS.getBoolean("showTipOfTheDayAtStartup", true)) {
+ show(parentComponent);
+ }
+ }
+
+ /** Show a Tip Of The Day.
+ * @param parentComponent the parent component of this dialog.
+ */
+ public static void show(final Component parentComponent) {
+ if (INSTANCE.dialog == null) {
+ INSTANCE.dialog = INSTANCE.createDialog(parentComponent, ACTION_FACTORY.getString("tipOfTheDay.windowTitle"));
+ }
+ INSTANCE.dialog.getRootPane().setDefaultButton(INSTANCE.closeButton);
+ INSTANCE.dialog.setModal(false);
+ INSTANCE.dialog.setResizable(true);
+ INSTANCE.dialog.setVisible(true);
+ INSTANCE.closeButton.requestFocusInWindow();
+ }
+
+ /** Finds the bundle name.
+ * @return bundle name
+ */
+ private static String getBundleName() {
+ String bundleName = System.getProperty("net.sf.japi.swing.tod");
+ if (bundleName == null) {
+ bundleName = getServiceValue(getClassLoader());
+ }
+ return bundleName;
+ }
+
+ /** This method attempts to return the first line of the resource META_INF/services/net.sf.japi.swing.tod from the provided ClassLoader.
+ * @param classLoader ClassLoader, may not be <code>null</code>.
+ * @return first line of resource, or <code>null</code>
+ */
+ @Nullable private static String getServiceValue(final ClassLoader classLoader) {
+ BufferedReader rd = null;
+ try {
+ final String serviceId = "META-INF/services/net.sf.japi.swing.tod";
+ final InputStream in = getResourceAsStream(classLoader, serviceId);
+ if (in != null) {
+ try {
+ rd = new BufferedReader(new InputStreamReader(in, "UTF-8"));
+ } catch (final UnsupportedEncodingException e) {
+ rd = new BufferedReader(new InputStreamReader(in));
+ }
+ return rd.readLine();
+ }
+ } catch (final Exception e) {
+ /* ignore. */
+ } finally {
+ try { rd.close(); } catch (final Exception e) { /* ignore */ } finally { rd = null; }
+ }
+ return null;
+ }
+
+ /** Get a resource from a classloader as stream.
+ * @param classLoader ClassLoader to get resource from
+ * @param serviceId service file to get stream from
+ * @return stream for resource <var>serviceId</var> in <var>classLoader</var>
+ */
+ private static InputStream getResourceAsStream(final ClassLoader classLoader, final String serviceId) {
+ return AccessController.doPrivileged(new PrivilegedAction<InputStream>() {
+
+ /** {@inheritDoc} */
+ public InputStream run() {
+ return classLoader == null ?
+ ClassLoader.getSystemResourceAsStream(serviceId) :
+ classLoader.getResourceAsStream(serviceId);
+ }
+
+ });
+ }
+
+ /** Get the ClassLoader.
+ * @return ClassLoader
+ */
+ private static ClassLoader getClassLoader() {
+ try {
+ final ClassLoader contextClassLoader = getContextClassLoader();
+ if (contextClassLoader != null) {
+ return contextClassLoader;
+ }
+ } catch (final Exception e) {
+ /* ignore */
+ }
+ return TipOfTheDayManager.class.getClassLoader();
+ }
+
+ /** Get the context ClassLoader.
+ * @return context ClassLoader
+ */
+ private static ClassLoader getContextClassLoader() {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+
+ /** {@inheritDoc} */
+ @Nullable public ClassLoader run() {
+ try {
+ return Thread.currentThread().getContextClassLoader();
+ } catch (final SecurityException ex) {
+ return null;
+ }
+ }
+
+ });
+ }
+
+ /** Constructor. */
+ private TipOfTheDayManager() {
+ final String[] keys = { "todPrev", "todRand", "todNext", "todClose" };
+ final Action[] actions = new Action[keys.length];
+ final Object[] newOptions = new Object[keys.length];
+ for (int i = 0; i < keys.length; i++) {
+ actions[i] = ACTION_FACTORY.createAction(false, keys[i], this);
+ newOptions[i] = new JButton(actions[i]);
+ if ("todClose".equals(keys[i])) {
+ closeButton = (JButton) newOptions[i];
+ }
+ for (final String key : ACCELERATOR_KEYS) {
+ final KeyStroke ks = (KeyStroke) actions[i].getValue(key);
+ if (ks != null) {
+ getInputMap(WHEN_IN_FOCUSED_WINDOW).put(ks, keys[i]);
+ getActionMap().put(keys[i], actions[i]);
+ }
+ }
+ }
+ final Dimension size = new Dimension(512, 128);
+ showAtStartup.setSelected(PREFS.getBoolean("showTipOfTheDayAtStartup", true));
+ final JScrollPane todTextScroller = new JScrollPane(todText);
+ todTextScroller.setMinimumSize(size);
+ todTextScroller.setPreferredSize(size);
+ todTextScroller.setFocusable(true);
+ todTextScroller.setAutoscrolls(true);
+ todText.setEditable(false);
+ todText.setRequestFocusEnabled(false);
+ currentTodIndex.setHorizontalAlignment(TRAILING);
+ loadTodTexts();
+ setTodIndex(PREFS.getInt("lastTipOfTheDayNumber", -1) + 1);
+ setIcon(getDefaultIconManager().getIcon(ACTION_FACTORY.getString("tipOfTheDay.icon")));
+ final JLabel heading = new JLabel(ACTION_FACTORY.getString("todHeading"));
+ final Font oldFont = heading.getFont();
+ heading.setFont(oldFont.deriveFont((float) (oldFont.getSize2D() * 1.5)));
+ setMessage(new Object[] { heading, todTextScroller, currentTodIndex, showAtStartup });
+ setMessageType(INFORMATION_MESSAGE);
+ setOptions(newOptions);
+ }
+
+ /** Loads the Tip of the day texts. */
+ private void loadTodTexts() {
+ final ResourceBundle todBundle = getBundle(getBundleName());
+ for (int i = 1;; i++) {
+ try {
+ todTexts.add(todBundle.getString(new StringBuilder().append("tod.text.").append(i).toString()));
+ } catch (final MissingResourceException e) {
+ break;
+ }
+ }
+ }
+
+ /** Sets the tod index.
+ * @param todIndex new todIndex
+ */
+ private void setTodIndex(final int todIndex) {
+ try {
+ this.todIndex = (todIndex + todTexts.size()) % todTexts.size();
+ todText.setText(todTexts.get(this.todIndex));
+ currentTodIndex.setText(ACTION_FACTORY.format("todIndex", this.todIndex + 1, todTexts.size()));
+ } catch (final ArithmeticException e) {
+ todText.setText(ACTION_FACTORY.getString("todsUnavailable"));
+ currentTodIndex.setText("");
+ }
+ }
+
+ /** Returns number of current Tip of the day.
+ * In visible state, the index must range between 0 and the number of tods available - 1, inclusive.
+ * @return number of current Tip of the day.
+ */
+ public int getTodIndex() {
+ return todIndex;
+ }
+
+ /** Action method for close. */
+ public void todClose() {
+ setValue(closeButton);
+ PREFS.putBoolean("showTipOfTheDayAtStartup", showAtStartup.isSelected());
+ PREFS.putInt("lastTipOfTheDayNumber", todIndex);
+ dialog.setVisible(false);
+ dialog.dispose();
+ dialog = null;
+ }
+
+ /** Action method for next. */
+ public void todNext() {
+ setTodIndex(todIndex + 1);
+ }
+
+ /** Action method for previous. */
+ public void todPrev() {
+ setTodIndex(todIndex - 1);
+ }
+
+ /** Action method for random. */
+ public void todRand() {
+ setTodIndex(RND.nextInt(todTexts.size()));
+ }
+
+} // class TipOfTheDayManager
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <chr...@us...> - 2007-01-07 18:32:37
|
Revision: 282
http://svn.sourceforge.net/japi/?rev=282&view=rev
Author: christianhujer
Date: 2007-01-07 10:32:35 -0800 (Sun, 07 Jan 2007)
Log Message:
-----------
Made swing-tod compilable.
Added Paths:
-----------
libs/swing-tod/trunk/build.xml
libs/swing-tod/trunk/lib/
libs/swing-tod/trunk/lib/LICENSE-Pack200Task.jar
libs/swing-tod/trunk/lib/LICENSE-annotations.jar
libs/swing-tod/trunk/lib/Pack200Task.jar
libs/swing-tod/trunk/lib/annotations.jar
libs/swing-tod/trunk/lib/japi-lib-swing-action-0.1.jar
libs/swing-tod/trunk/src/net/sf/japi/swing/action.properties
libs/swing-tod/trunk/src/net/sf/japi/swing/action_de.properties
Property Changed:
----------------
libs/swing-tod/trunk/
Property changes on: libs/swing-tod/trunk
___________________________________________________________________
Name: svn:ignore
+ dest
dist
classes
Added: libs/swing-tod/trunk/build.xml
===================================================================
--- libs/swing-tod/trunk/build.xml (rev 0)
+++ libs/swing-tod/trunk/build.xml 2007-01-07 18:32:35 UTC (rev 282)
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project name="japi lib swing-tod" default="compile">
+
+ <property name="module.version" value="0.1" />
+ <property name="module.name" value="japi-lib-swing-tod" />
+ <property name="module.shortname" value="swing-tod" />
+ <property name="module.title" value="Swing Tip Of The Day" />
+
+ <taskdef name="pack200" classpath="lib/Pack200Task.jar" classname="com.sun.tools.apache.ant.pack200.Pack200Task" />
+
+ <target
+ name = "clean"
+ description = "Cleans Sandbox"
+ >
+ <delete dir="classes" />
+ <delete dir="docs" />
+ </target>
+
+ <target
+ name = "compile"
+ description = "Compiles production classes"
+ >
+ <mkdir dir="classes/production/${module.shortname}" />
+ <mkdir dir="classes/test/${module.shortname}" />
+ <javac
+ srcdir="src"
+ destdir="classes/production/${module.shortname}"
+ encoding="utf-8"
+ source="1.5"
+ target="1.5"
+ >
+ <classpath>
+ <fileset dir="lib" includes="*.jar" excludes="LICENSE-*.jar" />
+ </classpath>
+ <exclude name="test/**/*.java" />
+ </javac>
+ <copy
+ todir="classes/production/${module.shortname}"
+ >
+ <fileset dir="src" includes="**/*.properties" excludes="test/**/*.properties" />
+ <fileset dir="src" includes="META-INF/services/**" />
+ </copy>
+ </target>
+
+ <target
+ name = "dist"
+ description = "Packs distribution archives."
+ depends = "clean, compile"
+ >
+ <!--depends = "clean, compile, doc"
+ -->
+ <delete dir="dist" />
+ <mkdir dir="dist" />
+ <property name="distName" value="dist/${module.name}-${module.version}" />
+ <parallel>
+ <tar tarfile="${distName}.src.tar">
+ <tarfileset dir="." prefix="${module.name}-${module.version}">
+ <include name="src/**" />
+ <include name="build.xml" />
+ </tarfileset>
+ </tar>
+ <zip destfile="${distName}.src.zip">
+ <zipfileset dir="." prefix="${module.name}-${module.version}">
+ <include name="src/**" />
+ <include name="build.xml" />
+ </zipfileset>
+ </zip>
+ <jar destfile="${distName}.src.jar">
+ <zipfileset dir="." prefix="${module.name}-${module.version}">
+ <include name="src/**" />
+ <include name="build.xml" />
+ </zipfileset>
+ </jar>
+ <jar destfile="${distName}.jar">
+ <zipfileset dir="classes/production/${module.shortname}"/>
+ <manifest>
+ <attribute name="Implementation-Title" value="${module.name}" />
+ <attribute name="Implementation-Vendor" value="Christian Hujer + the JAPI Developers" />
+ <attribute name="Implementation-Version" value="${module.version}" />
+ <attribute name="Implementation-URL" value="http://sourceforge.net/projects/japi/" />
+ </manifest>
+ </jar>
+ <tar tarfile="${distName}.doc.tar">
+ <tarfileset dir="." prefix="${module.name}-${module.version}">
+ <include name="docs/**" />
+ <include name="build.xml" />
+ </tarfileset>
+ </tar>
+ <zip destfile="${distName}.doc.zip">
+ <zipfileset dir="." prefix="${module.name}-${module.version}">
+ <include name="docs/**" />
+ <include name="build.xml" />
+ </zipfileset>
+ </zip>
+ <jar destfile="${distName}.doc.jar">
+ <zipfileset dir="." prefix="${module.name}-${module.version}">
+ <include name="docs/**" />
+ </zipfileset>
+ </jar>
+ </parallel>
+ <parallel>
+ <gzip src="${distName}.src.tar" destfile="${distName}.src.tar.gz" />
+ <bzip2 src="${distName}.src.tar" destfile="${distName}.src.tar.bz2" />
+ <gzip src="${distName}.doc.tar" destfile="${distName}.doc.tar.gz" />
+ <bzip2 src="${distName}.doc.tar" destfile="${distName}.doc.tar.bz2" />
+ <pack200
+ src="${distName}.jar"
+ destfile="${distName}.pack.gz"
+ gzipoutput="true"
+ stripdebug="true"
+ effort="9"
+ keepfileorder="false"
+ modificationtime="latest"
+ deflatehint="false"
+ />
+ </parallel>
+ <delete file="${distName}.src.tar" />
+ <delete file="${distName}.doc.tar" />
+ </target>
+
+ <target
+ name = "doc"
+ description = "Creates public javadoc documentation."
+ >
+ <mkdir dir="docs/api" />
+ <!--copy todir="docs/api" file="src/doc/api/public/copyright.html" />
+ <copy todir="docs/api" file="src/doc/api/public/.htaccess" /-->
+ <javadoc
+ destdir = "docs/api"
+ access = "protected"
+ author = "yes"
+ version = "yes"
+ locale = "en_US"
+ use = "yes"
+ splitindex = "yes"
+ windowtitle = "JAPI Library ${module.title} ${module.version} API documentation"
+ doctitle = "JAPI<br />Yet another Java API<br />Library ${module.title} ${module.version} API documentation"
+ header = "JAPI Library ${module.title} ${module.version}<br />API Documentation"
+ footer = "JAPI<br />Yet another Java API<br />Library ${module.title} ${module.version} API documentation"
+ bottom = "<div style=" text-align:center;">© 2005-2006 Christian Hujer. All rights reserved. See <a href="{@docRoot}/copyright.html">copyright</a></div>"
+ serialwarn = "yes"
+ charset = "utf-8"
+ docencoding = "utf-8"
+ encoding = "utf-8"
+ source = "1.5"
+ linksource = "yes"
+ link = "${user.javadoc.link}"
+ >
+ <!--
+ overview = "src/overview.html"
+ -->
+ <classpath>
+ <fileset dir="lib" includes="annotations.jar" />
+ </classpath>
+ <sourcepath>
+ <pathelement path="${user.javadoc.javasrc}" />
+ <pathelement path="src" />
+ </sourcepath>
+ <packageset
+ dir="src"
+ defaultexcludes="yes"
+ >
+ <include name="net/**" />
+ </packageset>
+ <tag enabled="true" name="retval" description="Return Values:" scope="methods" />
+ <tag enabled="true" name="pre" description="Preconditions:" scope="methods,constructors" />
+ <tag enabled="true" name="post" description="Postconditions:" scope="methods" />
+ <tag enabled="true" name="invariant" description="Invariant:" scope="methods,fields" />
+ <tag enabled="true" name="note" description="Notes:" />
+ <tag enabled="true" name="warning" description="Warnings:" />
+ <!--tag enabled="true" name="todo" description="Todo:" /-->
+ <taglet name="com.sun.tools.doclets.ToDoTaglet" path="" />
+ <tag enabled="true" name="fixme" description="Fixme:" />
+ <tag enabled="true" name="xxx" description="XXX:" />
+ </javadoc>
+ </target>
+
+</project>
Property changes on: libs/swing-tod/trunk/build.xml
___________________________________________________________________
Name: svn:mime-type
+ text/xml
Name: svn:eol-style
+ LF
Added: libs/swing-tod/trunk/lib/LICENSE-Pack200Task.jar
===================================================================
--- libs/swing-tod/trunk/lib/LICENSE-Pack200Task.jar (rev 0)
+++ libs/swing-tod/trunk/lib/LICENSE-Pack200Task.jar 2007-01-07 18:32:35 UTC (rev 282)
@@ -0,0 +1,471 @@
+SUN PUBLIC LICENSE Version 1.0
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original Code,
+ prior Modifications used by a Contributor, and the Modifications made
+ by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof and corresponding documentation released
+ with the source code.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified as
+ the Initial Developer in the Source Code notice required by Exhibit A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+
+ A. Any addition to or deletion from the contents of a file containing
+ Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process, and
+ apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated documentation, interface definition files, scripts used
+ to control compilation and installation of an Executable, or source
+ code differential comparisons against either the Original Code or
+ another well known, available Covered Code of the Contributor's
+ choice. The Source Code can be in a compressed or archival form,
+ provided the appropriate decompression or de-archiving software is
+ widely available for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect, to
+ cause the direction or management of such entity, whether by contract
+ or otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.
+
+2. Source Code License.
+
+2.1 The Initial Developer Grant.
+
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce, modify,
+ display, perform, sublicense and distribute the Original Code (or
+ portions thereof) with or without Modifications, and/or as part of a
+ Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using or selling of
+ Original Code, to make, have made, use, practice, sell, and offer for
+ sale, and/or otherwise dispose of the Original Code (or portions
+ thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are effective
+ on the date Initial Developer first distributes Original Code under
+ the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused by:
+ i) the modification of the Original Code or ii) the combination of the
+ Original Code with other software or devices.
+
+2.2. Contributor Grant.
+
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications created
+ by such Contributor (or portions thereof) either on an unmodified
+ basis, with other Modifications, as Covered Code and/or as part of a
+ Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or selling of
+ Modifications made by that Contributor either alone and/or in
+ combination with its Contributor Version (or portions of such
+ combination), to make, use, sell, offer for sale, have made, and/or
+ otherwise dispose of: 1) Modifications made by that Contributor (or
+ portions thereof); and 2) the combination of Modifications made by
+ that Contributor with its Contributor Version (or portions of such
+ combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective
+ on the date Contributor first makes Commercial Use of the Covered
+ Code.
+
+ (d) notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version; 3) for
+ infringements caused by: i) third party modifications of Contributor
+ Version or ii) the combination of Modifications made by that
+ Contributor with other software (except as part of the Contributor
+ Version) or other devices; or 4) under Patent Claims infringed by
+ Covered Code in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Application of License.
+
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+3.2. Availability of Source Code.
+
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+3.3. Description of Modifications.
+
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+3.4. Intellectual Property Matters.
+
+ (a) Third Party Claims.
+
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2, Contributor
+ must include a text file with the Source Code distribution titled
+ "LEGAL'' which describes the claim and the party making the claim in
+ sufficient detail that a recipient will know whom to contact. If
+ Contributor obtains such knowledge after the Modification is made
+ available as described in Section 3.2, Contributor shall promptly
+ modify the LEGAL file in all copies Contributor makes available
+ thereafter and shall take other steps (such as notifying appropriate
+ mailing lists or newsgroups) reasonably calculated to inform those who
+ received the Covered Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+
+ If Contributor's Modifications include an application programming
+ interface ("API") and Contributor has knowledge of patent licenses
+ which are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+
+ Contributor represents that, except as disclosed pursuant to Section
+ 3.4(a) above, Contributor believes that Contributor's Modifications
+ are Contributor's original creation(s) and/or Contributor has
+ sufficient rights to grant the rights conveyed by this License.
+
+3.5. Required Notices.
+
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+3.6. Distribution of Executable Versions.
+
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+3.7. Larger Works.
+
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+6.1. New Versions.
+
+ Sun Microsystems, Inc. ("Sun") may publish revised and/or new versions
+ of the License from time to time. Each version will be given a
+ distinguishing version number.
+
+6.2. Effect of New Versions.
+
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Sun. No one
+ other than Sun has the right to modify the terms applicable to Covered
+ Code created under this License.
+
+6.3. Derivative Works.
+
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must: (a) rename Your license so that
+ the phrases "Sun," "Sun Public License," or "SPL" or any confusingly
+ similar phrase do not appear in your license (except to note that your
+ license differs from this License) and (b) otherwise make it clear
+ that Your version of the license contains terms which differ from the
+ Sun Public License. (Filling in the name of the Initial Developer,
+ Original Code or Contributor in the notice described in Exhibit A
+ shall not of themselves be deemed to be modifications of this
+ License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS'' BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declaratory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above, all
+ end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in 48
+ C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software"
+ and "commercial computer software documentation," as such terms are
+ used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R.
+ 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
+ U.S. Government End Users acquire Covered Code with only those rights
+ set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by...
[truncated message content] |