/* * Copyright 2012 Axel Winkler, Daniel Dunér * * This file is part of Daxplore Presenter. * * Daxplore Presenter is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 2.1 of the License, or * (at your option) any later version. * * Daxplore Presenter is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Daxplore Presenter. If not, see <http://www.gnu.org/licenses/>. */ package org.daxplore.presenter.embed; import java.util.LinkedList; import org.daxplore.presenter.chart.data.QueryResultCount; import org.daxplore.presenter.chart.data.QueryResultCountCompare; import org.daxplore.presenter.chart.display.BarChart; import org.daxplore.presenter.chart.display.BarChartCompare; import org.daxplore.presenter.chart.display.ChartFactory; import org.daxplore.presenter.chart.display.GChartChart; import org.daxplore.presenter.chart.display.QueryActiveAnimation; import org.daxplore.presenter.client.json.shared.ChartDataParserClient; import org.daxplore.presenter.embed.inject.EmbedInjector; import org.daxplore.presenter.shared.EmbedDefinition; import org.daxplore.presenter.shared.EmbedDefinition.EmbedFlag; import org.daxplore.presenter.shared.QueryDefinition; import org.daxplore.presenter.shared.QueryDefinition.QueryFlag; import org.daxplore.presenter.shared.QuestionMetadata; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.RootPanel; /** * Entry point for the embed view, which is used to embed charts in other sites * or to show a chart in a printer-friendly mode. * * <p>An instance of this class is created automatically by GWT when used from * a html page.</p> * * <p>This entry point creates a page that only contains the chart as defined * by the URL. The section after the # is interpreted as a * {@link QueryDefinition} restore string.</p> * * <p>Used together with Embed.gwt.xml and either embed or print templates.</p> */ public class EmbedEntryPoint implements EntryPoint { private final EmbedInjector injector = GWT.create(EmbedInjector.class); /** * This is the entry point method. It is automatically called by GWT to * create the embed web page. */ @Override public void onModuleLoad() { QuestionMetadata questions = injector.getQuestions(); String queryString = Window.Location.getParameter("q"); QueryDefinition queryDefinition = new QueryDefinition(questions, queryString); ChartFactory chartFactory = injector.getChartFactory(); QueryActiveAnimation queryActiveAnimation = injector.getQueryActiveAnimation(); String href = Window.Location.getHref(); EmbedDefinition embedDefinition; if (href.contains("#")) { String base64 = href.substring(href.lastIndexOf("#") + 1); embedDefinition = new EmbedDefinition(base64); } else { LinkedList<EmbedFlag> emptyDefaultList = new LinkedList<>(); embedDefinition = new EmbedDefinition(emptyDefaultList); } try { ChartDataParserClient queryData = ChartDataParserClient.getEmbeddedData(); GChartChart chart; boolean printMode = embedDefinition.hasFlag(EmbedFlag.PRINT); if (!queryDefinition.hasFlag(QueryFlag.SECONDARY)) { chart = chartFactory.createBarChart(queryDefinition, printMode); ((BarChart)chart).addData(new QueryResultCount(queryData.getDataItems(), queryData.getTotalDataItem())); } else { chart = chartFactory.createBarChartCompare(queryDefinition, printMode); ((BarChartCompare)chart).addData(new QueryResultCountCompare(queryData.getDataItems(), queryData.getTotalDataItem())); } EmbedView embedView = new EmbedView(chart, queryActiveAnimation, Window.getClientWidth(), Window.getClientHeight(), embedDefinition); RootPanel.get().add(embedView); } catch (Exception e) { e.printStackTrace(); } } }