Return-Path: Delivered-To: apmail-sling-commits-archive@www.apache.org Received: (qmail 43081 invoked from network); 6 Apr 2010 09:09:58 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 6 Apr 2010 09:09:58 -0000 Received: (qmail 84970 invoked by uid 500); 6 Apr 2010 09:09:58 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 84551 invoked by uid 500); 6 Apr 2010 09:09:56 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 84525 invoked by uid 99); 6 Apr 2010 09:09:54 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 06 Apr 2010 09:09:54 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 06 Apr 2010 09:09:52 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id E6C662388A2D; Tue, 6 Apr 2010 09:09:30 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r931058 - /sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java Date: Tue, 06 Apr 2010 09:09:30 -0000 To: commits@sling.apache.org From: cziegeler@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100406090930.E6C662388A2D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: cziegeler Date: Tue Apr 6 09:09:30 2010 New Revision: 931058 URL: http://svn.apache.org/viewvc?rev=931058&view=rev Log: SLING-1473 : Resolve script resource lazy Modified: sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java Modified: sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java?rev=931058&r1=931057&r2=931058&view=diff ============================================================================== --- sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java (original) +++ sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java Tue Apr 6 09:09:30 2010 @@ -143,11 +143,8 @@ class DefaultSlingScript implements Slin // if we don't have a request resolver we directly return the script resource return scriptResource; } - Resource rsrc = resolver.getResource(this.scriptName); - if ( rsrc == null ) { - rsrc = new SyntheticResource(resolver, this.scriptName, this.scriptResource.getResourceType()); - } - return rsrc; + return new LazyScriptResource(this.scriptName, + this.scriptResource.getResourceType(), resolver); } /** @@ -669,4 +666,77 @@ class DefaultSlingScript implements Slin } } + + /** + * This is a lazy implementation of the script resource which + * just returns the path, resource type and resource resolver directly. + */ + private static final class LazyScriptResource implements Resource { + + private final String path; + + private final String resourceType; + + private final ResourceResolver resolver; + + private Resource delegatee; + + public LazyScriptResource(final String path, final String resourceType, final ResourceResolver resolver) { + this.path = path; + this.resourceType = resourceType; + this.resolver = resolver; + } + + /** + * @see org.apache.sling.api.resource.Resource#getPath() + */ + public String getPath() { + return this.path; + } + + /** + * @see org.apache.sling.api.resource.Resource#getResourceType() + */ + public String getResourceType() { + return this.resourceType; + } + + /** + * @see org.apache.sling.api.resource.Resource#getResourceResolver() + */ + public ResourceResolver getResourceResolver() { + return this.resolver; + } + + private Resource getResource() { + if ( this.delegatee == null ) { + this.delegatee = this.resolver.getResource(this.path); + if ( this.delegatee == null ) { + this.delegatee = new SyntheticResource(resolver, this.path, this.resourceType); + } + } + return this.delegatee; + } + + /** + * @see org.apache.sling.api.resource.Resource#getResourceMetadata() + */ + public ResourceMetadata getResourceMetadata() { + return this.getResource().getResourceMetadata(); + } + + /** + * @see org.apache.sling.api.resource.Resource#getResourceSuperType() + */ + public String getResourceSuperType() { + return this.getResource().getResourceSuperType(); + } + + /** + * @see org.apache.sling.api.adapter.Adaptable#adaptTo(java.lang.Class) + */ + public AdapterType adaptTo(Class type) { + return this.getResource().adaptTo(type); + } + } } \ No newline at end of file