You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2007/02/06 06:01:49 UTC

svn commit: r503984 [2/29] - in /tapestry/tapestry4/trunk: ./ tapestry-examples/TimeTracker/src/context/WEB-INF/ tapestry-framework/ tapestry-framework/src/java/org/apache/tapestry/asset/ tapestry-framework/src/java/org/apache/tapestry/dojo/ tapestry-f...

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatcher.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatcher.java?view=diff&rev=503984&r1=503983&r2=503984
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatcher.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatcher.java Mon Feb  5 21:01:25 2007
@@ -19,11 +19,11 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.pool.KeyedPoolableObjectFactory;
+import org.apache.commons.pool.impl.GenericKeyedObjectPool;
 import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.oro.text.regex.MalformedPatternException;
 import org.apache.oro.text.regex.MatchResult;
 import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.PatternCompiler;
 import org.apache.oro.text.regex.PatternMatcher;
 import org.apache.oro.text.regex.PatternMatcherInput;
 import org.apache.oro.text.regex.Perl5Compiler;
@@ -39,49 +39,33 @@
 
 public class RegexpMatcher
 {
-    private PatternCompiler _patternCompiler;
-
+    private static final int MAX_ACTIVE = 100;
+    
+    private static final long SLEEP_TIME = 1000 * 60 * 2;
+    
     private PatternMatcher _matcher;
-
-    private Map _compiledPatterns = new HashMap();
-
+    
+    private final KeyedPoolableObjectFactory _factory = new RegexpPoolObjectFactory();
+    
+    private final GenericKeyedObjectPool _pool;
+    
     private Map _escapedPatternStrings = new HashMap();
-
-    protected Pattern compilePattern(String pattern)
-    {
-        if (_patternCompiler == null)
-            _patternCompiler = new Perl5Compiler();
-
-        try
-        {
-            return _patternCompiler.compile(pattern, Perl5Compiler.SINGLELINE_MASK | Perl5Compiler.READ_ONLY_MASK);
-        }
-        catch (MalformedPatternException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-    }
-
-    protected Pattern getCompiledPattern(String pattern)
+    
+    public RegexpMatcher()
     {
-        Pattern result = (Pattern) _compiledPatterns.get(pattern);
-
-        if (result == null)
-        {
-            result = compilePattern(pattern);
-            _compiledPatterns.put(pattern, result);
-        }
-
-        return result;
+        _pool = new GenericKeyedObjectPool(_factory, MAX_ACTIVE, GenericKeyedObjectPool.WHEN_EXHAUSTED_BLOCK, -1);
+        
+        _pool.setMaxIdle(MAX_ACTIVE / 2);
+        _pool.setMinEvictableIdleTimeMillis(MAX_ACTIVE);
+        _pool.setTimeBetweenEvictionRunsMillis(SLEEP_TIME);
     }
-
+    
     /**
      * Clears any previously compiled patterns.
      */
-
     public void clear()
     {
-        _compiledPatterns.clear();
+        _pool.clear();
     }
 
     protected PatternMatcher getPatternMatcher()
@@ -94,32 +78,56 @@
 
     public boolean matches(String pattern, String input)
     {
-        Pattern compiledPattern = getCompiledPattern(pattern);
-
-        return getPatternMatcher().matches(input, compiledPattern);
+        Pattern compiled = null;
+        
+        try {
+            
+            compiled = (Pattern)_pool.borrowObject(pattern);
+            
+            return getPatternMatcher().matches(input, compiled);
+            
+        } catch (Exception e) {
+            
+            throw new ApplicationRuntimeException(e);
+        } finally {
+            
+            try { _pool.returnObject(pattern, compiled); } catch (Throwable t) { }
+        }
     }
-
+    
     public boolean contains(String pattern, String input)
     {
-        Pattern compiledPattern = getCompiledPattern(pattern);
-
-        return getPatternMatcher().contains(input, compiledPattern);
+        Pattern compiled = null;
+        
+        try {
+            
+            compiled = (Pattern)_pool.borrowObject(pattern);
+            
+            return getPatternMatcher().contains(input, compiled);
+            
+        } catch (Exception e) {
+            
+            throw new ApplicationRuntimeException(e);
+        } finally {
+            
+            try { _pool.returnObject(pattern, compiled); } catch (Throwable t) { }
+        }
     }
 
     public String getEscapedPatternString(String pattern)
     {
         String result = (String) _escapedPatternStrings.get(pattern);
-
+        
         if (result == null)
         {
             result = Perl5Compiler.quotemeta(pattern);
-
+            
             _escapedPatternStrings.put(pattern, result);
         }
-
+        
         return result;
     }
-
+    
     /**
      * Given an input string, finds all matches in an input string for the pattern.
      * 
@@ -132,21 +140,33 @@
      */
     public RegexpMatch[] getMatches(String pattern, String input)
     {
-        Pattern compiledPattern = getCompiledPattern(pattern);
-
-        PatternMatcher matcher = getPatternMatcher();
-        PatternMatcherInput matcherInput = new PatternMatcherInput(input);
-
-        List matches = new ArrayList();
-
-        while (matcher.contains(matcherInput, compiledPattern))
-        {
-            MatchResult match = matcher.getMatch();
-
-            matches.add(new RegexpMatch(match));
+        Pattern compiled = null;
+        
+        try {
+            
+            compiled = (Pattern)_pool.borrowObject(pattern);
+            
+            PatternMatcher matcher = getPatternMatcher();
+            PatternMatcherInput matcherInput = new PatternMatcherInput(input);
+
+            List matches = new ArrayList();
+            
+            while (matcher.contains(matcherInput, compiled))
+            {
+                MatchResult match = matcher.getMatch();
+
+                matches.add(new RegexpMatch(match));
+            }
+            
+            return (RegexpMatch[]) matches.toArray(new RegexpMatch[matches.size()]);
+            
+        } catch (Exception e) {
+            
+            throw new ApplicationRuntimeException(e);
+        } finally {
+            
+            try { _pool.returnObject(pattern, compiled); } catch (Throwable t) { }
         }
-
-        return (RegexpMatch[]) matches.toArray(new RegexpMatch[matches.size()]);
     }
 
     /**
@@ -162,23 +182,35 @@
      */
     public String[] getMatches(String pattern, String input, int subgroup)
     {
-        Pattern compiledPattern = getCompiledPattern(pattern);
+        Pattern compiled = null;
+        
+        try {
+
+            compiled = (Pattern)_pool.borrowObject(pattern);
+            
+            PatternMatcher matcher = getPatternMatcher();
+            PatternMatcherInput matcherInput = new PatternMatcherInput(input);
+            
+            List matches = new ArrayList();
+            
+            while (matcher.contains(matcherInput, compiled))
+            {
+                MatchResult match = matcher.getMatch();
+
+                String matchedInput = match.group(subgroup);
+
+                matches.add(matchedInput);
+            }
+
+            return (String[]) matches.toArray(new String[matches.size()]);
+            
+        } catch (Exception e) {
 
-        PatternMatcher matcher = getPatternMatcher();
-        PatternMatcherInput matcherInput = new PatternMatcherInput(input);
+            throw new ApplicationRuntimeException(e);
+        } finally {
 
-        List matches = new ArrayList();
-
-        while (matcher.contains(matcherInput, compiledPattern))
-        {
-            MatchResult match = matcher.getMatch();
-
-            String matchedInput = match.group(subgroup);
-
-            matches.add(matchedInput);
+            try { _pool.returnObject(pattern, compiled); } catch (Throwable t) { }
         }
-
-        return (String[]) matches.toArray(new String[matches.size()]);
     }
 
 }

Added: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/RegexpPoolObjectFactory.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/RegexpPoolObjectFactory.java?view=auto&rev=503984
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/RegexpPoolObjectFactory.java (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/RegexpPoolObjectFactory.java Mon Feb  5 21:01:25 2007
@@ -0,0 +1,49 @@
+// Copyright 2004, 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry.util;
+
+import org.apache.commons.pool.BaseKeyedPoolableObjectFactory;
+import org.apache.hivemind.util.Defense;
+import org.apache.oro.text.regex.Pattern;
+import org.apache.oro.text.regex.PatternCompiler;
+import org.apache.oro.text.regex.Perl5Compiler;
+
+
+/**
+ * Implementation of {@link BaseKeyedPoolableObjectFactory} for regexp patterns
+ * that compiles incoming String regexp patterns into compiled {@link Pattern} 
+ * objects.
+ */
+public class RegexpPoolObjectFactory extends BaseKeyedPoolableObjectFactory
+{
+    private PatternCompiler _patternCompiler;
+    
+    /**
+     * {@inheritDoc}
+     */
+    public Object makeObject(Object pattern)
+        throws Exception
+    {
+        Defense.notNull(pattern, "Regexp pattern");
+        Defense.isAssignable(pattern, String.class, "Regexp pattern");
+        
+        if (_patternCompiler == null)
+            _patternCompiler = new Perl5Compiler();
+        
+        String regexp = (String)pattern;
+        
+        return _patternCompiler.compile(regexp, Perl5Compiler.SINGLELINE_MASK | Perl5Compiler.READ_ONLY_MASK);
+    }
+
+}

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/DojoFileStorageProvider.jar
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/DojoFileStorageProvider.jar?view=auto&rev=503984
==============================================================================
Binary file - no diff available.

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/DojoFileStorageProvider.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/LICENSE
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/LICENSE?view=auto&rev=503984
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/LICENSE (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/LICENSE Mon Feb  5 21:01:25 2007
@@ -0,0 +1,195 @@
+Dojo is availble under *either* the terms of the modified BSD license *or* the
+Academic Free License version 2.1. As a recipient of Dojo, you may choose which
+license to receive this code under (except as noted in per-module LICENSE
+files). Some modules may not be the copyright of the Dojo Foundation. These
+modules contain explicit declarations of copyright in both the LICENSE files in
+the directories in which they reside and in the code itself. No external
+contributions are allowed under licenses which are fundamentally incompatible
+with the AFL or BSD licenses that Dojo is distributed under.
+
+The text of the AFL and BSD licenses is reproduced below. 
+
+-------------------------------------------------------------------------------
+The "New" BSD License:
+**********************
+
+Copyright (c) 2005-2006, The Dojo Foundation
+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 the Dojo Foundation 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.
+
+-------------------------------------------------------------------------------
+The Academic Free License, v. 2.1:
+**********************************
+
+This Academic Free License (the "License") applies to any original work of
+authorship (the "Original Work") whose owner (the "Licensor") has placed the
+following notice immediately following the copyright notice for the Original
+Work:
+
+Licensed under the Academic Free License version 2.1
+
+1) Grant of Copyright License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license to do the
+following:
+
+a) to reproduce the Original Work in copies;
+
+b) to prepare derivative works ("Derivative Works") based upon the Original
+Work;
+
+c) to distribute copies of the Original Work and Derivative Works to the
+public;
+
+d) to perform the Original Work publicly; and
+
+e) to display the Original Work publicly.
+
+2) Grant of Patent License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
+claims owned or controlled by the Licensor that are embodied in the Original
+Work as furnished by the Licensor, to make, use, sell and offer for sale the
+Original Work and Derivative Works.
+
+3) Grant of Source Code License. The term "Source Code" means the preferred
+form of the Original Work for making modifications to it and all available
+documentation describing how to modify the Original Work. Licensor hereby
+agrees to provide a machine-readable copy of the Source Code of the Original
+Work along with each copy of the Original Work that Licensor distributes.
+Licensor reserves the right to satisfy this obligation by placing a
+machine-readable copy of the Source Code in an information repository
+reasonably calculated to permit inexpensive and convenient access by You for as
+long as Licensor continues to distribute the Original Work, and by publishing
+the address of that information repository in a notice immediately following
+the copyright notice that applies to the Original Work.
+
+4) Exclusions From License Grant. Neither the names of Licensor, nor the names
+of any contributors to the Original Work, nor any of their trademarks or
+service marks, may be used to endorse or promote products derived from this
+Original Work without express prior written permission of the Licensor. Nothing
+in this License shall be deemed to grant any rights to trademarks, copyrights,
+patents, trade secrets or any other intellectual property of Licensor except as
+expressly stated herein. No patent license is granted to make, use, sell or
+offer to sell embodiments of any patent claims other than the licensed claims
+defined in Section 2. No right is granted to the trademarks of Licensor even if
+such marks are included in the Original Work. Nothing in this License shall be
+interpreted to prohibit Licensor from licensing under different terms from this
+License any Original Work that Licensor otherwise would have a right to
+license.
+
+5) This section intentionally omitted.
+
+6) Attribution Rights. You must retain, in the Source Code of any Derivative
+Works that You create, all copyright, patent or trademark notices from the
+Source Code of the Original Work, as well as any notices of licensing and any
+descriptive text identified therein as an "Attribution Notice." You must cause
+the Source Code for any Derivative Works that You create to carry a prominent
+Attribution Notice reasonably calculated to inform recipients that You have
+modified the Original Work.
+
+7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
+the copyright in and to the Original Work and the patent rights granted herein
+by Licensor are owned by the Licensor or are sublicensed to You under the terms
+of this License with the permission of the contributor(s) of those copyrights
+and patent rights. Except as expressly stated in the immediately proceeding
+sentence, the Original Work is provided under this License on an "AS IS" BASIS
+and WITHOUT WARRANTY, either express or implied, including, without limitation,
+the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
+This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
+license to Original Work is granted hereunder except under this disclaimer.
+
+8) Limitation of Liability. Under no circumstances and under no legal theory,
+whether in tort (including negligence), contract, or otherwise, shall the
+Licensor be liable to any person for any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License
+or the use of the Original Work including, without limitation, damages for loss
+of goodwill, work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses. This limitation of liability shall not
+apply to liability for death or personal injury resulting from Licensor'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.
+
+9) Acceptance and Termination. If You distribute copies of the Original Work or
+a Derivative Work, You must make a reasonable effort under the circumstances to
+obtain the express assent of recipients to the terms of this License. Nothing
+else but this License (or another written agreement between Licensor and You)
+grants You permission to create Derivative Works based upon the Original Work
+or to exercise any of the rights granted in Section 1 herein, and any attempt
+to do so except under the terms of this License (or another written agreement
+between Licensor and You) is expressly prohibited by U.S. copyright law, the
+equivalent laws of other countries, and by international treaty. Therefore, by
+exercising any of the rights granted to You in Section 1 herein, You indicate
+Your acceptance of this License and all of its terms and conditions.
+
+10) Termination for Patent Action. This License shall terminate automatically
+and You may no longer exercise any of the rights granted to You by this License
+as of the date You commence an action, including a cross-claim or counterclaim,
+against Licensor or any licensee alleging that the Original Work infringes a
+patent. This termination provision shall not apply for an action alleging
+patent infringement by combinations of the Original Work with other software or
+hardware.
+
+11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
+License may be brought only in the courts of a jurisdiction wherein the
+Licensor resides or in which Licensor conducts its primary business, and under
+the laws of that jurisdiction excluding its conflict-of-law provisions. The
+application of the United Nations Convention on Contracts for the International
+Sale of Goods is expressly excluded. Any use of the Original Work outside the
+scope of this License or after its termination shall be subject to the
+requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et
+seq., the equivalent laws of other countries, and international treaty. This
+section shall survive the termination of this License.
+
+12) Attorneys Fees. In any action to enforce the terms of this License or
+seeking damages relating thereto, the prevailing party shall be entitled to
+recover its costs and expenses, including, without limitation, reasonable
+attorneys' fees and costs incurred in connection with such action, including
+any appeal of such action. This section shall survive the termination of this
+License.
+
+13) Miscellaneous. This License represents the complete agreement concerning
+the 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.
+
+14) Definition of "You" in This License. "You" throughout this License, whether
+in upper or lower case, means an individual or a legal entity exercising rights
+under, and complying with all of the terms of, this License. For legal
+entities, "You" includes any entity that controls, is controlled by, or is
+under common control with you. For purposes of this definition, "control" means
+(i) the power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty percent
+(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
+entity.
+
+15) Right to Use. You may use the Original Work in all ways not otherwise
+restricted or conditioned by this License or by law, and Licensor promises not
+to interfere with or be responsible for such uses by You.
+
+This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
+Permission is hereby granted to copy and distribute this license without
+modification. This license may not be modified without the express written
+permission of its copyright owner.

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/README
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/README?view=auto&rev=503984
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/README (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/README Mon Feb  5 21:01:25 2007
@@ -0,0 +1,176 @@
+The Dojo Toolkit
+----------------
+
+Dojo is a portable JavaScript toolkit for web application developers and
+JavaScript professionals. Dojo solves real-world problems by providing powerful
+abstractions and solid, tested implementations.
+
+Getting Started
+---------------
+
+To use Dojo in your application, download one of the pre-built editions from the
+Dojo website, http://dojotoolkit.org. Once you have downloaded the file you will
+need to unzip the archive in your website root. At a minimum, you will need to
+extract:
+
+    src/ (folder)
+    dojo.js
+    iframe_history.html
+
+To begin using dojo, include dojo in your pages by using:
+
+    <script type="text/javascript" src="/path/to/dojo.js"></script>
+
+Depending on the edition that you have downloaded, this base dojo.js file may or
+may not include the modules you wish to use in your application. The files which
+have been "baked in" to the dojo.js that is part of your distribution are listed
+in the file build.txt that is part of the top-level directory that is created
+when you unpack the archive. To ensure modules you wish to use are available,
+use dojo.require() to request them. A very rich application might include:
+
+    <script type="text/javascript" src="/path/to/dojo.js"></script>
+    <script type="text/javascript">
+        dojo.require("dojo.event.*");       // sophisticated AOP event handling
+        dojo.require("dojo.io.*");          // for Ajax requests
+        dojo.require("dojo.storage.*");     // a persistent local data cache
+        dojo.require("dojo.json");          // serialization to JSON
+        dojo.require("dojo.dnd.*");         // drag-and-drop
+        dojo.require("dojo.lfx.*");         // animations and eye candy
+        dojo.require("dojo.widget.Editor2");// stable, portable HTML WYSIWYG
+    </script>
+
+Note that only those modules which are *not* already "baked in" to dojo.js by
+the edition's build process are requested by dojo.require(). This helps make
+your application faster without forcing you to use a build tool while in
+development. See "Building Dojo" and "Working From Source" for more details.
+
+
+Compatibility
+-------------
+
+In addition to it's suite of unit-tests for core system components, Dojo has
+been tested on almost every modern browser, including:
+
+    - IE 5.5+
+    - Mozilla 1.5+, Firefox 1.0+
+    - Safari 1.3.9+
+    - Konqueror 3.4+
+    - Opera 8.5+
+
+Note that some widgets and features may not perform exactly the same on every
+browser due to browser implementation differences.
+
+For those looking to use Dojo in non-browser environments, please see "Working
+From Source".
+
+
+Documentation and Getting Help
+------------------------------
+
+Articles outlining major Dojo systems are linked from:
+
+    http://dojotoolkit.org/docs/
+
+Toolkit APIs are listed in outline form at:
+
+    http://dojotoolkit.org/docs/apis/
+
+And documented in full at:
+
+    http://manual.dojotoolkit.org/
+
+The project also maintains a JotSpot Wiki at:
+
+    http://dojo.jot.com/
+
+A FAQ has been extracted from mailing list traffic:
+
+    http://dojo.jot.com/FAQ
+
+And the main Dojo user mailing list is archived and made searchable at:
+
+    http://news.gmane.org/gmane.comp.web.dojo.user/
+
+You can sign up for this list, which is a great place to ask questions, at:
+
+    http://dojotoolkit.org/mailman/listinfo/dojo-interest
+
+The Dojo developers also tend to hang out in IRC and help people with Dojo
+problems. You're most likely to find them at:
+
+    irc.freenode.net #dojo
+
+Note that 3PM Wed PST in #dojo-meeting is reserved for a weekly meeting between
+project developers, although anyone is welcome to participate.
+
+
+Working From Source
+-------------------
+
+The core of Dojo is a powerful package system that allows developers to optimize
+Dojo for deployment while using *exactly the same* application code in
+development. Therefore, working from source is almost exactly like working from
+a pre-built edition. Pre-built editions are significantly faster to load than
+working from source, but are not as flexible when in development.
+
+There are multiple ways to get the source. Nightly snapshots of the Dojo source
+repository are available at:
+
+    http://archive.dojotoolkit.org/nightly.tgz
+
+Anonymous Subversion access is also available:
+
+    %> svn co http://svn.dojotoolkit.org/dojo/trunk/ dojo
+
+Each of these sources will include some extra directories not included in the
+pre-packaged editions, including command-line tests and build tools for
+constructing your own packages.
+
+Running the command-line unit test suite requires Ant 1.6. If it is installed
+and in your path, you can run the tests using:
+
+    %> cd buildscripts
+    %> ant test
+
+The command-line test harness makes use of Rhino, a JavaScript interpreter
+written in Java. Once you have a copy of Dojo's source tree, you have a copy of
+Rhino. From the root directory, you can use Rhino interactively to load Dojo:
+
+    %> java -jar buildscripts/lib/js.jar
+    Rhino 1.5 release 3 2002 01 27
+    js> load("dojo.js");
+    js> print(dojo);
+    [object Object]
+    js> quit();
+
+This environment is wonderful for testing raw JavaScript functionality in, or
+even for scripting your system. Since Rhino has full access to anything in
+Java's classpath, the sky is the limit!
+
+Building Dojo
+-------------
+
+Dojo requires Ant 1.6.x in order to build correctly. While using Dojo from
+source does *NOT* require that you make a build, speeding up your application by
+constructing a custom profile build does.
+
+Once you have Ant and a source snapshot of Dojo, you can make your own profile
+build ("edition") which includes only those modules your application uses by
+customizing one of the files in:
+
+    [dojo]/buildscripts/profiles/
+
+These files are named *.profile.js and each one contains a list of modules to
+include in a build. If we created a new profile called "test.profile.js", we
+could then make a profile build using it by doing:
+
+    %> cd buildscripts
+    %> ant -Dprofile=test -Ddocless=true release intern-strings
+
+If the build is successful, your newly minted and compressed  profile build will
+be placed in [dojo]/release/dojo/
+
+-------------------------------------------------------------------------------
+Copyright (c) 2004-2006, The Dojo Foundation, All Rights Reserved
+
+vim:ts=4:et:tw=80:shiftwidth=4:

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/Storage_version6.swf
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/Storage_version6.swf?view=auto&rev=503984
==============================================================================
Binary file - no diff available.

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/Storage_version6.swf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/Storage_version8.swf
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/Storage_version8.swf?view=auto&rev=503984
==============================================================================
Binary file - no diff available.

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/Storage_version8.swf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/build.txt
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/build.txt?view=auto&rev=503984
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/build.txt (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/build.txt Mon Feb  5 21:01:25 2007
@@ -0,0 +1,44 @@
+Files baked into this build:
+dojoGuardStart.js
+../src/bootstrap1.js
+../src/loader.js
+dojoGuardEnd.js
+../src/hostenv_browser.js
+../src/lang/common.js
+../src/lang/array.js
+../src/lang/extras.js
+../src/lang/func.js
+../src/event/common.js
+../src/event/browser.js
+../src/string/common.js
+../src/string.js
+../src/io/common.js
+../src/string/extras.js
+../src/dom.js
+../src/undo/browser.js
+../src/io/BrowserIO.js
+../src/xml/Parse.js
+../src/lang/declare.js
+../src/ns.js
+../src/event/topic.js
+../src/event/__package__.js
+../src/widget/Manager.js
+../src/uri/Uri.js
+../src/uri/__package__.js
+../src/html/common.js
+../src/a11y.js
+../src/widget/Widget.js
+../src/widget/Parse.js
+../src/html/style.js
+../src/widget/DomWidget.js
+../src/html/display.js
+../src/html/layout.js
+../src/html/util.js
+../src/gfx/color.js
+../src/lfx/Animation.js
+../src/html/color.js
+../src/lfx/html.js
+../src/lfx/__package__.js
+../src/lfx/toggler.js
+../src/widget/HtmlWidget.js
+../src/widget/__package__.js
\ No newline at end of file