Merge branch 'feature/factory_impl' into develop

This commit is contained in:
Nikita Iryupin 2020-12-25 18:51:34 +01:00
commit 9d4bb41b54
6 changed files with 256 additions and 24 deletions

View File

@ -1,16 +1,52 @@
package cz.cvut.fel.sit.omo.foodchain; package cz.cvut.fel.sit.omo.foodchain;
import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase;
import cz.cvut.fel.sit.omo.foodchain.factory.ChannelFactory;
import cz.cvut.fel.sit.omo.foodchain.factory.FactoryManager; import cz.cvut.fel.sit.omo.foodchain.factory.FactoryManager;
import cz.cvut.fel.sit.omo.foodchain.parser.ConfigurationParser;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResult;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
import org.xml.sax.SAXException;
public class FoodChain { import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.util.List;
public class FoodChain
{
private static FactoryManager factoryManager = new FactoryManager(); private static FactoryManager factoryManager = new FactoryManager();
public static void main(String[] args) { public static void main(String[] args)
{
try
{
// parse channel configuration
ConfigurationParser.parseDocument("channels");
ParserResult parserResult = ConfigurationParser.getElements("channels");
//todo need getter for elemtens...
List<ParserResultElement> elements = parserResult.getElements();
for (ParserResultElement el : elements)
{
ChannelBase c = getFactoryManager().getChannelFactoryInstance().makeChannel(el);
getFactoryManager().getPoolDatabaseInstance().getChannelPoolInstance().add(c);
}
}
catch (ParserConfigurationException | SAXException | IOException e)
{
System.err.println(e.getMessage());
}
catch (Exception e)
{
System.err.println(e.getMessage());
}
} }
public static FactoryManager getFactoryManager() { public static FactoryManager getFactoryManager()
{
return factoryManager; return factoryManager;
} }
} }

View File

@ -1,4 +1,50 @@
package cz.cvut.fel.sit.omo.foodchain.factory; package cz.cvut.fel.sit.omo.foodchain.factory;
public class ChannelFactory {
import cz.cvut.fel.sit.omo.foodchain.channel.*;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
public class ChannelFactory
{
/**
* Creates channel based on channel type (Fruit, Vegetable, Meat, Other)
* @param input data from channel is created
* @return created Channel (FruitChannel, VegetableChannel, MeatChannel, OtherChannel)
*/
public ChannelBase makeChannel(ParserResultElement input)
{
ChannelBase c = null;
try
{
ProductType channelType = ProductType.valueOf(input.getAttribute("type"));
c = makeChannelFromChannelType(channelType);
}
catch (IllegalArgumentException e)
{
System.err.println("! Wrong type of enum in ChannelFactory: " + e);
}
catch (Exception e)
{
System.err.println("! Fatal error in ChannelFactory: " + e);
}
return c;
}
private ChannelBase makeChannelFromChannelType(ProductType typeOfChannel)
{
switch (typeOfChannel)
{
case FRUIT:
return new FruitChannel();
case VEGETABLE:
return new VegetableChannel();
case MEAT:
return new MeatChannel();
case OTHER:
return new OtherChannel();
}
return null;
}
} }

View File

