/* * Copyright © 2016 TIBCO Software,Inc.All rights reserved. * http://community.jaspersoft.com/project/jaspermobile-android * * Unless you have purchased a commercial license agreement from TIBCO Jaspersoft, * the following license terms apply: * * This program is part of TIBCO Jaspersoft Mobile for Android. * * TIBCO Jaspersoft Mobile 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 3of the License,or * (at your option)any later version. * * TIBCO Jaspersoft Mobile 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 TIBCO Jaspersoft Mobile for Android.If not,see * <http://www.gnu.org/licenses/lgpl>. */ package com.jaspersoft.android.jaspermobile.util; import android.net.Uri; import android.text.TextUtils; import android.webkit.URLUtil; /** * Hides details of visualize url creation. * * @author Tom Koptel * @since 2.1 */ public class VisualizeEndpoint { private final String mBaseUrl; private final boolean mOptimized; private final boolean mShowControls; private VisualizeEndpoint(EndpointBuilder endpointBuilder) { mBaseUrl = endpointBuilder.baseUrl; mOptimized = endpointBuilder.optimized; mShowControls = endpointBuilder.showControls; } /** * Creates visualize url. * * @return absolute url on visualize.js resources */ public String createUri() { String serverUrl = BaseUrlNormalizer.denormalize(mBaseUrl); Uri.Builder visualizeUriBuilder = Uri.parse(mBaseUrl + "client/visualize.js") .buildUpon() .appendQueryParameter("_opt", String.valueOf(mOptimized)) .appendQueryParameter("baseUrl", serverUrl); if (mShowControls) { visualizeUriBuilder.appendQueryParameter("_showInputControls", String.valueOf(true)); } Uri visualizeUri = visualizeUriBuilder.build(); return visualizeUri.toString(); } @Override public String toString() { return "VisualizeEndpoint{" + "mBaseUrl='" + mBaseUrl + '\'' + ", mOptimized=" + mOptimized + '}'; } /** * Creates builder or throws exception if baseUrl malformed * * @param baseUrl should be base url of target JRS server * @return build with default values */ public static EndpointBuilder forBaseUrl(String baseUrl) { if (TextUtils.isEmpty(baseUrl)) { throw new IllegalArgumentException("Base url should not be null"); } boolean isValid = URLUtil.isNetworkUrl(baseUrl); if (!isValid) { throw new IllegalArgumentException("Url does not considered to be network url: " + baseUrl); } return new EndpointBuilder(baseUrl); } public static class EndpointBuilder { private final String baseUrl; private boolean optimized; private boolean showControls; private EndpointBuilder(String baseUrl) { this.baseUrl = baseUrl; } public EndpointBuilder setOptimized(boolean optimized) { this.optimized = optimized; return this; } public EndpointBuilder optimized() { this.optimized = true; return this; } public EndpointBuilder showControls() { this.showControls = true; return this; } public VisualizeEndpoint build() { return new VisualizeEndpoint(this); } } }