/** * Item.java * rappresenta un prodotto commerciale * @author A. luchetta * @version 18-Nov-2006 */ public class Item implements Comparable { /** ordinamento per codice */ public static final int ITEM_ID = 0; /** ordinamento per nome */ public static final int ITEM_NAME = 1; /** ordinamento per prezzo */ public static final int ITEM_PRICE = 2; /** ordinamento per data di scadenza */ public static final int ITEM_BEST_BEFORE_DATE = 3; private static int sortedBy = ITEM_ID; // variabili di esemplare private String name; private String itemID; private double price; private String bestBeforeDate; /** costruttore @param aName nome del prodotto @param anItemID codice del prodotto @param aPrice prezzo del prodotto @param aBestBeforeDate data di scadenza del del prodotto */ public Item(String aName, String anItemID, double aPrice, String aBestBeforeDate) { name = aName; itemID = anItemID; price = aPrice; bestBeforeDate = aBestBeforeDate; } /** sovrascrive il metodo toString(): La descrizione testuale dipende dal tipo di ordinamento selezionato */ public String toString() { final int MIN_LENGTH = 10; String itemIDStr = itemID; String nameStr = name; String priceStr = Double.toString(price); String bestBeforeDateStr = bestBeforeDate; while (itemIDStr.length() < MIN_LENGTH) itemIDStr += " "; while (nameStr.length() < MIN_LENGTH) nameStr += " "; while (priceStr.length() < MIN_LENGTH) priceStr = " " + priceStr; while (bestBeforeDateStr.length() < MIN_LENGTH) bestBeforeDateStr += " "; switch(sortedBy) { case ITEM_ID: return itemIDStr + ": " + nameStr + ": " + priceStr + " " + " EURO " + "scadenza " + bestBeforeDateStr; case ITEM_NAME: return nameStr + ": " + itemIDStr + ": " + priceStr + " " + " EURO " + "scadenza " + bestBeforeDateStr; case ITEM_PRICE: return priceStr + " EURO " + ": " + nameStr + ": " + itemIDStr + " " + "scadenza " + bestBeforeDateStr; case ITEM_BEST_BEFORE_DATE: return "scadenza " + bestBeforeDateStr + ": " + nameStr + ": " + itemIDStr + ": " + priceStr + " " + " EURO "; } throw new IllegalSortCriterionException(sortedBy + "non e' un criterio di ordinamento valido"); } /** realizza l'interfaccia Comparable . L'ordinamento dipende dal criterio di ordinamento selezionato: Criteri possibili: per nome, per codice, per prezzo, per data di scadenza @param it il prodotto da confrontare @throws IllegalSortCriterionException */ public int compareTo(Item it) { switch(sortedBy) { case ITEM_ID: return itemID.compareTo(it.itemID); case ITEM_NAME: return name.compareTo(it.name); case ITEM_PRICE: if (price < it.price) return -1; if (price == it.price) return 0; return 1; case ITEM_BEST_BEFORE_DATE: return bestBeforeDate.compareTo(it.bestBeforeDate); } throw new IllegalSortCriterionException(sortedBy + "non e' un criterio di ordinamento valido"); } /** seleziona il tipo di ordinamento. Criteri possibili: per nome, per codice, per prezzo, per data di scadenza @param sortCriterion il criterio di ordinamento @throws IllegalSortCriterionException */ public static void sortBy(int sortCriterion) { if (sortCriterion == ITEM_ID || sortCriterion == ITEM_NAME || sortCriterion == ITEM_PRICE || sortCriterion == ITEM_BEST_BEFORE_DATE) sortedBy = sortCriterion; else throw new IllegalSortCriterionException(sortCriterion + " non e' un criterio di ordinamento valido"); } }