Implemented channel and product basic stuff.

This commit is contained in:
Daniel Poustka 2020-11-23 16:39:48 +01:00
parent 8a90a07ef7
commit 5a6fc28b76
10 changed files with 224 additions and 80 deletions

View File

@ -1,11 +1,69 @@
package cz.cvut.fel.sit.omo.foodchain.channel; package cz.cvut.fel.sit.omo.foodchain.channel;
import cz.cvut.fel.sit.omo.foodchain.operation.Transaction; import cz.cvut.fel.sit.omo.foodchain.operation.Transaction;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
import cz.cvut.fel.sit.omo.foodchain.requirement.Requirement; import cz.cvut.fel.sit.omo.foodchain.requirement.Requirement;
import java.util.PriorityQueue;
import java.util.Queue; import java.util.Queue;
public abstract class ChannelBase implements IChannel { public abstract class ChannelBase implements IChannel
Queue<Requirement> requirements; {
Queue<Transaction> transactions; protected ProductType productType;
protected Queue<Requirement> requirements;
protected Queue<Transaction> transactions;
public ChannelBase(ProductType type)
{
this.requirements = new PriorityQueue<>();
this.transactions = new PriorityQueue<>();
this.productType = type;
}
public ChannelBase()
{
this.requirements = new PriorityQueue<>();
this.transactions = new PriorityQueue<>();
this.productType = ProductType.OTHER;
}
@Override
public Queue<Transaction> getTransactions()
{
return this.transactions;
}
@Override
public Queue<Requirement> getCurrentRequirements()
{
return this.requirements;
}
/**
* Adds new requirement to the requirement Queue
* @param requirement requirement
*/
@Override
public void addRequirement(Requirement requirement)
{
this.requirements.add(requirement);
}
/**
* Adds new transaction to the transaction Queue
* @param transaction transaction
*/
@Override
public void addTransaction(Transaction transaction)
{
this.transactions.add(transaction);
}
/**
* Clears all requirements from this channel
*/
public void clearRequirements()
{
this.requirements.clear();
}
} }

View File

@ -1,26 +1,11 @@
package cz.cvut.fel.sit.omo.foodchain.channel; package cz.cvut.fel.sit.omo.foodchain.channel;
import cz.cvut.fel.sit.omo.foodchain.operation.Transaction; import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
import cz.cvut.fel.sit.omo.foodchain.requirement.Requirement;
public class FruitChannel extends ChannelBase {
@Override
public Transaction getNextTransaction() {
return null;
}
@Override
public Requirement getNextRequirement() {
return null;
}
@Override
public void addRequirement(Requirement requirement) {
}
@Override
public void addTransaction(Transaction transaction) {
public class FruitChannel extends ChannelBase
{
public FruitChannel()
{
super(ProductType.FRUIT);
} }
} }

View File

@ -3,11 +3,20 @@ package cz.cvut.fel.sit.omo.foodchain.channel;
import cz.cvut.fel.sit.omo.foodchain.operation.Transaction; import cz.cvut.fel.sit.omo.foodchain.operation.Transaction;
import cz.cvut.fel.sit.omo.foodchain.requirement.Requirement; import cz.cvut.fel.sit.omo.foodchain.requirement.Requirement;
public interface IChannel { import java.util.Queue;
//TODO Daniel
public Transaction getNextTransaction(); public interface IChannel
public Requirement getNextRequirement(); {
//TODO Daniel
//Transaction getNextTransaction();
Queue<Transaction> getTransactions();
//public Requirement getNextRequirement();
Queue<Requirement> getCurrentRequirements();
void addRequirement(Requirement requirement);
void addTransaction(Transaction transaction);
public void addRequirement(Requirement requirement);
public void addTransaction(Transaction transaction);
} }

View File

@ -0,0 +1,11 @@
package cz.cvut.fel.sit.omo.foodchain.channel;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
public class MeatChannel extends ChannelBase
{
public MeatChannel()
{
super(ProductType.MEAT);
}
}

View File

