The following code is for my Object Oriented Programming class. My program simulate the cashier's machine to order food. The code uses Model View Presenter. This class is the model.
I have an ArrayList to hold the possible order possible. The View uses it to create JButtons.
I have an ArrayList to hold data to know what is ordered.
I am wondering if I followed Model-View-Presenter correctly.
Is this class holding too much responsibility.
public class MenuModel {
// ArrayList hold MenuItem
private ArrayList<MenuItem> menuItems;
// Textfile name
private String fileName = "Menu.txt";
// Use to read textfile
private MenuReader menuReader;
// Data to keep menu's price and the menu's order
//Keep for what was ordered
private ArrayList<MenuItem> order;
//Listeners
private ArrayList<ChangeListener> listeners;
private Formatter formatter;
/**
*
* @param file name
*/
public MenuModel(String f){
listeners = new ArrayList<ChangeListener>();
formatter = new Formatter();
order = new ArrayList<MenuItem>();
fileName = f;
menuItems = new ArrayList<MenuItem>();
menuReader = new MenuReader(fileName, '|', menuItems);
menuReader.read();
}
public void addChangeListener(ChangeListener listener){
listeners.add(listener);
}
// update the menu & price
public void add(MenuItem menuItem){
order.add(menuItem);
ChangeEvent event = new ChangeEvent(this);
for(ChangeListener lister : listeners)
lister.stateChanged(event);
}
/**
*
* @return Menu Order Size
*/
public int size(){
return menuOrder.size();
}
// clear price and menu
public void clear(){
order.clear();
ChangeEvent event = new ChangeEvent(this);
for(ChangeListener lister : listeners)
lister.stateChanged(event);
}
// Text to be sent to the screen
public String display(){
StringBuilder sb = new StringBuilder();
sb.append(formatter.formatHeader());
Iterator<MenuItem> iter = getItems();
while(iter.hasNext())
sb.append(formatter.formatOrder(iter.next()));
sb.append(formatter.formatFooter());
return sb.toString();
}
// Possible order available
public ArrayList<MenuItem> getMenuItem(){ return menuItems; }
// Get what was ordered
public ArrayList<MenuItem> getOrderList(){ return order; }
/**
*
* @return String filename
*/
public String getFileName(){ return fileName; }
public Iterator<MenuItem> getItems(){
return new Iterator<MenuItem>(){
private int current = 0;
@Override
public boolean hasNext(){
return current < order.size();
}
@Override
public MenuItem next() {
return order.get(current++);
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
}