| 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(); |
| } |
| |
| |
| } |