
// Lager.java


/******************************************************************************
/ Lager.java demonstrerar konceptet länkad lista m.h.a. nästlad klass genom att
/ simulera ett varulager.
/
/*****************************************************************************/

public class Lager
{
	
	// En nästlad kalss
	private static class Vara
	{
		public String    namn;
		public double    pris;
		public String    lagerplats;
		public Vara      previous;
		public Vara      next;
		
		public Vara (String namn, double pris, String lagerplats)
		{
			this.namn = namn;
			this.pris = pris;
			this.lagerplats = lagerplats;
			previous = null;
			next = null;
		}
	}
	
	
	// --------------------------------
	
	
	private Vara    first;
	private Vara    last;
	private long    varuantal;
	
	// --------------------------------
	
	public Lager ()
	{
		first = null;
		last = null;
		varuantal = 0;
	}
	
	/**************************************************************************
	/ Lägg till en vara i lagret.
	/ Varan läggs till sist i lagerlistan.
	/*************************************************************************/
	public void laggTillVara (String namn, double pris, String lagerplats)
	{
		Vara    nyVara = new Vara (namn, pris, lagerplats);
		
		if (varuantal == 0)
		{
			first = nyVara;
			last = nyVara;
		}
		else
		{
			last.next = nyVara;
			
			nyVara.previous = last;
			
			last = nyVara;
		}
		
		varuantal++;
		
	}
	
	
	/**************************************************************************
	/ Ta bort varan på plats index ur lagerlistan.
	/*************************************************************************/
	public boolean taBortVara (long index)
	{
		if (index > varuantal)
			return false;
		
		Vara    vara = first;
		long    i = 1;
		
		do
		{
			if (i == index)
			{
				if (i == 1)		// Första varan
				{
					vara.next.previous = null;
					first = vara.next;
				}
				else if (i == varuantal)	// Sista varan
				{
					vara.previous.next = null;
					last = null;
				}
				else	// Alla andra varor
				{
					vara.previous.next = vara.next;
					vara.next.previous = vara.previous;
				}
				
				break;
			}
			else
			{
				i++;
			}
			
			vara = vara.next;
		} while (vara != null);
		
		varuantal--;
		
		return true;
		
	}

	
	/**************************************************************************
	/ Utskrift av lagerinnehållet
	/*************************************************************************/
	public void listaLagerInnehall ()
	{
		Vara    vara = first;
		
		do
		{
			System.out.println ("-----------------------------");
			System.out.println ("Namn       : " + vara.namn);
			System.out.println ("Pris       : " + vara.pris);
			System.out.println ("Lagerplats : " + vara.lagerplats);
			vara = vara.next;
		} while (vara != null);
	}
	
}    
    
	
    