vgritsenko 2002/09/20 19:13:21 Modified: src/java/org/apache/cocoon/components/language/generator ProgramGenerator.java ProgramGeneratorImpl.java Log: Load programs from the Source, not from the 'File' (it's not file really, it's a source). Deprecate previous method. Revision Changes Path 1.9 +33 -3 xml-cocoon2/src/java/org/apache/cocoon/components/language/generator/ProgramGenerator.java Index: ProgramGenerator.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/generator/ProgramGenerator.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ProgramGenerator.java 12 Aug 2002 07:50:52 -0000 1.8 +++ ProgramGenerator.java 21 Sep 2002 02:13:21 -0000 1.9 @@ -52,6 +52,7 @@ import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.component.ComponentManager; +import org.apache.excalibur.source.Source; import org.apache.cocoon.environment.SourceResolver; @@ -78,6 +79,7 @@ * the program must be written * @return The loaded object * @exception Exception If an error occurs during generation or loading + * @deprecated Pass Source object instead of file name. */ CompiledComponent load( ComponentManager newManager, @@ -87,10 +89,38 @@ SourceResolver resolver) throws Exception; /** - * Release a program built from an XML document written in a + * Load a program built from an XML document written in a + * <code>MarkupLanguage</code> + * + * @param newManager The ComponentManager that it will be loaded with + * @param source The input document's <code>File</code> name + * @param markupLanguage The <code>MarkupLanguage</code> in which the input + * document is written + * @param programmingLanguage The <code>ProgrammingLanguage</code> in which + * the program must be written + * @return The loaded object + * @exception Exception If an error occurs during generation or loading + */ + CompiledComponent load( + ComponentManager newManager, + Source source, + String markupLanguage, + String programmingLanguage, + SourceResolver resolver) throws Exception; + + /** + * Release a program instance built from an XML document written in a * <code>MarkupLanguage</code>. * - * @param CompiledSheet + * @param component to be released. */ void release(CompiledComponent component); + + /** + * Remove a program from the generator's cache and dipose all + * instances of this program. + * + * @param source of the program to be removed. + */ + void remove(Source source); } 1.22 +55 -24 xml-cocoon2/src/java/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java Index: ProgramGeneratorImpl.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- ProgramGeneratorImpl.java 11 Sep 2002 12:44:09 -0000 1.21 +++ ProgramGeneratorImpl.java 21 Sep 2002 02:13:21 -0000 1.22 @@ -204,8 +204,7 @@ // VG: File is located outside of contextDir, using systemId contextFilename.append(systemId); } - String normalizedName = IOUtils.normalizedFilename(contextFilename.toString()); - return normalizedName; + return IOUtils.normalizedFilename(contextFilename.toString()); } /** @@ -225,6 +224,25 @@ throws Exception { final Source source = resolver.resolveURI(fileName); + return load(newManager, source, markupLanguageName, programmingLanguageName, resolver); + } + + /** + * Load a program built from an XML document written in a <code>MarkupLanguage</code> + * + * @param source The input document's <code>File</code> + * @param markupLanguageName The <code>MarkupLanguage</code> in which the input document is written + * @param programmingLanguageName The <code>ProgrammingLanguage</code> in which the program must be written + * @return The loaded program instance + * @exception Exception If an error occurs during generation or loading + */ + public CompiledComponent load(ComponentManager newManager, + Source source, + String markupLanguageName, + String programmingLanguageName, + SourceResolver resolver) + throws Exception { + final String id = source.getSystemId(); ProgrammingLanguage programmingLanguage = null; @@ -234,10 +252,10 @@ final String normalizedName = getNormalizedName(id); if (getLogger().isDebugEnabled()) { - getLogger().debug("Loading serverpage fileName=[" + String.valueOf(fileName) + "]" + - " markupLanguageName=[" + String.valueOf(markupLanguageName) + "]" + - " programmingLanguageName=[" + String.valueOf(programmingLanguageName) + "]" + - " -> normalizedName=[" + String.valueOf(normalizedName) + "]"); + getLogger().debug("Loading serverpage systemId=[" + id + "]" + + " markupLanguageName=[" + markupLanguageName + "]" + + " programmingLanguageName=[" + programmingLanguageName + "]" + + " -> normalizedName=[" + normalizedName + "]"); } markupLanguage = (MarkupLanguage) this.markupSelector.select(markupLanguageName); @@ -250,10 +268,9 @@ // Attempt to load program object from cache try { programInstance = (CompiledComponent) this.cache.select(normalizedName); - } - catch (Exception e) { + } catch (Exception e) { if (getLogger().isDebugEnabled()) { - getLogger().debug("The serverpage [" + String.valueOf(id) + "] is not in the cache yet"); + getLogger().debug("The serverpage [" + id + "] is not in the cache yet"); } } @@ -266,12 +283,12 @@ programInstance = (CompiledComponent) this.cache.select(normalizedName); if (getLogger().isDebugEnabled()) { - getLogger().debug("Successfully preloaded serverpage [" + String.valueOf(id) + "]"); + getLogger().debug("Successfully preloaded serverpage [" + id + "]"); } } catch (Exception e) { if (getLogger().isErrorEnabled()) { - getLogger().error("The serverpage [" + String.valueOf(id) + "] could not be preloaded"); + getLogger().error("The serverpage [" + id + "] could not be preloaded"); } } } @@ -279,7 +296,7 @@ if (programInstance == null) { // no instance found if (getLogger().isDebugEnabled()) { - getLogger().debug("Creating new serverpage for [" + String.valueOf(id) + "]"); + getLogger().debug("Creating new serverpage for [" + id + "]"); } synchronized (this) { generateSourcecode(source, normalizedName, markupLanguage, programmingLanguage, resolver); @@ -296,11 +313,11 @@ // In that case, let the program instance decide if it is modified or not. if (programInstance.modifiedSince(sourceLastModified)) { if (getLogger().isDebugEnabled()) { - getLogger().debug("ReCreating serverpage for [" + String.valueOf(id) + "]"); + getLogger().debug("ReCreating serverpage for [" + id + "]"); } synchronized (this) { if (getLogger().isDebugEnabled()) { - getLogger().debug("Releasing old serverpage program [" + String.valueOf(id) + "]"); + getLogger().debug("Releasing old serverpage program [" + id + "]"); } release(programInstance); programmingLanguage.unload(program, normalizedName, this.workDir); @@ -317,7 +334,7 @@ // check the repository for changes at all? if (this.watchSource) { if (getLogger().isDebugEnabled()) { - getLogger().debug("Checking sourcecode of [" + String.valueOf(id) + "] for a change"); + getLogger().debug("Checking sourcecode of [" + id + "] for a change"); } File sourcecodeFile = new File(this.workDir, normalizedName + "." + programmingLanguage.getSourceExtension()); // has sourcecode in repository changed ? @@ -325,11 +342,11 @@ long sourcecodeLastModified = sourcecodeFile.lastModified(); if (sourcecodeLastModified > sourceLastModified || sourceLastModified == 0 || sourcecodeLastModified == 0) { if (getLogger().isDebugEnabled()) { - getLogger().debug("Create new serverpage program for [" + String.valueOf(id) + "] - repository has changed"); + getLogger().debug("Create new serverpage program for [" + id + "] - repository has changed"); } synchronized (this) { if (getLogger().isDebugEnabled()) { - getLogger().debug("Releasing old serverpage program [" + String.valueOf(id) + "]"); + getLogger().debug("Releasing old serverpage program [" + id + "]"); } release(programInstance); //programmingLanguage.unload(program, normalizedName, this.workDir); @@ -342,13 +359,13 @@ } else { if (getLogger().isDebugEnabled()) { - getLogger().debug("Sourcecode of [" + String.valueOf(id) + "] has not changed - returning program from cache"); + getLogger().debug("Sourcecode of [" + id + "] has not changed - returning program from cache"); } } } else { if (getLogger().isErrorEnabled()) { - getLogger().error("Could not find sourcecode for [" + String.valueOf(id) + "]"); + getLogger().error("Could not find sourcecode for [" + id + "]"); } } } @@ -395,13 +412,13 @@ try { if (getLogger().isDebugEnabled()) { - getLogger().debug("Loading program [" + String.valueOf(normalizedName) + "]"); + getLogger().debug("Loading program [" + normalizedName + "]"); } Program program = programmingLanguage.load(normalizedName, this.workDir, markupLanguage.getEncoding()); this.cache.addGenerator(newManager, normalizedName, program); if (getLogger().isDebugEnabled()) { - getLogger().debug("Successfully loaded program [" + String.valueOf(normalizedName) + "]"); + getLogger().debug("Successfully loaded program [" + normalizedName + "]"); } } catch (LanguageException le) { @@ -433,7 +450,7 @@ throws Exception { if (getLogger().isDebugEnabled()) { - getLogger().debug("Creating sourcecode for [" + String.valueOf(source.getSystemId()) + "]"); + getLogger().debug("Creating sourcecode for [" + source.getSystemId() + "]"); } // Input Source // FIXME(VG): Use Source.toSAX() @@ -466,12 +483,26 @@ } IOUtils.serializeString(sourceFile, code); if (getLogger().isDebugEnabled()) { - getLogger().debug("Successfully created sourcecode for [" + String.valueOf(source.getSystemId()) + "]"); + getLogger().debug("Successfully created sourcecode for [" + source.getSystemId() + "]"); } } + /** + * Releases the program instance. + * @param component program instance to be released + */ public void release(CompiledComponent component) { this.cache.release(component); + } + + /** + * Removes named program from the program generator's cache. + * Disposes all created instances of the program. + * @param source of the program to be removed + */ + public void remove(Source source) { + final String normalizedName = getNormalizedName(source.getSystemId()); + this.cache.removeGenerator(normalizedName); } /**
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]