You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by un...@apache.org on 2004/01/27 14:28:13 UTC
cvs commit: cocoon-2.2/src/java/org/apache/cocoon/components/flow/javascript/fom FOM_Cocoon.java
unico 2004/01/27 05:28:12
Modified: src/java/org/apache/cocoon/components/cprocessor/sitemap
RedirectToURINode.java CallFunctionNode.java
ActNode.java PipelinesNode.java
ErrorHandlerHelper.java
src/java/org/apache/cocoon/components/pipeline
ProcessingPipeline.java
src/java/org/apache/cocoon/components/cprocessor
ProcessingNode.java sitemap2xconf.xsl
AbstractProcessingNode.java
src/java/org/apache/cocoon/components/flow/javascript
JSCocoon.java
src/java/org/apache/cocoon/environment/internal
EnvironmentHelper.java
src/java/org/apache/cocoon/components/flow
AbstractInterpreter.java
src/java/org/apache/cocoon/components/flow/javascript/fom
FOM_Cocoon.java
Log:
make map:act work
use EnvronmentHelper to store the current sourceresolver and redirector objects in the EnvironmentContext
Revision Changes Path
1.3 +3 -2 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/RedirectToURINode.java
Index: RedirectToURINode.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/RedirectToURINode.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RedirectToURINode.java 5 Jan 2004 08:17:30 -0000 1.2
+++ RedirectToURINode.java 27 Jan 2004 13:27:37 -0000 1.3
@@ -60,6 +60,7 @@
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.PermanentRedirector;
import org.apache.cocoon.environment.Redirector;
+import org.apache.cocoon.environment.internal.EnvironmentHelper;
import org.apache.cocoon.sitemap.PatternException;
/**
@@ -104,7 +105,7 @@
getLogger().info("Redirecting to '" + resolvedURI + "' at " + getLocation());
}
- final Redirector redirector = PipelinesNode.getRedirector(env);
+ final Redirector redirector = EnvironmentHelper.getRedirector();
if (m_global) {
redirector.globalRedirect(m_createSession, resolvedURI);
1.4 +3 -2 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/CallFunctionNode.java
Index: CallFunctionNode.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/CallFunctionNode.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- CallFunctionNode.java 5 Jan 2004 08:17:30 -0000 1.3
+++ CallFunctionNode.java 27 Jan 2004 13:27:40 -0000 1.4
@@ -64,6 +64,7 @@
import org.apache.cocoon.components.flow.Interpreter;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.Redirector;
+import org.apache.cocoon.environment.internal.EnvironmentHelper;
import org.apache.cocoon.sitemap.PatternException;
/**
@@ -151,7 +152,7 @@
}
public boolean invoke(Environment env, InvokeContext context) throws Exception {
- Redirector redirector = PipelinesNode.getRedirector(env);
+ Redirector redirector = EnvironmentHelper.getRedirector();
List params = null;
1.2 +33 -31 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/ActNode.java
Index: ActNode.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/ActNode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ActNode.java 29 Dec 2003 17:13:15 -0000 1.1
+++ ActNode.java 27 Jan 2004 13:27:43 -0000 1.2
@@ -54,6 +54,7 @@
import java.util.Map;
import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.parameters.Parameters;
@@ -68,6 +69,7 @@
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.SourceResolver;
+import org.apache.cocoon.environment.internal.EnvironmentHelper;
import org.apache.cocoon.sitemap.PatternException;
/**
@@ -83,7 +85,7 @@
* @x-avalon.info name=act-node
*/
public class ActNode extends SimpleParentProcessingNode
-implements ProcessingNode, Disposable {
+implements ProcessingNode, Initializable, Disposable {
/** The 'name' for the variable anchor */
private String m_name;
@@ -161,39 +163,39 @@
public final boolean invoke(Environment env, InvokeContext context) throws Exception {
- if (m_actionSetNode != null) {
- // Perform any common invoke functionality
- super.invoke(env, context);
-
- Parameters resolvedParams = VariableResolver.buildParameters(
- super.m_parameters,
- context,
- env.getObjectModel()
- );
-
- Map result = m_actionSetNode.call(env, context, resolvedParams);
-
- if (PipelinesNode.getRedirector(env).hasRedirected()) {
- return true;
-
- } else if (result == null) {
- return false;
-
- } else if (getChildNodes() == null) {
- return true;
-
- } else {
- return this.invokeNodes(getChildNodes(), env, context, null, result);
- }
- }
+ if (m_actionSetNode != null) {
+ // Perform any common invoke functionality
+ super.invoke(env, context);
+
+ Parameters resolvedParams = VariableResolver.buildParameters(
+ super.m_parameters,
+ context,
+ env.getObjectModel()
+ );
+
+ Map result = m_actionSetNode.call(env, context, resolvedParams);
+
+ if (EnvironmentHelper.getRedirector().hasRedirected()) {
+ return true;
+
+ } else if (result == null) {
+ return false;
+
+ } else if (getChildNodes() == null) {
+ return true;
+
+ } else {
+ return this.invokeNodes(getChildNodes(), env, context, null, result);
+ }
+ }
- // Perform any common invoke functionality
- super.invoke(env, context);
+ // Perform any common invoke functionality
+ super.invoke(env, context);
// Prepare data needed by the action
Map objectModel = env.getObjectModel();
- Redirector redirector = PipelinesNode.getRedirector(env);
- SourceResolver resolver = getSourceResolver(objectModel);
+ Redirector redirector = EnvironmentHelper.getRedirector();
+ SourceResolver resolver = EnvironmentHelper.getSourceResolver();
String resolvedSource = m_source.resolve(context, objectModel);
Parameters resolvedParams = VariableResolver.buildParameters(super.m_parameters, context, objectModel);
1.3 +1 -26 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/PipelinesNode.java
Index: PipelinesNode.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/PipelinesNode.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PipelinesNode.java 5 Jan 2004 08:17:30 -0000 1.2
+++ PipelinesNode.java 27 Jan 2004 13:27:44 -0000 1.3
@@ -51,7 +51,6 @@
package org.apache.cocoon.components.cprocessor.sitemap;
import java.util.ArrayList;
-import java.util.Map;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -63,8 +62,6 @@
import org.apache.cocoon.components.cprocessor.ProcessingNode;
import org.apache.cocoon.components.cprocessor.SimpleParentProcessingNode;
import org.apache.cocoon.environment.Environment;
-import org.apache.cocoon.environment.ForwardRedirector;
-import org.apache.cocoon.environment.Redirector;
/**
* Handles <map:pipelines>
@@ -82,8 +79,6 @@
* @x-avalon.info name=pipelines-node
*/
public final class PipelinesNode extends SimpleParentProcessingNode implements Initializable {
-
- private static final String REDIRECTOR_ATTR = "sitemap:redirector";
private ErrorHandlerHelper m_errorHandlerHelper = new ErrorHandlerHelper();
@@ -126,10 +121,6 @@
m_pipelines = (ProcessingNode[]) pipelines.toArray(new ProcessingNode[pipelines.size()]);
}
- public static Redirector getRedirector(Environment env) {
- return (Redirector) env.getAttribute(REDIRECTOR_ATTR);
- }
-
/**
* Process the environment. Also adds a <code>SourceResolver</code>
* and a <code>Redirector</code> in the object model. The previous resolver and
@@ -144,18 +135,6 @@
// Recompose context (and pipelines) to the local component manager
context.reservice(super.m_manager);
- // Build a redirector
- ForwardRedirector redirector = new ForwardRedirector(env);
- setupLogger(redirector);
-
- Map objectModel = env.getObjectModel();
-
- Object oldResolver = objectModel.get(OBJECT_SOURCE_RESOLVER);
- Object oldRedirector = env.getAttribute(REDIRECTOR_ATTR);
-
- objectModel.put(OBJECT_SOURCE_RESOLVER, env);
- env.setAttribute(REDIRECTOR_ATTR, redirector);
-
try {
// FIXME : is there any useful information that can be passed as top-level parameters,
// such as the URI of the mount point ?
@@ -173,10 +152,6 @@
// No handler : propagate
throw ex;
}
- } finally {
- // Restore old redirector and resolver
- env.setAttribute(REDIRECTOR_ATTR, oldRedirector);
- objectModel.put(OBJECT_SOURCE_RESOLVER, oldResolver);
}
}
1.3 +2 -2 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/ErrorHandlerHelper.java
Index: ErrorHandlerHelper.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap/ErrorHandlerHelper.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ErrorHandlerHelper.java 5 Jan 2004 08:17:30 -0000 1.2
+++ ErrorHandlerHelper.java 27 Jan 2004 13:27:44 -0000 1.3
@@ -84,7 +84,7 @@
public boolean invokeErrorHandler(ProcessingNode node, Exception ex, Environment env)
throws Exception {
Map objectModel = env.getObjectModel();
-
+
InvokeContext errorContext = null;
boolean nodeSuccessful = false;
1.7 +2 -2 cocoon-2.2/src/java/org/apache/cocoon/components/pipeline/ProcessingPipeline.java
Index: ProcessingPipeline.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/pipeline/ProcessingPipeline.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ProcessingPipeline.java 8 Jan 2004 11:13:07 -0000 1.6
+++ ProcessingPipeline.java 27 Jan 2004 13:27:47 -0000 1.7
@@ -73,7 +73,7 @@
*
* <p>
* A <code>ProcessingPipeline</code> is <code>Recomposable</code> since the
- * <code>ComponentManager</code> used to get the generato, transformers etc.
+ * <code>ComponentManager</code> used to get the generators, transformers etc.
* depends on the pipeline assembly engine where they are defined (i.e. a given
* sitemap file).
*
1.3 +1 -4 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/ProcessingNode.java
Index: ProcessingNode.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/ProcessingNode.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ProcessingNode.java 5 Jan 2004 08:16:00 -0000 1.2
+++ ProcessingNode.java 27 Jan 2004 13:27:47 -0000 1.3
@@ -64,9 +64,6 @@
public static final String ROLE = ProcessingNode.class.getName();
- /** The key used for the <code>SourceResolver</code> in the object model. */
- static final String OBJECT_SOURCE_RESOLVER = "source-resolver";
-
/**
* Process this node with the suppled environment information. Will recursively
* process child nodes.
1.7 +14 -6 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap2xconf.xsl
Index: sitemap2xconf.xsl
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/sitemap2xconf.xsl,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- sitemap2xconf.xsl 27 Jan 2004 10:32:59 -0000 1.6
+++ sitemap2xconf.xsl 27 Jan 2004 13:27:47 -0000 1.7
@@ -268,14 +268,22 @@
</xsl:variable>
<act-node id="{$id}" logger="sitemap.processor">
<xsl:apply-templates select="@*" mode="copy" />
- <xsl:if test="not(@type)">
- <!-- set the default type -->
- <xsl:if test="/map:sitemap/map:components/map:actions/@default">
+ <xsl:choose>
+ <xsl:when test="@type">
<xsl:attribute name="type">
- <xsl:value-of select="/map:sitemap/map:components/map:actions/@default" />
+ <xsl:value-of select="@type"/>
+ <xsl:text>-action</xsl:text>
</xsl:attribute>
- </xsl:if>
- </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="/map:sitemap/map:components/map:actions/@default">
+ <xsl:attribute name="type">
+ <xsl:value-of select="/map:sitemap/map:components/map:actions/@default" />
+ <xsl:text>-action</xsl:text>
+ </xsl:attribute>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
<xsl:for-each select="map:match|map:select|map:act|map:call|map:aggregate|map:generate|map:transform|map:serialize|map:read|map:mount|map:redirect-to">
<xsl:element name="{local-name()}">
<xsl:attribute name="id-ref">
1.2 +1 -9 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/AbstractProcessingNode.java
Index: AbstractProcessingNode.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/AbstractProcessingNode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractProcessingNode.java 28 Dec 2003 21:03:17 -0000 1.1
+++ AbstractProcessingNode.java 27 Jan 2004 13:27:47 -0000 1.2
@@ -61,7 +61,6 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.components.cprocessor.variables.VariableResolverFactory;
-import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.xml.LocationAugmentationPipe;
@@ -162,13 +161,6 @@
protected final String getConfigLocation(Configuration config) {
return config.getAttribute(LocationAugmentationPipe.LOCATION_ATTR,
LocationAugmentationPipe.UNKNOWN_LOCATION);
- }
-
- /**
- * Get the <code>SourceResolver</code> in an object model.
- */
- protected static final SourceResolver getSourceResolver(Map objectModel) {
- return (SourceResolver) objectModel.get(OBJECT_SOURCE_RESOLVER);
}
}
1.17 +2 -3 cocoon-2.2/src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java
Index: JSCocoon.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- JSCocoon.java 10 Jan 2004 14:38:19 -0000 1.16
+++ JSCocoon.java 27 Jan 2004 13:27:49 -0000 1.17
@@ -70,7 +70,6 @@
import org.apache.cocoon.environment.internal.EnvironmentHelper;
import org.apache.cocoon.components.modules.output.OutputModule;
import org.apache.cocoon.components.modules.input.InputModule;
-import org.apache.cocoon.components.cprocessor.sitemap.PipelinesNode;
import org.apache.cocoon.components.flow.ContinuationsManager;
import org.apache.cocoon.components.flow.WebContinuation;
import org.apache.cocoon.acting.Action;
@@ -264,7 +263,7 @@
try {
// Cannot use environment directly as TreeProcessor uses own version of redirector
// environment.redirect(false, uri);
- PipelinesNode.getRedirector(environment).redirect(false, uri);
+ EnvironmentHelper.getRedirector().redirect(false, uri);
} catch (Exception e) {
throw new JavaScriptException(e);
}
1.3 +47 -7 cocoon-2.2/src/java/org/apache/cocoon/environment/internal/EnvironmentHelper.java
Index: EnvironmentHelper.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/environment/internal/EnvironmentHelper.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- EnvironmentHelper.java 19 Jan 2004 10:47:14 -0000 1.2
+++ EnvironmentHelper.java 27 Jan 2004 13:27:54 -0000 1.3
@@ -64,7 +64,9 @@
import org.apache.cocoon.Processor;
import org.apache.cocoon.components.source.SourceUtil;
import org.apache.cocoon.environment.Environment;
+import org.apache.cocoon.environment.ForwardRedirector;
import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Response;
import org.apache.cocoon.environment.Session;
@@ -86,6 +88,14 @@
extends AbstractLogEnabled
implements SourceResolver, Serviceable, Disposable {
+ /** The key used to store the current SourceResolver
+ * in the environment context */
+ private static final String SOURCE_RESOLVER_KEY = "global:" + SourceResolver.class.getName();
+
+ /** The key used to store the current redirector
+ * in the environment context */
+ private static final String REDIRECTOR_KEY = "global:" + Redirector.class.getName();
+
/** The key used to store the current environment context
* in the object model */
static protected final String PROCESS_KEY = EnvironmentHelper.class.getName();
@@ -340,10 +350,10 @@
this.doRedirect(env, sessionmode, newURL, true, false);
}
- /**
- * Redirect the client to new URL with session mode
- */
- protected void doRedirect(Environment env,
+ /**
+ * Redirect the client to new URL with session mode
+ */
+ protected void doRedirect(Environment env,
boolean sessionmode,
String newURL,
boolean permanent,
@@ -403,7 +413,15 @@
}
stack.pushInfo(new EnvironmentInfo(processor, stack.getOffset(), manager, env));
stack.setOffset(stack.size()-1);
- ((EnvironmentContext)env.getObjectModel().get(PROCESS_KEY)).addAttribute(LAST_PROCESSOR_KEY, processor);
+
+ EnvironmentContext ctx = (EnvironmentContext)env.getObjectModel().get(PROCESS_KEY);
+ ctx.addAttribute(LAST_PROCESSOR_KEY, processor);
+ ctx.addAttribute(SOURCE_RESOLVER_KEY, processor.getEnvironmentHelper());
+
+ ForwardRedirector redirector = new ForwardRedirector(env);
+ redirector.enableLogging(processor.getEnvironmentHelper().getLogger());
+ ctx.addAttribute(REDIRECTOR_KEY, redirector);
+
}
/**
@@ -452,11 +470,33 @@
* Return the environment context
*/
public static EnvironmentContext getCurrentEnvironmentContext() {
- final EnvironmentStack stack = (EnvironmentStack)environmentStack.get();
+ final EnvironmentStack stack = (EnvironmentStack) environmentStack.get();
if ( stack != null && !stack.empty() ) {
final EnvironmentInfo info = stack.getCurrentInfo();
final Map objectModel = info.environment.getObjectModel();
return (EnvironmentContext)objectModel.get(PROCESS_KEY);
+ }
+ return null;
+ }
+
+ /**
+ * Return the SourceResolver
+ */
+ public static SourceResolver getSourceResolver() {
+ final EnvironmentContext ctx = getCurrentEnvironmentContext();
+ if (ctx != null) {
+ return (SourceResolver) ctx.getAttribute(SOURCE_RESOLVER_KEY);
+ }
+ return null;
+ }
+
+ /**
+ * Return the Redirector
+ */
+ public static Redirector getRedirector() {
+ final EnvironmentContext ctx = getCurrentEnvironmentContext();
+ if (ctx != null) {
+ return (Redirector) ctx.getAttribute(REDIRECTOR_KEY);
}
return null;
}
1.17 +2 -3 cocoon-2.2/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java
Index: AbstractInterpreter.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- AbstractInterpreter.java 10 Jan 2004 14:38:19 -0000 1.16
+++ AbstractInterpreter.java 27 Jan 2004 13:28:01 -0000 1.17
@@ -61,7 +61,6 @@
import org.apache.avalon.framework.thread.SingleThreaded;
import org.apache.cocoon.Constants;
import org.apache.cocoon.Processor;
-import org.apache.cocoon.components.cprocessor.sitemap.PipelinesNode;
import org.apache.cocoon.environment.Context;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.internal.EnvironmentHelper;
@@ -243,6 +242,6 @@
Map objectModel = environment.getObjectModel();
FlowHelper.setContextObject(objectModel, bizData);
FlowHelper.setWebContinuation(objectModel, continuation);
- PipelinesNode.getRedirector(environment).redirect(false, uri);
+ EnvironmentHelper.getRedirector().redirect(false, uri);
}
}
1.19 +4 -4 cocoon-2.2/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java
Index: FOM_Cocoon.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- FOM_Cocoon.java 28 Dec 2003 21:09:59 -0000 1.18
+++ FOM_Cocoon.java 27 Jan 2004 13:28:06 -0000 1.19
@@ -61,7 +61,6 @@
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.cocoon.components.cprocessor.sitemap.PipelinesNode;
import org.apache.cocoon.components.flow.ContinuationsManager;
import org.apache.cocoon.components.flow.WebContinuation;
import org.apache.cocoon.components.flow.Interpreter.Argument;
@@ -72,6 +71,7 @@
import org.apache.cocoon.environment.Response;
import org.apache.cocoon.environment.Session;
import org.apache.cocoon.environment.http.HttpResponse;
+import org.apache.cocoon.environment.internal.EnvironmentHelper;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.JavaScriptException;
import org.mozilla.javascript.Script;
@@ -206,11 +206,11 @@
public void jsFunction_redirectTo(String uri) throws Exception {
// Cannot use environment directly as TreeProcessor uses own version of redirector
// environment.redirect(false, uri);
- PipelinesNode.getRedirector(environment).redirect(false, uri);
+ EnvironmentHelper.getRedirector().redirect(false, uri);
}
public void jsFunction_sendStatus(int sc) {
- PipelinesNode.getRedirector(environment).sendStatus(sc);
+ EnvironmentHelper.getRedirector().sendStatus(sc);
}
/*