/******************************************************************************* * Copyright (c) 2010 The Eclipse Foundation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * The Eclipse Foundation - initial API and implementation * Yatta Solutions - bug 397004, bug 432803: public API, bug 461603: featured market *******************************************************************************/ package org.eclipse.epp.internal.mpc.ui.wizards; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.epp.internal.mpc.core.service.DefaultMarketplaceService; import org.eclipse.epp.internal.mpc.ui.MarketplaceClientUi; import org.eclipse.epp.internal.mpc.ui.catalog.MarketplaceCategory; import org.eclipse.epp.internal.mpc.ui.wizards.MarketplaceViewer.ContentType; import org.eclipse.epp.mpc.core.model.ICategory; import org.eclipse.epp.mpc.core.model.IMarket; import org.eclipse.epp.mpc.ui.CatalogDescriptor; import org.eclipse.equinox.internal.p2.ui.discovery.wizards.DiscoveryResources; import org.eclipse.jface.window.IShellProvider; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.statushandlers.StatusManager; /** * @author David Green * @author Carsten Reckord */ @SuppressWarnings("unused") public class BrowseCatalogItem extends UserActionViewerItem<CatalogDescriptor> { private static final String TID = "tid:"; //$NON-NLS-1$ private static final String UTF_8 = "UTF-8"; //$NON-NLS-1$ private final MarketplaceCategory category; private final IMarketplaceWebBrowser browser; public BrowseCatalogItem(Composite parent, DiscoveryResources resources, IShellProvider shellProvider, IMarketplaceWebBrowser browser, MarketplaceCategory category, CatalogDescriptor element, MarketplaceViewer viewer) { super(parent, resources, shellProvider, element, viewer); this.browser = browser; this.category = category; createContent(); } @Override protected String getLinkText() { if (getViewer().getQueryContentType() == ContentType.SEARCH || getViewer().getQueryContentType() == ContentType.FEATURED_MARKET) { return NLS.bind(Messages.BrowseCatalogItem_browseMoreLink, category.getMatchCount()); } else { return Messages.BrowseCatalogItem_browseMoreLinkNoCount; } } @Override protected String getLinkToolTipText() { return NLS.bind(Messages.BrowseCatalogItem_openUrlBrowser, getData().getUrl()); } @Override protected void actionPerformed(Object data) { openMarketplace(); } protected void openMarketplace() { CatalogDescriptor catalogDescriptor = getData(); try { URL url = catalogDescriptor.getUrl(); try { ContentType contentType = getViewer().getQueryContentType(); if (contentType == ContentType.SEARCH) { String queryText = getViewer().getQueryText(); ICategory queryCategory = getViewer().getQueryCategory(); IMarket queryMarket = getViewer().getQueryMarket(); String path = new DefaultMarketplaceService(url).computeRelativeSearchUrl(queryMarket, queryCategory, queryText, false); if (path != null) { url = new URL(url, path); } } } catch (IllegalArgumentException e) { // should never happen MarketplaceClientUi.error(e); } catch (MalformedURLException e) { // should never happen MarketplaceClientUi.error(e); } browser.openUrl(url.toURI().toString()); } catch (URISyntaxException e) { String message = String.format(Messages.BrowseCatalogItem_cannotOpenBrowser); IStatus status = new Status(IStatus.ERROR, MarketplaceClientUi.BUNDLE_ID, IStatus.ERROR, message, e); MarketplaceClientUi.handle(status, StatusManager.SHOW | StatusManager.BLOCK | StatusManager.LOG); } } @Override protected MarketplaceViewer getViewer() { return (MarketplaceViewer) super.getViewer(); } }