@ -1,26 +0,0 @@
package cz.cvut.fel.sit.omo.foodchain.channel;
import cz.cvut.fel.sit.omo.foodchain.operation.Transaction;
import cz.cvut.fel.sit.omo.foodchain.requirement.Requirement;
public class MeetChannel extends ChannelBase {
@Override
public Transaction getNextTransaction() {
return null;
}
@Override
public Requirement getNextRequirement() {
return null;
}
@Override
public void addRequirement(Requirement requirement) {
}
@Override
public void addTransaction(Transaction transaction) {
}
}

View File

@ -0,0 +1,11 @@
package cz.cvut.fel.sit.omo.foodchain.channel;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
public class OtherChannel extends ChannelBase
{
public OtherChannel()
{
super();
}
}

View File

@ -1,26 +1,11 @@
package cz.cvut.fel.sit.omo.foodchain.channel; package cz.cvut.fel.sit.omo.foodchain.channel;
import cz.cvut.fel.sit.omo.foodchain.operation.Transaction; import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
import cz.cvut.fel.sit.omo.foodchain.requirement.Requirement;
public class VegetableChannel extends ChannelBase {
@Override
public Transaction getNextTransaction() {
return null;
}
@Override
public Requirement getNextRequirement() {
return null;
}
@Override
public void addRequirement(Requirement requirement) {
}
@Override
public void addTransaction(Transaction transaction) {
public class VegetableChannel extends ChannelBase
{
public VegetableChannel()
{
super(ProductType.VEGETABLE);
} }
} }

View File

@ -1,4 +1,111 @@
package cz.cvut.fel.sit.omo.foodchain.product; package cz.cvut.fel.sit.omo.foodchain.product;
public class Product { public class Product
{
private ProductState productState;
private ProductType productType;
private String name;
/**
* Creates Product with default state AVAILABLE
* @param name name of product
* @param productType type of product
*/
public Product(String name, ProductType productType)
{
this.name = name;
this.productType = productType;
this.productState = ProductState.AVAILABLE;
}
/**
* Creates Product
* @param name name of product
* @param productType type of product
* @param productState state of product
*/
public Product(String name, ProductType productType, ProductState productState)
{
this.name = name;
this.productType = productType;
this.productState = productState;
}
// "State machine methods"
/**
* Set current product state to AVAILABLE
*/
public void setStateToAvailable()
{
this.productState = ProductState.AVAILABLE;
}
/**
* Set current product state to READY_FOR_DISPATCH. Throws IllegalStateException if the product is not AVAILABLE.
*/
public void setStateToReadyForDispatch()
{
if(this.productState.equals(ProductState.AVAILABLE))
this.productState = ProductState.READY_FOR_DISPATCH;
else
throw new IllegalStateException("Cannot set state READY_FOR_DISPATCH. Product is not AVAILABLE!");
}
/**
* Set current product state to IN_TRANSIT. Throws IllegalStateException if the product is not READY_FOR_DISPATCH.
*/
public void setStateToInTransit()
{
if(this.productState.equals(ProductState.READY_FOR_DISPATCH))
this.productState = ProductState.IN_TRANSIT;
else
throw new IllegalStateException("Cannot set state IN_TRANSIT. Product is not READY_FOR_DISPATCH!");
}
/**
* Set current product state to READY_FOR_RECEPTION. Throws IllegalStateException if the product is not READY_FOR_RECEPTION.
*/
public void setStateToReadyForReception()
{
if(this.productState.equals(ProductState.IN_TRANSIT))
this.productState = ProductState.READY_FOR_RECEPTION;
else
throw new IllegalStateException("Cannot set state READY_FOR_RECEPTION. Product has not been in transit!");
}
/*
public void setProductState(ProductState productState)
{
this.productState = productState;
}*/
//Getters & Setters
public ProductState getProductState()
{
return productState;
}
public ProductType getProductType()
{
return productType;
}
public void setProductType(ProductType productType)
{
this.productType = productType;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
} }

View File

@ -1,4 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.product; package cz.cvut.fel.sit.omo.foodchain.product;
public enum ProductState { public enum ProductState
{
AVAILABLE, READY_FOR_DISPATCH, IN_TRANSIT, READY_FOR_RECEPTION;
} }

View File

@ -1,4 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.product; package cz.cvut.fel.sit.omo.foodchain.product;
public enum ProductType { public enum ProductType
{
MEAT, FRUIT, VEGETABLE, OTHER;
} }