hudson.gwtmarketplace.client.commands.GetProductDetailsCommand.java Source code

Java tutorial

Introduction

Here is the source code for hudson.gwtmarketplace.client.commands.GetProductDetailsCommand.java

Source

/*
 * GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007
 */
package hudson.gwtmarketplace.client.commands;

import hudson.gwtmarketplace.client.event.ProductUpdatedEvent;
import hudson.gwtmarketplace.client.event.TopsDateCheckEvent;
import hudson.gwtmarketplace.client.model.Pair;
import hudson.gwtmarketplace.client.model.Product;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.google.gwt.gwtpages.client.Pages;
import com.google.gwt.user.client.rpc.AsyncCallback;

public abstract class GetProductDetailsCommand extends AbstractAsyncCommand<Product> {

    public static Map<String, Product> productAliasMap = new HashMap<String, Product>();
    public static Map<Long, Product> productIdMap = new HashMap<Long, Product>();

    static {
        Pages.get().getEventBus().addHandler(ProductUpdatedEvent.TYPE,
                new ProductUpdatedEvent.ProductUpdateHandler() {
                    @Override
                    public void onProductUpdated(Product product) {
                        cache(product);
                    }
                });
    }

    private Long productId;
    private String alias;
    private boolean forViewing = true;

    public GetProductDetailsCommand(long productId) {
        this.productId = productId;
    }

    public GetProductDetailsCommand(String alias) {
        this.alias = alias;
    }

    public GetProductDetailsCommand(String alias, boolean forViewing) {
        this.alias = alias;
        this.forViewing = forViewing;
    }

    @Override
    public void execute() {
        Product p = null;
        boolean successCalled = false;
        if (null != productId)
            p = productIdMap.get(productId);
        else if (null != alias)
            p = productAliasMap.get(alias);
        if (null != p) {
            successCalled = true;
            onSuccess(p);
        }

        if (forViewing) {
            final boolean _successCalled = successCalled;
            // we may need to update the view count so hit the server
            productService().getForViewing(alias, new AsyncCallback<Pair<Product, Date>>() {

                @Override
                public void onSuccess(Pair<Product, Date> result) {
                    if (null != result && null != result.getEntity2())
                        Pages.get().getEventBus().fireEvent(new TopsDateCheckEvent(result.getEntity2()));
                    cache(result.getEntity1());
                    if (!_successCalled)
                        GetProductDetailsCommand.this.onSuccess(result.getEntity1());
                }

                @Override
                public void onFailure(Throwable caught) {
                    if (!_successCalled)
                        GetProductDetailsCommand.this.onFailure(caught);
                }
            });
        }
    }

    public static void cache(Product p) {
        if (null == p)
            return;
        productAliasMap.put(p.getAlias(), p);
        productIdMap.put(p.getId(), p);
    }
}