Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.30 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.IOException;
  4. import java.lang.reflect.InvocationTargetException;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import ru.spbstu.pipeline.Status;
  8. import ru.spbstu.pipeline.logging.Logger;
  9. import ru.spbstu.pipeline.Executor;
  10. import ru.spbstu.pipeline.Reader;
  11. import ru.spbstu.pipeline.Writer;
  12. import ru.spbstu.pipeline.logging.UtilLogger;
  13.  
  14.  
  15. public class ManagerClass {
  16.     private static final String  fileLog= "log.txt";
  17.     private List<Executor> executors;
  18.     private Reader reader;
  19.     private Writer writer;
  20.     private ru.spbstu.pipeline.logging.Logger logger;
  21.     private Status status = Status.OK;
  22.  
  23.     public ManagerClass(String configFile){
  24.         java.util.logging.Logger utilLogger = java.util.logging.Logger.getLogger(fileLog);
  25.         logger = UtilLogger.of(utilLogger);
  26.         buildPipeline(configFile);
  27.     }
  28.  
  29.     public ManagerClass(String configFile, ru.spbstu.pipeline.logging.Logger logger){
  30.         this.logger = logger;
  31.         buildPipeline(configFile);
  32.     }
  33.  
  34.     private int checkWorkers(){
  35.         if(status != Status.OK)
  36.             return -1;
  37.  
  38.         boolean hasNullWorker = (reader == null) || (writer == null);
  39.         for (Executor ex: executors) hasNullWorker |= (ex == null);
  40.         if(hasNullWorker){
  41.             status = Status.ERROR;
  42.             logger.log("Error in Transporter: unable to launch - a worker is missing");
  43.             return -1;
  44.         }
  45.  
  46.         boolean workersAreOK = (reader.status() == Status.OK) && (writer.status() == Status.OK);
  47.         for(Executor ex: executors) workersAreOK &= (ex.status() == Status.OK);
  48.         if(!workersAreOK){
  49.             status = Status.ERROR;
  50.             logger.log("Error in Transporter: pipeline is built successfully, but not all workers are OK");
  51.             return -1;
  52.         }
  53.         return 0;
  54.     }
  55.  
  56.     public void run(){
  57.         if (checkWorkers() != 0) {
  58.             status = Status.ERROR;
  59.             logger.log("Transporter not ready to run.");
  60.             return;
  61.         }
  62.         reader.run();
  63.     }
  64.  
  65.     private void buildPipeline(String configFile){
  66.         ParseConfigFile parser = new ParseConfigFile(configFile, logger);
  67.         if(parser.getStatus() != Status.OK){
  68.             status = Status.ERROR;
  69.             logger.log("Error status is not OK");
  70.             return;
  71.         }
  72.         executors = new ArrayList<>();
  73.         Delimiter readerParam =  parser.reader();
  74.         Delimiter writerParam =  parser.writer();
  75.         Delimiter [] executorParams = parser.executors();
  76.         try{
  77.             Class readerExtra = Class.forName(readerParam.className);
  78.             String readerConfig = readerParam.configFilename;
  79.             Class[] readerParameter ={String.class, ru.spbstu.pipeline.logging.Logger.class};//int/class
  80.             reader = (ReaderClass) readerExtra.getConstructor(readerParameter).newInstance(readerParam.configFilename, logger);
  81.         } catch (ClassNotFoundException | NullPointerException e){
  82.             status = Status.ERROR;
  83.             logger.log("Error no such class: " + readerParam.className);
  84.         } catch (NoSuchMethodException | IllegalAccessException | InstantiationException e){
  85.             status = Status.ERROR;
  86.             logger.log("Error class " + readerParam.className + " doesn't implement constructor");
  87.         } catch (InvocationTargetException e){
  88.             status = Status.ERROR;
  89.             logger.log("Error exception thrown in constructor");
  90.         }
  91.         try{
  92.             Class writerExtra = Class.forName(writerParam.className);
  93.             String writerConfig = writerParam.configFilename;
  94.             Class[] writerParameter ={String.class, ru.spbstu.pipeline.logging.Logger.class};
  95.             writer = (WriterClass) writerExtra.getConstructor(writerParameter).newInstance(writerParam.configFilename, logger);
  96.         } catch (ClassNotFoundException | NullPointerException e){
  97.             status = Status.ERROR;
  98.             logger.log("Error no such class: " + writerParam.className);
  99.         } catch (NoSuchMethodException | IllegalAccessException | InstantiationException e){
  100.             status = Status.ERROR;
  101.             logger.log("Error class " + writerParam.className + " doesn't implement constructor");
  102.         } catch (InvocationTargetException e){
  103.             status = Status.ERROR;
  104.             logger.log("Error exception thrown in constructor");
  105.         }
  106.         if(executorParams.length == 0){
  107.             if(checkWorkers() != 0) return;
  108.             reader.addConsumer(writer);
  109.             writer.addProducer(reader);
  110.         } else {
  111.             for (Delimiter executorParam: executorParams) {
  112.                 Executor executor = null;
  113.                 try{
  114.                     Class executorExtra = Class.forName(executorParam.className);
  115.                     String executorConfig = executorParam.configFilename;
  116.                     Class[] executorParameter ={String.class, ru.spbstu.pipeline.logging.Logger.class};
  117.                     executor = (ExecutorClass) executorExtra.getConstructor(executorParameter).newInstance(executorParam.configFilename, logger);
  118.                     executors.add(executor);
  119.                 } catch (ClassNotFoundException | NullPointerException e){
  120.                     status = Status.ERROR;
  121.                     logger.log("Error no such class: " + executorParam.className);
  122.                 } catch (NoSuchMethodException | IllegalAccessException | InstantiationException e){
  123.                     status = Status.ERROR;
  124.                     logger.log("Error class " + executorParam.className + " doesn't implement constructor");
  125.                 } catch (InvocationTargetException e){
  126.                     status = Status.ERROR;
  127.                     logger.log("Error exception thrown in constructor");
  128.                 }
  129.             }
  130.             if(checkWorkers() != 0) return;
  131.             for (int i = 1; i < executors.size(); i++){
  132.                 executors.get(i-1).addConsumer(executors.get(i));
  133.                 executors.get(i).addProducer(executors.get(i-1));
  134.             }
  135.             reader.addConsumer(executors.get(0));
  136.             executors.get(0).addProducer(reader);
  137.             writer.addProducer(executors.get(executors.size() - 1));
  138.             executors.get(executors.size() - 1).addConsumer(writer);
  139.         }
  140.     }
  141.  
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement