io.apiman.manager.ui.client.local.pages.ConsumerServicePage.java Source code

Java tutorial

Introduction

Here is the source code for io.apiman.manager.ui.client.local.pages.ConsumerServicePage.java

Source

/*
 * Copyright 2014 JBoss Inc
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.apiman.manager.ui.client.local.pages;

import io.apiman.manager.api.beans.orgs.OrganizationBean;
import io.apiman.manager.api.beans.policies.PolicyChainBean;
import io.apiman.manager.api.beans.services.ServiceBean;
import io.apiman.manager.api.beans.services.ServiceVersionBean;
import io.apiman.manager.api.beans.summary.ServicePlanSummaryBean;
import io.apiman.manager.api.rest.contract.exceptions.ServiceVersionNotFoundException;
import io.apiman.manager.ui.client.local.AppMessages;
import io.apiman.manager.ui.client.local.events.CreateContractEvent;
import io.apiman.manager.ui.client.local.events.ShowPolicyChainEvent;
import io.apiman.manager.ui.client.local.events.CreateContractEvent.Handler;
import io.apiman.manager.ui.client.local.pages.common.Breadcrumb;
import io.apiman.manager.ui.client.local.pages.consumer.ConsumerServicePlanList;
import io.apiman.manager.ui.client.local.pages.consumer.ServiceCard;
import io.apiman.manager.ui.client.local.services.rest.IRestInvokerCallback;
import io.apiman.manager.ui.client.local.util.MultimapUtil;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;

import org.jboss.errai.ui.nav.client.local.Page;
import org.jboss.errai.ui.nav.client.local.PageState;
import org.jboss.errai.ui.nav.client.local.TransitionTo;
import org.jboss.errai.ui.shared.api.annotations.DataField;
import org.jboss.errai.ui.shared.api.annotations.Templated;

import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;

/**
 * The "Service Details" page - part of the consumer UI.  This page
 * allows users to see details about an Service.  It displays useful
 * information such as the list of members and the services offered by
 * the service.
 *
 * @author eric.wittmann@redhat.com
 */
@Templated("/io/apiman/manager/ui/client/local/site/consumer-service.html#page")
@Page(path = "cservice")
@Dependent
public class ConsumerServicePage extends AbstractPage {

    @PageState
    protected String org;
    @PageState
    protected String service;
    @PageState
    protected String version;

    @Inject
    @DataField
    Breadcrumb breadcrumb;

    @Inject
    @DataField
    private ServiceCard serviceCard;
    @Inject
    @DataField
    private ConsumerServicePlanList plans;

    @Inject
    private TransitionTo<ConsumerServicePage> toThis;
    @Inject
    private TransitionTo<NewContractPage> toNewContract;

    protected OrganizationBean organizationBean;
    protected ServiceBean serviceBean;
    protected List<ServiceVersionBean> versionBeans;
    protected ServiceVersionBean versionBean;
    protected List<ServicePlanSummaryBean> planBeans;

    /**
     * Constructor.
     */
    public ConsumerServicePage() {
    }

    @PostConstruct
    protected void postConstruct() {
        serviceCard.addValueChangeHandler(new ValueChangeHandler<String>() {
            @Override
            public void onValueChange(ValueChangeEvent<String> event) {
                onVersionSelected(event.getValue());
            }
        });
        plans.addCreateContractHandler(new Handler() {
            @Override
            public void onCreateContract(CreateContractEvent event) {
                ConsumerServicePage.this.onCreateContract((ServicePlanSummaryBean) event.getBean());
            }
        });
        plans.addShowPolicyChainHandler(new ShowPolicyChainEvent.Handler() {
            @Override
            public void onShowPolicyChain(ShowPolicyChainEvent event) {
                String planId = event.getPlanId();
                ConsumerServicePage.this.onShowPolicyChain(planId);
            }
        });
    }

    /**
     * Called when the user clicks on one of the 
     * @param planId
     */
    protected void onShowPolicyChain(final String planId) {
        rest.getServicePlanPolicyChain(organizationBean.getId(), serviceBean.getId(), versionBean.getVersion(),
                planId, new IRestInvokerCallback<PolicyChainBean>() {
                    @Override
                    public void onSuccess(PolicyChainBean response) {
                        plans.renderPolicyChain(planId, response);
                    }

                    @Override
                    public void onError(Throwable error) {
                        dataPacketError(error);
                    }
                });
    }

