use of org.pentaho.platform.util.web.SimpleUrlFactory in project pentaho-platform by pentaho.
the class PentahoSystem method sessionStartup.
public static void sessionStartup(final IPentahoSession session, IParameterProvider sessionParameters) {
List<ISessionStartupAction> sessionStartupActions = PentahoSystem.getSessionStartupActionsForType(session.getClass().getName());
if (sessionStartupActions == null) {
// nothing to do...
return;
}
if (!session.isAuthenticated()) {
return;
}
Boolean startupActionsFired = (Boolean) session.getAttribute("StartupActionsFired");
if ((startupActionsFired == null) || (!startupActionsFired)) {
try {
if (debug) {
// $NON-NLS-1$
Logger.debug(PentahoSystem.class, "Process session startup actions");
}
if (sessionStartupActions != null) {
for (ISessionStartupAction sessionStartupAction : sessionStartupActions) {
// parse the actionStr out to identify an action
// now execute the action...
SimpleOutputHandler outputHandler = null;
String instanceId = null;
ISolutionEngine solutionEngine = PentahoSystem.get(ISolutionEngine.class, session);
solutionEngine.setLoggingLevel(PentahoSystem.loggingLevel);
solutionEngine.init(session);
// $NON-NLS-1$
String baseUrl = "";
HashMap parameterProviderMap = new HashMap();
if (sessionParameters == null) {
sessionParameters = new PentahoSessionParameterProvider(session);
}
parameterProviderMap.put(SCOPE_SESSION, sessionParameters);
IPentahoUrlFactory urlFactory = new SimpleUrlFactory(baseUrl);
ArrayList messages = new ArrayList();
IRuntimeContext context = null;
try {
context = solutionEngine.execute(sessionStartupAction.getActionPath(), "Session startup actions", false, true, instanceId, false, parameterProviderMap, outputHandler, null, urlFactory, // $NON-NLS-1$
messages);
// if context is null, then we cannot check the status
if (null == context) {
return;
}
if (context.getStatus() == IRuntimeContext.RUNTIME_STATUS_SUCCESS) {
// now grab any outputs
Iterator outputNameIterator = context.getOutputNames().iterator();
while (outputNameIterator.hasNext()) {
String attributeName = (String) outputNameIterator.next();
IActionParameter output = context.getOutputParameter(attributeName);
Object data = output.getValue();
if (data != null) {
session.removeAttribute(attributeName);
session.setAttribute(attributeName, data);
}
}
}
} catch (Throwable th) {
Logger.warn(PentahoSystem.class.getName(), Messages.getInstance().getString("PentahoSystem.WARN_UNABLE_TO_EXECUTE_SESSION_ACTION", th.getLocalizedMessage()), // $NON-NLS-1$
th);
} finally {
if (context != null) {
context.dispose();
}
}
}
}
} finally {
session.setAttribute("StartupActionsFired", true);
}
} else {
if (debug) {
Logger.debug(PentahoSystem.class, "Session startup actions already fired");
}
}
}
use of org.pentaho.platform.util.web.SimpleUrlFactory in project pentaho-platform by pentaho.
the class DefaultChartBeansGenerator method runActionSequence.
/**
* Executes an action sequence from an <code>ActionSequenceDocument</code>.
*
* @param pentahoSession
* current <code>IPentahoSession</code>
* @param parameterProviders
* map of parameter providers; there should a single entry with "request" as the key
* @param outputHandler
* output handler
* @param doc
* action sequence document
* @throws RuntimeException
* if anything goes wrong
*/
protected void runActionSequence(final IPentahoSession pentahoSession, final Map<String, IParameterProvider> parameterProviders, final IOutputHandler outputHandler, final ActionSequenceDocument doc) throws RuntimeException {
// Get the solution engine
ISolutionEngine solutionEngine = PentahoSystem.get(ISolutionEngine.class, pentahoSession);
if (solutionEngine == null) {
// $NON-NLS-1$
throw new RuntimeException("solutionEngine is null");
}
solutionEngine.setLoggingLevel(ILogger.DEBUG);
solutionEngine.init(pentahoSession);
IPentahoRequestContext requestContext = PentahoRequestContextHolder.getRequestContext();
String contextPath = requestContext.getContextPath();
// $NON-NLS-1$
IPentahoUrlFactory urlFactory = new SimpleUrlFactory(contextPath);
IRuntimeContext runtime;
IParameterProvider requestParmProvider = parameterProviders.get("request");
if (requestParmProvider.hasParameter("obj_id")) {
final String obj_id = (String) requestParmProvider.getParameter("obj_id");
final String msg_name = (String) requestParmProvider.getParameter("message_name");
final String job_id = (String) requestParmProvider.getParameter("job_id");
runtime = // $NON-NLS-1$ //$NON-NLS-2$
solutionEngine.execute(// $NON-NLS-1$ //$NON-NLS-2$
doc.toString(), // $NON-NLS-1$ //$NON-NLS-2$
obj_id, // $NON-NLS-1$ //$NON-NLS-2$
job_id, // $NON-NLS-1$ //$NON-NLS-2$
false, // $NON-NLS-1$ //$NON-NLS-2$
true, msg_name, true, parameterProviders, outputHandler, null, urlFactory, // $NON-NLS-1$
new ArrayList());
} else {
runtime = // $NON-NLS-1$ //$NON-NLS-2$
solutionEngine.execute(// $NON-NLS-1$ //$NON-NLS-2$
doc.toString(), // $NON-NLS-1$ //$NON-NLS-2$
"chartbeans_mql", // $NON-NLS-1$ //$NON-NLS-2$
"myprocessid", // $NON-NLS-1$ //$NON-NLS-2$
false, // $NON-NLS-1$ //$NON-NLS-2$
true, "myinstanceid", true, parameterProviders, outputHandler, null, urlFactory, // $NON-NLS-1$
new ArrayList());
}
if ((runtime != null) && (runtime.getStatus() != IRuntimeContext.RUNTIME_STATUS_SUCCESS)) {
StringBuilder buf = new StringBuilder();
boolean firstIteration = true;
for (Object /* String */
message : runtime.getMessages()) {
if (message instanceof Exception) {
Exception ex = (Exception) message;
if (ex.getCause() instanceof RuntimeException) {
throw (RuntimeException) ex.getCause();
}
}
if (!firstIteration) {
// $NON-NLS-1$
buf.append(" \\\\ ");
}
buf.append(message);
}
String errorStr;
if (buf.indexOf("action_sequence_failed") > -1 && buf.indexOf("MQLRelationalDataComponent") > -1) {
errorStr = Messages.getInstance().getString("DefaultChartBeansGenerator.ERROR_0001_SECURITY_ERROR");
} else {
errorStr = Messages.getInstance().getString("DefaultChartBeansGenerator.ERROR_0002_UNKNOWN_ERROR");
}
throw new RuntimeException(errorStr);
}
}
use of org.pentaho.platform.util.web.SimpleUrlFactory in project pentaho-platform by pentaho.
the class DashboardWidgetIT method testWidget1.
public void testWidget1() {
startTest();
// $NON-NLS-1$
SimpleUrlFactory urlFactory = new SimpleUrlFactory("/testurl?");
ArrayList messages = new ArrayList();
DashboardWidgetComponent widget = new DashboardWidgetComponent(DashboardWidgetComponent.TYPE_DIAL, getSolutionPath() + "/samples/charts/dashboardwidget1.dial.xml", 300, 300, urlFactory, // $NON-NLS-1$
messages);
widget.setLoggingLevel(getLoggingLevel());
widget.setValue(72.5);
// $NON-NLS-1$
widget.setTitle("test widget 1");
// $NON-NLS-1$
widget.setUnits("$");
// $NON-NLS-1$//$NON-NLS-2$
OutputStream outputStream = getOutputStream("DashboardWidgetTest.testWidget1", ".html");
// $NON-NLS-1$
String contentType = "text/html";
SimpleParameterProvider requestParameters = new SimpleParameterProvider();
SimpleParameterProvider sessionParameters = new SimpleParameterProvider();
HashMap parameterProviders = new HashMap();
parameterProviders.put(HttpRequestParameterProvider.SCOPE_REQUEST, requestParameters);
parameterProviders.put(HttpSessionParameterProvider.SCOPE_SESSION, sessionParameters);
// $NON-NLS-1$
StandaloneSession session = new StandaloneSession("BaseTest.DEBUG_JUNIT_SESSION");
SimpleOutputHandler outputHandler = new SimpleOutputHandler(outputStream, false);
BaseRequestHandler requestHandler = new BaseRequestHandler(session, null, outputHandler, null, urlFactory);
try {
widget.validate(session, requestHandler);
widget.handleRequest(outputStream, requestHandler, contentType, parameterProviders);
} catch (IOException e) {
e.printStackTrace();
}
finishTest();
}
use of org.pentaho.platform.util.web.SimpleUrlFactory in project pentaho-platform by pentaho.
the class GlobalOutputIT method testEmptyActionSequence.
public void testEmptyActionSequence() {
startTest();
List messages = new ArrayList();
String instanceId = null;
IPentahoSession session = new StandaloneSession("system");
PentahoSessionHolder.setSession(session);
ISolutionEngine solutionEngine = PentahoSystem.get(ISolutionEngine.class);
solutionEngine.setLoggingLevel(ILogger.ERROR);
solutionEngine.init(session);
String baseUrl = PentahoSystem.getApplicationContext().getBaseUrl();
HashMap parameterProviderMap = new HashMap();
IPentahoUrlFactory urlFactory = new SimpleUrlFactory(baseUrl);
try {
File file = new File(getSolutionPath() + "/samples/platform/SetGlobalOutputTest.xaction");
StringBuilder str = new StringBuilder();
Reader reader = new FileReader(file);
char[] buffer = new char[4096];
int n = reader.read(buffer);
while (n != -1) {
str.append(buffer, 0, n);
n = reader.read(buffer);
}
String xactionStr = str.toString();
solutionEngine.setSession(session);
IRuntimeContext runtimeContext = solutionEngine.execute(xactionStr, "SetGlobalOutputTest.xaction", "empty action sequence test", false, true, instanceId, false, parameterProviderMap, null, null, urlFactory, // $NON-NLS-1$ //$NON-NLS-2$
messages);
assertNotNull("RuntimeContext is null", runtimeContext);
assertEquals("Action sequence execution failed", runtimeContext.getStatus(), IRuntimeContext.RUNTIME_STATUS_SUCCESS);
IParameterProvider provider = PentahoSystem.getGlobalParameters();
// $NON-NLS-1$
String parameter = provider.getStringParameter("GLOBAL_TEST", null);
assertNotNull(parameter);
// $NON-NLS-1$
assertEquals("This is a test", parameter);
} catch (Exception e) {
// we should not get here
e.printStackTrace();
assertTrue(e.getMessage(), false);
}
}
use of org.pentaho.platform.util.web.SimpleUrlFactory in project pentaho-platform by pentaho.
the class GeneratorStreamingOutput method generateContent.
protected void generateContent(OutputStream outputStream, final MimeTypeCallback callback) throws Exception {
try {
httpServletResponse.setCharacterEncoding(LocaleHelper.getSystemEncoding());
} catch (Throwable t) {
// $NON-NLS-1$
logger.warn("could not set encoding, servlet-api is likely too old. are we in a unit test?");
}
IOutputHandler outputHandler = new HttpOutputHandler(httpServletResponse, outputStream, true);
outputHandler.setMimeTypeListener(new HttpMimeTypeListener(httpServletRequest, httpServletResponse) {
/*
* This content generator is setting the mimeType
*/
@Override
public void setMimeType(String mimeType) {
try {
if (!MIMETYPE_MUTABLE && GeneratorStreamingOutput.this.getMimeType() != null) {
mimeTrace(// $NON-NLS-1$
"Content generator is trying to set response mime type to [{0}], but mime type [{1}] has already been imposed. Content generator request to change mime type will be ignored.", mimeType, GeneratorStreamingOutput.this.getMimeType());
return;
} else {
// $NON-NLS-1$
mimeTrace("Content generator is setting response mime type to [{0}]", mimeType);
if (callback != null) {
callback.setMimeType(mimeType);
}
GeneratorStreamingOutput.this.setMimeType(mimeType);
}
} catch (Throwable th) {
mimeTrace("Failed to set mime type: {0}", th.getMessage());
// $NON-NLS-1$
logger.error(MessageFormat.format("Failed to set mime type: {0}", th.getMessage()));
}
super.setMimeType(mimeType);
}
});
Map<String, IParameterProvider> parameterProviders = new HashMap<String, IParameterProvider>();
parameterProviders.put(IParameterProvider.SCOPE_REQUEST, createRequestParamProvider());
parameterProviders.put(IParameterProvider.SCOPE_SESSION, createSessionParameterProvider());
// $NON-NLS-1$
parameterProviders.put("headers", createHeaderParamProvider());
// $NON-NLS-1$
parameterProviders.put("path", createPathParamProvider());
String pluginId = contentGeneratorDescriptor.getPluginId();
IPentahoUrlFactory urlFactory = new SimpleUrlFactory(PentahoRequestContextHolder.getRequestContext().getContextPath() + "api/repos/" + pluginId + "/" + contentGeneratorID + // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
"?");
// set the classloader of the current thread to the class loader of
// the plugin so that it can load its libraries
// Note: we cannot ask the contentGenerator class for it's classloader,
// since the cg may
// actually be a proxy object loaded by main the WebAppClassloader
ClassLoader origContextClassloader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(pluginMgr.getClassLoader(pluginId));
try {
contentGenerator.setOutputHandler(outputHandler);
contentGenerator.setMessagesList(new ArrayList<String>());
contentGenerator.setParameterProviders(parameterProviders);
contentGenerator.setSession(PentahoSessionHolder.getSession());
if (urlFactory != null) {
contentGenerator.setUrlFactory(urlFactory);
}
contentGenerator.createContent();
} finally {
Thread.currentThread().setContextClassLoader(origContextClassloader);
}
}
Aggregations