Package com.ponysdk.sample.server

Source Code of com.ponysdk.sample.server.PonyServiceImpl

package com.ponysdk.sample.server;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicLong;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ponysdk.core.Application;
import com.ponysdk.core.UIContext;
import com.ponysdk.core.query.Query;
import com.ponysdk.core.query.Result;
import com.ponysdk.core.servlet.SessionManager;
import com.ponysdk.impl.query.memory.FilteringTools;
import com.ponysdk.sample.client.datamodel.Pony;
import com.ponysdk.sample.client.datamodel.PonyStock;
import com.ponysdk.ui.server.basic.PPusher;

public class PonyServiceImpl implements com.ponysdk.sample.service.pony.PonyService {

    private static Logger log = LoggerFactory.getLogger(PonyServiceImpl.class);

    private static AtomicLong id = new AtomicLong();

    private final ConcurrentHashMap<Long, Pony> ponyByID = new ConcurrentHashMap<Long, Pony>();
    private final List<PonyStock> stocks = new ArrayList<PonyStock>();

    public PonyServiceImpl() {
        final Random rdm = new Random();
        for (int i = 0; i < 11; i++) {
            addPony(new Pony(id.incrementAndGet(), "Altai horseBengin", rdm.nextInt(10), "Equus ferus caballus"));
            addPony(new Pony(id.incrementAndGet(), "American Warmblood", rdm.nextInt(10), "Equus ferus caballus"));
            addPony(new Pony(id.incrementAndGet(), "Falabella", rdm.nextInt(10), "Equus ferus caballus"));
            addPony(new Pony(id.incrementAndGet(), "Friesian horse", rdm.nextInt(10), "Equus ferus caballus"));
            addPony(new Pony(id.incrementAndGet(), "Mustang", rdm.nextInt(10), "Equus ferus caballus"));
            addPony(new Pony(id.incrementAndGet(), "Altai horse", rdm.nextInt(10), "Equus ferus caballus"));
        }

        initAndPushStock();
    }

    private void initAndPushStock() {
        for (int i = 0; i < 6; i++) {
            stocks.add(new PonyStock(id.incrementAndGet(), "Altai horseBengin v" + i, 5.5f, 100));
            stocks.add(new PonyStock(id.incrementAndGet(), "American Warmblood v" + i, 10f, 100));
            stocks.add(new PonyStock(id.incrementAndGet(), "Falabella v" + i, 15f, 100));
            stocks.add(new PonyStock(id.incrementAndGet(), "Friesian horse v" + i, 20f, 100));
            stocks.add(new PonyStock(id.incrementAndGet(), "Mustang v" + i, 30f, 100));
            stocks.add(new PonyStock(id.incrementAndGet(), "Altai horse v" + i, 50f, 100));
        }

        final Executor executor = Executors.newSingleThreadExecutor();
        executor.execute(new Runnable() {

            @Override
            public void run() {
                final Random rdm = new Random();
                while (true) {
                    try {
                        final int index = rdm.nextInt(stocks.size());
                        final float newPrice = rdm.nextFloat() * 100;
                        final PonyStock stock = stocks.get(index);
                        stock.setPrice(newPrice);
                        pushData(stock);
                        Thread.sleep(1000);
                    } catch (final Exception e) {
                        log.error("", e);
                    }
                }
            }
        });
    }

    protected void pushData(final PonyStock stock) {
        final Collection<Application> applications = SessionManager.get().getApplications();
        for (final Application application : applications) {
            for (final UIContext uiContext : application.getUIContexts()) {
                final PPusher pusher = uiContext.getPusher();
                if (pusher != null) pusher.pushToClient(stock);
            }
        }
    }

    @Override
    public Result<List<Pony>> findPonys(final Query query) throws Exception {
        log.info("Looking for pony with criterion #" + query.getCriteria());
        final List<Pony> datas = new ArrayList<Pony>(ponyByID.values());
        return FilteringTools.select(query, datas);
    }

    @Override
    public Pony createPony(final Pony pony) throws Exception {
        pony.setId(id.incrementAndGet());
        addPony(pony);
        return pony;
    }

    @Override
    public Void deletePony(final Long id) throws Exception {
        ponyByID.remove(id);
        return null;
    }

    @Override
    public Result<List<Pony>> findPonyChilds(final Long fatherID) throws Exception {
        final Pony father = ponyByID.get(fatherID);
        final List<Pony> subPonyList = new ArrayList<Pony>();
        subPonyList.add(new Pony(id.incrementAndGet(), father.getName() + " child 1", 1, father.getRace()));
        subPonyList.add(new Pony(id.incrementAndGet(), father.getName() + " child 2", 2, father.getRace()));
        subPonyList.add(new Pony(id.incrementAndGet(), father.getName() + " child 3", 3, father.getRace()));
        return new Result<List<Pony>>(subPonyList);
    }

    private void addPony(final Pony pony) {
        ponyByID.put(pony.getId(), pony);
    }

}
TOP

Related Classes of com.ponysdk.sample.server.PonyServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.