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(isNil(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(isNil(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(isNil(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(isNil(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);
}
}
|