    /**
     * Called when the user clicks the Create Contract button on one of the plans.
     * @param bean
     */
    protected void onCreateContract(final ServicePlanSummaryBean bean) {
        toNewContract.go(MultimapUtil.fromMultiple("svcorg", this.serviceBean.getOrganizationId(), //$NON-NLS-1$
                "svc", this.serviceBean.getId(), //$NON-NLS-1$
                "svcv", this.versionBean.getVersion(), //$NON-NLS-1$
                "planid", bean.getPlanId())); //$NON-NLS-1$
    }

    /**
     * Called when the user picks a different version of the Service.
     * @param value
     */
    protected void onVersionSelected(String value) {
        toThis.go(MultimapUtil.fromMultiple("org", org, "service", service, "version", value)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    }

    /**
     * @see io.apiman.manager.ui.client.local.pages.AbstractPage#doLoadPageData()
     */
    @Override
    protected int doLoadPageData() {
        int rval = super.doLoadPageData();
        rest.getOrganization(org, new IRestInvokerCallback<OrganizationBean>() {
            @Override
            public void onSuccess(OrganizationBean response) {
                organizationBean = response;
                dataPacketLoaded();
            }

            @Override
            public void onError(Throwable error) {
                dataPacketError(error);
            }
        });
        rest.getServiceVersions(org, service, new IRestInvokerCallback<List<ServiceVersionBean>>() {
            @Override
            public void onSuccess(List<ServiceVersionBean> response) {
                versionBeans = response;
                // If no version is specified in the URL, use the most recent (first in the list)
                if (version == null) {
                    versionBean = response.get(0);
                } else {
                    for (ServiceVersionBean avb : response) {
                        if (avb.getVersion().equals(version)) {
                            versionBean = avb;
                        }
                    }
                }
                if (versionBean == null) {
                    try {
                        throw new ServiceVersionNotFoundException();
                    } catch (Throwable t) {
                        dataPacketError(t);
                    }
                } else {
                    serviceBean = versionBean.getService();
                    dataPacketLoaded();
                    getPlansForServiceVersion();
                }
            }

            @Override
            public void onError(Throwable error) {
                dataPacketError(error);
            }
        });
        return rval + 3;
    }

    /**
     * Makes a REST call to get the plan information for the selected service
     * version.
     */
    protected void getPlansForServiceVersion() {
        rest.getServiceVersionPlans(org, service, versionBean.getVersion(),
                new IRestInvokerCallback<List<ServicePlanSummaryBean>>() {
                    @Override
                    public void onSuccess(List<ServicePlanSummaryBean> response) {
                        planBeans = response;
                        dataPacketLoaded();
                    }

                    @Override
                    public void onError(Throwable error) {
                        dataPacketError(error);
                    }
                });
    }

    /**
     * @see io.apiman.manager.ui.client.local.pages.AbstractPage#renderPage()
     */
    @Override
    protected void renderPage() {
        serviceCard.setValue(versionBean);
        serviceCard.setOrganization(organizationBean);
        serviceCard.setVersions(versionBeans);
        serviceCard.selectVersion(versionBean.getVersion());

        plans.setValue(planBeans);

        String dashHref = navHelper.createHrefToPage(DashboardPage.class, MultimapUtil.emptyMap());
        String consumerServicesHref = navHelper.createHrefToPage(ConsumerServicesPage.class,
                MultimapUtil.emptyMap());
        breadcrumb.addItem(dashHref, "home", i18n.format(AppMessages.HOME)); //$NON-NLS-1$
        breadcrumb.addItem(consumerServicesHref, "search", i18n.format(AppMessages.SERVICES)); //$NON-NLS-1$
        breadcrumb.addActiveItem("puzzle-piece", serviceBean.getName()); //$NON-NLS-1$
    }

    /**
     * @see io.apiman.manager.ui.client.local.pages.AbstractPage#getPageTitle()
     */
    @Override
    protected String getPageTitle() {
        return i18n.format(AppMessages.TITLE_CONSUME_SERVICE);
    }

}