2121
2222import com .cloud .utils .component .ManagerBase ;
2323import com .cloud .utils .component .PluggableService ;
24+ import com .cloud .utils .exception .CloudRuntimeException ;
2425import org .apache .cloudstack .managed .context .ManagedContextRunnable ;
2526import org .apache .cloudstack .poll .BackgroundPollManager ;
2627import org .apache .cloudstack .poll .BackgroundPollTask ;
3031import org .apache .cloudstack .api .command .ListCoffeeCmd ;
3132import org .apache .cloudstack .api .command .RemoveCoffeeCmd ;
3233import org .apache .cloudstack .api .command .UpdateCoffeeCmd ;
34+ import org .apache .cloudstack .feature .dao .CoffeeDao ;
3335import org .apache .cloudstack .framework .config .Configurable ;
3436import org .apache .cloudstack .framework .config .ConfigKey ;
3537import org .apache .logging .log4j .Logger ;
@@ -45,6 +47,9 @@ public class CoffeeManagerImpl extends ManagerBase implements CoffeeManager, Con
4547
4648 private static final Logger s_logger = LogManager .getLogger (CoffeeManagerImpl .class );
4749
50+ @ Inject
51+ private CoffeeDao coffeeDao ;
52+
4853 @ Inject
4954 private BackgroundPollManager backgroundPollManager ;
5055
@@ -68,48 +73,8 @@ public class CoffeeManagerImpl extends ManagerBase implements CoffeeManager, Con
6873 ConfigKey .Scope .Zone
6974 );
7075
71- private static class HardcodedCoffee implements Coffee {
72- private final long id ;
73- private final String uuid ;
74- private final String name ;
75- private final Offering offering ;
76- private Size size ;
77- private State state ;
78-
79- public HardcodedCoffee (long id , String uuid , String name , Offering offering , Size size , State state ) {
80- this .id = id ;
81- this .uuid = uuid ;
82- this .name = name ;
83- this .offering = offering ;
84- this .size = size ;
85- this .state = state ;
86- }
87-
88- @ Override
89- public long getId () { return id ; }
90-
91- @ Override
92- public String getUuid () { return uuid ; }
93-
94- @ Override
95- public String getName () { return name ; }
96-
97- @ Override
98- public Offering getOffering () { return offering ; }
99-
100- @ Override
101- public Size getSize () { return size ; }
102-
103- public void setSize (Size size ) { this .size = size ; }
104-
105- @ Override
106- public State getState () { return state ; }
107-
108- public void setState (State state ) { this .state = state ; }
109- }
110-
11176 private static final class CoffeeGCTask extends ManagedContextRunnable implements BackgroundPollTask {
112- private CoffeeManager coffeeManager ;
77+ private final CoffeeManager coffeeManager ;
11378
11479 private CoffeeGCTask (CoffeeManager coffeeManager ) {
11580 this .coffeeManager = coffeeManager ;
@@ -184,48 +149,34 @@ public ConfigKey<?>[] getConfigKeys() {
184149 @ Override
185150 public Coffee createCoffee (CreateCoffeeCmd cmd ) {
186151 s_logger .info ("Creating coffee: " + cmd .getName ());
187- Coffee coffee = new HardcodedCoffee (
188- 3L ,
189- "fake-uuid-3" ,
190- cmd .getName (),
191- Coffee .Offering .valueOf (cmd .getOffering ()),
192- Coffee .Size .valueOf (cmd .getSize ()),
193- Coffee .State .Created
194- );
195-
196- s_logger .debug ("Created coffee with ID: " + coffee .getId ());
152+
153+ Coffee .Offering offering = Coffee .Offering .valueOf (cmd .getOffering ());
154+ Coffee .Size size = Coffee .Size .valueOf (cmd .getSize ());
155+
156+ CoffeeVO coffee = new CoffeeVO (cmd .getName (), offering , size , 1L );
157+ coffee = coffeeDao .persist (coffee );
158+
159+ s_logger .debug ("Created coffee with ID: " + coffee .getId () + ", UUID: " + coffee .getUuid ());
197160 return coffee ;
198161 }
199162
200163 @ Override
201164 public List <Coffee > listCoffees (ListCoffeeCmd cmd ) {
202165 s_logger .info ("Listing coffees" );
203- List <Coffee > coffees = new ArrayList <>();
204-
205- coffees .add (new HardcodedCoffee (1L , "uuid-1" , "Espresso" ,
206- Coffee .Offering .Espresso , Coffee .Size .SMALL , Coffee .State .Brewed ));
207-
208- coffees .add (new HardcodedCoffee (2L , "uuid-2" , "Latte" ,
209- Coffee .Offering .Latte , Coffee .Size .LARGE , Coffee .State .Created ));
210166
211- coffees .add (new HardcodedCoffee (3L , "uuid-3" , "Cappuccino" ,
212- Coffee .Offering .Cappuccino , Coffee .Size .MEDIUM , Coffee .State .Brewing ));
167+ List <CoffeeVO > coffees = coffeeDao .listAll ();
213168
214169 String id = cmd .getId ();
215- String offering = cmd .getOffering ();
216- String size = cmd .getSize ();
217170
218171 List <Coffee > filtered = new ArrayList <>();
219- for (Coffee coffee : coffees ) {
172+ for (CoffeeVO coffee : coffees ) {
173+ if (coffee .getRemoved () != null ) {
174+ continue ;
175+ }
176+
220177 boolean match = true ;
221178
222- if (id != null && !String .valueOf (coffee .getId ()).equals (id )) {
223- match = false ;
224- }
225- if (offering != null && !coffee .getOffering ().name ().equalsIgnoreCase (offering )) {
226- match = false ;
227- }
228- if (size != null && !coffee .getSize ().name ().equalsIgnoreCase (size )) {
179+ if (id != null && coffee .getId () != Long .parseLong (id )) {
229180 match = false ;
230181 }
231182
@@ -242,14 +193,18 @@ public List<Coffee> listCoffees(ListCoffeeCmd cmd) {
242193 public Coffee updateCoffee (UpdateCoffeeCmd cmd ) {
243194 s_logger .info ("Updating coffee with ID: " + cmd .getId ());
244195
245- HardcodedCoffee coffee = new HardcodedCoffee (
246- Long .parseLong (cmd .getId ()),
247- "uuid-" + cmd .getId (),
248- "Updated Coffee Order" ,
249- Coffee .Offering .Espresso ,
250- cmd .getSize () != null ? Coffee .Size .valueOf (cmd .getSize ()) : Coffee .Size .MEDIUM ,
251- Coffee .State .Created
252- );
196+ long id = Long .parseLong (cmd .getId ());
197+ CoffeeVO coffee = coffeeDao .findById (id );
198+
199+ if (coffee == null ) {
200+ throw new CloudRuntimeException ("Coffee with ID " + id + " not found" );
201+ }
202+
203+ if (cmd .getSize () != null ) {
204+ s_logger .debug ("Size update requested but not yet supported in minimal schema" );
205+ }
206+
207+ coffeeDao .update (id , coffee );
253208
254209 s_logger .debug ("Updated coffee: " + coffee .getName ());
255210 return coffee ;
@@ -259,10 +214,23 @@ public Coffee updateCoffee(UpdateCoffeeCmd cmd) {
259214 public boolean removeCoffee (RemoveCoffeeCmd cmd ) {
260215 if (cmd .getId () != null ) {
261216 s_logger .info ("Removing coffee with ID: " + cmd .getId ());
217+ long id = Long .parseLong (cmd .getId ());
218+
219+ boolean result = coffeeDao .remove (id );
220+
221+ if (!result ) {
222+ throw new CloudRuntimeException ("Failed to remove coffee with ID " + id );
223+ }
224+
225+ return true ;
262226 } else if (cmd .getIds () != null ) {
263227 s_logger .info ("Removing " + cmd .getIds ().size () + " coffees" );
228+ for (String id : cmd .getIds ()) {
229+ coffeeDao .remove (Long .parseLong (id ));
230+ }
231+ return true ;
264232 }
265233
266- return true ;
234+ return false ;
267235 }
268236}
0 commit comments