summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/samples/store-java/store/ShoppingCartImpl.java
blob: b5329606d178cab0b773726a3ed52417eb95c0b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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 store;

import static org.apache.tuscany.IterableUtil.*;
import static org.apache.tuscany.UUIDUtil.*;

import org.apache.tuscany.Service;

/**
 * Shopping cart component implementation.
 */
public class ShoppingCartImpl {

    static String cartId = "1234";

    /**
     * Get the shopping cart from the cache. Return an empty cart if not found.
     */
    public Iterable<?> getcart(final String id, final Service cache) {
        final Iterable<String> iid = list(id);
        final Iterable<?> cart = cache.get(iid);
        if(cart == null)
            return list();
        return cart;
    }

    /**
     * Post a new item to the cart. Create a new cart if necessary.
     */
    public Iterable<String> post(final Iterable<String> collection, final Iterable<?> item, final Service cache) {
        final String id = uuid();
        final Iterable<?> newItem = list("'entry", cadr(car(item)), list("'id", id), cadddr(car(item)));
        final Iterable<?> cart = cons(newItem, this.getcart(cartId, cache));
        final Iterable<String> iid = list(cartId);
        cache.put(iid, cart);
        return list(id);
    }

    /**
     * Find an item in the cart.
     */
    Iterable<?> find(final String id, final Iterable<?> cart) {
        if(isNull(cart))
            return list(list("'entry", list("'title", "Item"), list("'id", "0")));
        if(id.equals(cadr(caddr(car(cart)))))
            return list(car(cart));
        return this.find(id, cdr(cart));
    }

    /**
     * Return items from the cart.
     */
    public Iterable<?> get(final Iterable<String> id, final Service cache) {
        if(isNull(id))
            return list(append(list("'feed", list("'title", "Your Cart"), list("'id", cartId)), this.getcart(cartId, cache)));
        return this.find((String)car(id), this.getcart(cartId, cache));
    }

    /**
     * Delete items from the cart.
     */
    public Boolean delete(final Iterable<String> id, final Service cache) {
        if(isNull(id)) {
            final Iterable<String> iid = list(cartId);
            return cache.delete(iid);
        }
        return true;
    }

    /**
     * Return the price of an item.
     */
    Double price(final Iterable<?> item) {
        System.err.println("price!! " + cadr(cadddr(item)));
        return Double.valueOf((String)cadr(assoc("'price", cdr(cadr(cadddr(item))))));
    }

    /**
     * Sum the prices of a list of items.
     */
    Double sum(final Iterable<?> items) {
        if(isNull(items))
            return 0.0;
        return this.price((Iterable<?>)car(items)) + this.sum(cdr(items));
    }

    /**
     * Return the total price of the items in the cart.
     */
    public Double total(final Service cache) {
        final Iterable<?> cart = this.getcart(cartId, cache);
        return this.sum(cart);
    }

}