@ -5,48 +5,68 @@ import cz.cvut.fel.sit.omo.foodchain.util.Singleton;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
public class FactoryManager { public class FactoryManager
{
public NodeFactory getNodeFactoryInstance() { public NodeFactory getNodeFactoryInstance()
try { {
try
{
return Singleton.getInstance(NodeFactory.class); return Singleton.getInstance(NodeFactory.class);
} catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { }
catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e)
{
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
public ChannelFactory getChannelFactoryInstance() { public ChannelFactory getChannelFactoryInstance()
try { {
try
{
return Singleton.getInstance(ChannelFactory.class); return Singleton.getInstance(ChannelFactory.class);
} catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { }
catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e)
{
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
public ScenarioFactory getScenarioFactoryInstance() { public ScenarioFactory getScenarioFactoryInstance()
try { {
try
{
return Singleton.getInstance(ScenarioFactory.class); return Singleton.getInstance(ScenarioFactory.class);
} catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { }
catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e)
{
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
public ProductFactory getProductFactoryInstance() { public ProductFactory getProductFactoryInstance()
try { {
try
{
return Singleton.getInstance(ProductFactory.class); return Singleton.getInstance(ProductFactory.class);
} catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { }
catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e)
{
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
public PoolDatabase getPoolDatabaseInstance() { public PoolDatabase getPoolDatabaseInstance()
try { {
try
{
return Singleton.getInstance(PoolDatabase.class); return Singleton.getInstance(PoolDatabase.class);
} catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { }
catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e)
{
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;

View File

@ -1,4 +1,76 @@
package cz.cvut.fel.sit.omo.foodchain.factory; package cz.cvut.fel.sit.omo.foodchain.factory;
public class NodeFactory { import cz.cvut.fel.sit.omo.foodchain.FoodChain;
import cz.cvut.fel.sit.omo.foodchain.node.*;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
import cz.cvut.fel.sit.omo.foodchain.pool.ChannelPool;
import java.util.Objects;
public class NodeFactory
{
private enum NodeType
{
Farmer, Processor, Distributor, Seller, Customer;
}
/**
* Creates Node based on input ParserResultElement
* @param input data from Node is created
* @return created Node
*/
public NodeBase makeNode(ParserResultElement input)
{
NodeBase n = null;
NodeType nodeType = null;
String subsChannels = "";
int startMoney = 0;
try
{
nodeType = NodeType.valueOf(input.getAttribute("type"));
subsChannels = input.getChild("subscribed_channels");
startMoney = Integer.getInteger(input.getChild("money"));
}
catch (IllegalArgumentException e)
{
System.err.println("! Wrong type of enum in NodeFactory: " + e.getMessage());
}
catch (Exception e)
{
System.err.println("! Fatal error in NodeFactory: " + e.getMessage());
}
switch (Objects.requireNonNull(nodeType))
{
case Farmer:
n = new Farmer(startMoney);
break;
case Processor:
n = new Processor(startMoney);
break;
case Distributor:
n = new Distributor(startMoney);
break;
case Seller:
n = new Seller(startMoney);
break;
case Customer:
n = new Customer(startMoney);
break;
}
String[] subs = subsChannels.split(";");
//todo Node subscription to channels by parser data
for (String s : subs)
{
ChannelPool temp = FoodChain.getFactoryManager().getPoolDatabaseInstance().getChannelPoolInstance();
n.subscribeToChannel(temp.findByName(s));
}
return n;
}
} }

View File

@ -1,4 +1,39 @@
package cz.cvut.fel.sit.omo.foodchain.factory; package cz.cvut.fel.sit.omo.foodchain.factory;
public class ProductFactory { import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
import cz.cvut.fel.sit.omo.foodchain.product.ProductState;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
public class ProductFactory
{
/**
* Creates Product based on input ParserResultElement
* @param input data from Product is created
* @return created Product
*/
public Product makeProduct(ParserResultElement input)
{
Product p = null;
try
{
String name = input.getAttribute("name");
ProductType productType = ProductType.valueOf(input.getChild("type"));
//ProductState productState = ProductState.valueOf(input.getChild("state"));
int price = Integer.getInteger(input.getChild("price"));
//p = new Product(name, price, productType, productState);
p = new Product(name, productType, price);
}
catch (IllegalArgumentException e)
{
System.err.println("! Wrong type of enum in ProductFactory: " + e);
}
catch (Exception e)
{
System.err.println("! Fatal error in ProductFactory: " + e);
}
return p;
}
} }

View File

@ -1,4 +1,27 @@
package cz.cvut.fel.sit.omo.foodchain.factory; package cz.cvut.fel.sit.omo.foodchain.factory;
public class ScenarioFactory { import cz.cvut.fel.sit.omo.foodchain.FoodChain;
import cz.cvut.fel.sit.omo.foodchain.node.*;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
import cz.cvut.fel.sit.omo.foodchain.pool.ChannelPool;
import cz.cvut.fel.sit.omo.foodchain.scenario.Scenario;
import javax.money.Monetary;
import javax.money.MonetaryAmount;
import java.util.Objects;
public class ScenarioFactory
{
/**
* Creates Scenario based on input ParserResultElement
* @param input data from Scenario is created
* @return created Scenario
*/
public Scenario makeScenario(ParserResultElement input)
{
Scenario s = null;
return s;
}
} }