blob: 627bb67bf1809e709b30be5e03e15d78c91da902 [file] [log] [blame]
package org.eclipse.osbp.utils.vaadin.saiku;
import java.util.Locale;
import java.util.UUID;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
import org.eclipse.osbp.runtime.common.event.IEventDispatcher;
import org.eclipse.osbp.ui.api.metadata.IDSLMetadataService;
import org.eclipse.osbp.ui.api.user.IUser;
import org.eclipse.osbp.utils.vaadin.YesNoDialog;
import org.slf4j.Logger;
import com.vaadin.annotations.JavaScript;
import com.vaadin.annotations.StyleSheet;
import com.vaadin.server.Page;
import com.vaadin.shared.communication.PushMode;
import com.vaadin.ui.AbstractJavaScriptComponent;
import com.vaadin.ui.JavaScriptFunction;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;
import elemental.json.JsonArray;
@StyleSheet({
"theme://plugin/saiku.osgi/resources/css/saiku/src/bootstrap.css",
"theme://plugin/saiku.osgi/resources/js/tourist/tourist.css",
"theme://plugin/saiku.osgi/resources/js/intro/introjs.min.css",
"theme://plugin/saiku.osgi/resources/js/qtip/jquery.qtip.min.css",
// <!-- jQuery CSS -->
"theme://plugin/saiku.osgi/resources/css/jquery/spectrum.css",
"theme://plugin/saiku.osgi/resources/css/jquery/jquery-ui.css",
"theme://plugin/saiku.osgi/resources/css/saiku/src/giveitsomestyle.css",
"theme://plugin/saiku.osgi/resources/js/fancybox/jquery.fancybox.css",
"theme://plugin/saiku.osgi/resources/js/jquery/jquery.contextMenu.css",
// <!-- Saiku CSS -->
"theme://plugin/saiku.osgi/resources/css/saiku/src/styles.css",
"theme://plugin/saiku.osgi/resources/css/saiku/src/saiku.table.css",
"theme://plugin/saiku.osgi/resources/css/saiku/src/saiku.dropzone.css",
// <!-- CCC dependencies -->
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/CCC_Chart2/tipsy.css"
})
@JavaScript({
// "theme://plugin/saiku.osgi/resources/js/ccMxClient.js",
//<!-- jQuery 1.7.2 , jQuery UI 1.8.14-->
// "theme://plugin/saiku.osgi/resources/js/jquery/jquery.min.js",
"theme://plugin/saiku.osgi/resources/js/jquery/jquery-3.3.1.js",
"theme://plugin/saiku.osgi/resources/js/jquery/jquery-ui.min.js",
"theme://plugin/saiku.osgi/resources/js/jquery/jquery.contextMenu.js",
"theme://plugin/saiku.osgi/resources/js/jquery/jquery-mobile-touch.js",
"theme://plugin/saiku.osgi/resources/js/jquery/jquery.blockUI.js",
"theme://plugin/saiku.osgi/resources/js/jquery/spectrum.js",
"theme://plugin/saiku.osgi/resources/js/js-yaml/js-yaml.min.js",
"theme://plugin/saiku.osgi/resources/js/fancybox/jquery.fancybox.pack.js",
// <!-- Backbone.js and deps -->
"theme://plugin/saiku.osgi/resources/js/backbone/underscore.js",
"theme://plugin/saiku.osgi/resources/js/backbone/json2.js",
"theme://plugin/saiku.osgi/resources/js/backbone/backbone.js",
"theme://plugin/saiku.osgi/resources/js/backbone/backbone-model-file-upload.js" ,
"theme://plugin/saiku.osgi/resources/js/notify/notify.min.js",
"theme://plugin/saiku.osgi/resources/js/fitvids/jquery.fitvids.js",
"theme://plugin/saiku.osgi/resources/js/notify/styles/bootstrap/notify-bootstrap.js",
"theme://plugin/saiku.osgi/resources/js/qtip/imagesloaded.pkg.min.js",
"theme://plugin/saiku.osgi/resources/js/qtip/jquery.qtip.min.js",
"theme://plugin/saiku.osgi/resources/js/tourist/tourist.js",
"theme://plugin/saiku.osgi/resources/js/ozpIwc/ozpIwc-client.min.js",
"theme://plugin/saiku.osgi/resources/js/intro/intro.min.js",
// <!-- Saiku Project -->
"theme://plugin/saiku.osgi/resources/js/saiku/Settings.js",
//<!-- Loggly error logging service -->
"theme://plugin/saiku.osgi/resources/js/logger/janky.post.min.js",
"theme://plugin/saiku.osgi/resources/js/logger/Logger.js",
// <!-- D3 Library -->
"theme://plugin/saiku.osgi/resources/js/d3/d3.v3.min.js",
// <!-- Rest -->
"theme://plugin/saiku.osgi/resources/js/saiku/models/SaikuOlapQuery.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/DateFilter.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/Level.js",
"theme://plugin/saiku.osgi/resources/js/saiku/render/SaikuRenderer.js",
"theme://plugin/saiku.osgi/resources/js/saiku/render/SaikuTableRenderer.js",
"theme://plugin/saiku.osgi/resources/js/saiku/render/SaikuChartRenderer.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/Dimension.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/DimensionList.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/Toolbar.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/Upgrade.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/Modal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/MDXModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/SelectionsModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/DrillthroughModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/DrillAcrossModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/PermissionsModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/DemoLoginForm.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/LoginForm.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/AboutModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/OverwriteModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/AddFolderModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/FilterModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/CustomFilterModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/CalculatedMemberModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/ParentMemberSelectorModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/DataSourcesModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/QueryToolbar.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/WorkspaceToolbar.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/WorkspaceDropZone.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/Table.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/Workspace.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/DeleteRepositoryObject.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/MoveRepositoryObject.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/OpenQuery.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/SaveQuery.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/OpenDialog.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/TabSet.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/Tab.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/Repository.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/Result.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/QueryAction.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/QueryScenario.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/Query.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/SessionErrorModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/WarningModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/ReportTitlesModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/GrowthModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/FormatAsPercentageModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/Session.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/SplashScreen.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/SessionWorkspace.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/Member.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/Plugin.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/Settings.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/License.js",
"theme://plugin/saiku.osgi/resources/js/saiku/models/DataSources.js",
"theme://plugin/saiku.osgi/resources/js/saiku/Saiku.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/DateFilterModal.js",
"theme://plugin/saiku.osgi/resources/js/saiku/adapters/SaikuServer.js",
"theme://plugin/saiku.osgi/resources/js/saiku/routers/QueryRouter.js",
"theme://plugin/saiku.osgi/resources/js/saiku/views/Tour.js",
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/I18n/plugin.js",
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/Intro/plugin.js",
//<!-- CCC dependencies -->
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/CCC_Chart2/jquery.tipsy.js",
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/CCC_Chart2/protovis.js",
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/CCC_Chart2/protovis-msie.js",
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/CCC_Chart2/tipsy.js",
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/CCC_Chart2/def.js",
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/CCC_Chart2/cdo.js",
"theme://plugin/saiku.osgi/resources/js/saiku/plugins/CCC_Chart2/pvc.js",
"theme://plugin/saiku.osgi/resources/js/saiku/embed/SaikuEmbed.js",
//<!-- ACE Editor for MDX -->
"theme://plugin/saiku.osgi/resources/js/ace/ace.js",
//"theme://plugin/saiku.osgi/resources/js/ga.js",
"js/SaikuRendererJsClass.js" })
public class SaikuRenderer extends AbstractJavaScriptComponent implements IUser.UserLocaleListener, IEventDispatcher.Receiver {
private static final long serialVersionUID = 1025480199756469267L;
private static Logger log = org.slf4j.LoggerFactory.getLogger(SaikuRenderer.class);
// private transient BpmnConverter bpmnConverter;
private transient IDSLMetadataService dslMetadataService;
private transient IUser user;
private String processId;
private YesNoDialog yesnoDialog;
private String startProcessText;
private String answerYesText;
private String answerNoText;
private Locale locale;
private YesNoDialog yesnoWindow;
private String yesNoUuid;
private IEventDispatcher eventDispatcher;
private SaikujQueryTemplates queryTemplates;
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
public int hashCode() {
return super.hashCode();
}
public SaikuRenderer(IEclipseContext context) {
user = context.get(IUser.class);
dslMetadataService = context.get(IDSLMetadataService.class);
eventDispatcher = context.get(IEventDispatcher.class);
user.addUserLocaleListener(this);
locale = user.getLocale();
eventDispatcher.addEventReceiver(this);
localeChanged(locale);
queryTemplates = new SaikujQueryTemplates();
addFunction("onStartClick", new JavaScriptFunction() {
@Override
public void call(JsonArray arguments){
// ask to start process
yesNoUuid = UUID.randomUUID().toString();
yesnoWindow = yesnoDialog.init(eventDispatcher, SaikuRenderer.this.getClass().getCanonicalName(), yesNoUuid, null, startProcessText, answerYesText, answerNoText);
UI.getCurrent().addWindow(yesnoWindow);
}
});
addFunction("onSelectedClick", new JavaScriptFunction() {
@Override
public void call(JsonArray arguments){
// start task
}
});
}
public boolean drawSaiku() {
log.debug("start creating saiku");
setSizeFull();
getState().saikuJsJQueryPlaceHolderCode = getSaikuJsJQueryPlaceHolderCode();
getState().saikuJQueryTemplateToolbarCode = queryTemplates.getTemplateToolbar();
getState().saikuJQueryTemplateUpgradeCode = queryTemplates.getTemplateUpgrade();
getState().saikuJQueryTemplateLogincountCode = queryTemplates.getTemplateLogincount();
getState().saikuJQueryTemplateCubesCode = queryTemplates.getTemplateCubes();
getState().saikuJQueryTemplateDimensionsCode = queryTemplates.getTemplateDimensions();
getState().saikuJQueryTemplateMeasuresCode = queryTemplates.getTemplateMeasures();
getState().saikuJQueryTemplateCalculatedMeasuresCode = queryTemplates.getTemplateCalculatedMeasures();
getState().saikuJQueryTemplateCalculatedMemberCode = queryTemplates.getTemplateCalculatedMember();
getState().saikuJQueryTemplateWorkspaceCode = queryTemplates.getTemplateWorkspace();
getState().saikuJQueryTemplateAttributesCode = queryTemplates.getTemplateAttributes();
getState().saikuJQueryTemplateWorkspaceDropzonesCode = queryTemplates.getTemplateWorkspaceDropzones();
getState().saikuJQueryTemplateWorkspaceToolbarCode = queryTemplates.getTemplateWorkspaceToolbar();
getState().saikuJQueryTemplateQueryToolbarCode = queryTemplates.getTemplateQueryToolbar();
getState().saikuJQueryTemplateOpenDialogCode = queryTemplates.getTemplateOpenDialog();
getState().saikuJQueryTemplateRepositoryObjectsCode = queryTemplates.getTemplateRepositoryObjects();
getState().saikuJQueryTemplateRepositoryFolderCode = queryTemplates.getTemplateRepositoryFolder();
getState().saikuJQueryTemplateRepositoryFolderLazyloadCode = queryTemplates.getTemplateRepositoryFolderLazyLoad();
getState().saikuJQueryTemplateRepositoryFileCode = queryTemplates.getTemplateRepositoryFile();
getState().saikuJQueryTemplateSelectionsCode = queryTemplates.getTemplateSelections();
getState().saikuJQueryTemplateSelectionsTotalsCode = queryTemplates.getTemplateSelectionsTotals();
getState().saikuJQueryTemplateSelectionsOptionsCode = queryTemplates.getTemplateSelectionsOptions();
getState().saikuJQueryTemplatePermissionsCode = queryTemplates.getTemplatePermissions();
getState().saikuJQueryTemplatePermissionsRolelistCode = queryTemplates.getTemplatePermissionsRolelist();
getState().saikuJQueryTemplateDrillthroughCode = queryTemplates.getTemplateDrillthrough();
// getState().saikuJQueryTemplateDrillacrossCode = queryTemplates.getTemplateDrillacross();
getState().saikuJQueryTemplateDrillthroughListCode = queryTemplates.getTemplateDrillthroughList();
getState().saikuJQueryTemplateDrillthroughDimensionsCode = queryTemplates.getTemplateDrillthroughDimensions();
getState().saikuJQueryTemplateDrillthroughMeasuresCode = queryTemplates.getTemplateDrillthroughMeasures();
log.debug("finished creating saiku");
return true;
}
@Override
public SaikuRenderState getState() {
return (SaikuRenderState) super.getState();
}
public void dispose() {
user.removeUserLocaleListener(this);
eventDispatcher.removeEventReceiver(this);
}
@Override
public void localeChanged(Locale locale) {
this.locale = locale;
startProcessText = dslMetadataService.translate(locale.toLanguageTag(),"startProcessText");
answerYesText = dslMetadataService.translate(locale.toLanguageTag(),"yes");
answerNoText = dslMetadataService.translate(locale.toLanguageTag(),"no");
}
@Override
public void receiveEvent(EventDispatcherEvent event) {
// if(event.getCommand() == EventDispatcherCommand.BPMN) {
processId = event.getTopic();
UI.getCurrent().access(new Runnable() {
@Override
public void run() {
// UI.getCurrent().getPushConfiguration().setPushMode(PushMode.DISABLED);
// UI.getCurrent().setPollInterval(-1);
// Notification.show("Push disabled!");
drawSaiku();
Page.getCurrent().getJavaScript().execute("document.readyState = \"loading\"");
// Page.getCurrent().getJavaScript().execute("window.document.dispatchEvent(new Event('DOMContentLoaded', {" +
// " bubbles: true," +
// " cancelable: false" +
// "}))");
}
});
// }
}
private String getSaikuJsJQueryPlaceHolderCode() {
String placeHolderScript = String.join("\n",
// "<!-- CHOSEN PLACEHOLDER -->",
// "<script type=\"text/javascript\">",
// "",
" // Replace the normal jQuery getScript function with one that supports",
" // debugging and which references the script files as external resources",
" // rather than inline.",
" jQuery.extend({",
" getScript: function(url, callback) {",
" var head = document.getElementsByTagName(\"head\")[0];",
" var script = document.createElement(\"script\");",
" script.src = url;",
"",
" // Handle Script loading",
" {",
" var done = false;",
"",
" // Attach handlers for all browsers",
" script.onload = script.onreadystatechange = function(){",
" if ( !done && (!this.readyState || this.readyState == \"loaded\" || this.readyState == \"complete\") ) {",
" done = true;",
" if (callback)",
" callback();",
"",
" // Handle memory leak in IE",
" script.onload = script.onreadystatechange = null;",
" }",
" };",
" }",
"",
" head.appendChild(script);",
" ",
" // We handle everything using the script element injection",
" return undefined;",
" }",
" });"/*,
"</script>"*/);
StringBuffer strBuf = new StringBuffer(placeHolderScript);
// StringBuffer strBuf = new StringBuffer();
// strBuf.append(queryTemplates.getTemplateToolbar());
// strBuf.append(queryTemplates.getTemplateUpgrade());
// strBuf.append(queryTemplates.getTemplateLogincount());
// strBuf.append(queryTemplates.getTemplateCubes());
// strBuf.append(queryTemplates.getTemplateDimensions());
// strBuf.append(queryTemplates.getTemplateMeasures());
// strBuf.append(queryTemplates.getTemplateCalculatedMeasures());
// strBuf.append(queryTemplates.getTemplateCalculatedMember());
// strBuf.append(queryTemplates.getTemplateWorkspace());
// strBuf.append(queryTemplates.getTemplateAttributes());
// strBuf.append(queryTemplates.getTemplateWorkspaceDropzones());
// strBuf.append(queryTemplates.getTemplateWorkspaceToolbar());
// strBuf.append(queryTemplates.getTemplateQueryToolbar());
// strBuf.append(queryTemplates.getTemplateOpenDialog());
// strBuf.append(queryTemplates.getTemplateRepositoryObjects());
// strBuf.append(queryTemplates.getTemplateRepositoryFolder());
// strBuf.append(queryTemplates.getTemplateRepositoryFolderLazyLoad());
// strBuf.append(queryTemplates.getTemplateRepositoryFile());
// strBuf.append(queryTemplates.getTemplateSelections());
// strBuf.append(queryTemplates.getTemplateSelectionsTotals());
// strBuf.append(queryTemplates.getTemplateSelectionsOptions());
// strBuf.append(queryTemplates.getTemplatePermissions());
// strBuf.append(queryTemplates.getTemplatePermissionsRolelist());
// strBuf.append(queryTemplates.getTemplateDrillthrough());
// strBuf.append(queryTemplates.getTemplateDrillacross());
// strBuf.append(queryTemplates.getTemplateDrillthroughList());
// strBuf.append(queryTemplates.getTemplateDrillthroughDimensions());
// strBuf.append(queryTemplates.getTemplateDrillthroughMeasures());
return strBuf.toString();
}
}