Advertisement
Guest User

companie

a guest
Feb 24th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.20 KB | None | 0 0
  1. package org.school;
  2.  
  3. public abstract class Activity implements Execute {
  4. private int duration;
  5. private String type;
  6. private int order;
  7. private String name;
  8.  
  9. Activity(String name, int order, int duration) {
  10. this.setName(name);
  11. this.setOrder(order);
  12. this.setDuration(duration);
  13. }
  14.  
  15. abstract void doAction();
  16.  
  17. @Override
  18. public String toString() {
  19. return "Activity " + name + " of type " + type + " started with order " + order + " and will last " + duration + " days.";
  20. }
  21.  
  22. public void printDuration() {
  23. System.out.println("Activity duration " + duration);
  24. }
  25.  
  26. public void setDuration(int duration) {
  27. this.duration = duration;
  28. }
  29.  
  30. String getType() {
  31. return type;
  32. }
  33.  
  34. void setType(String type) {
  35. this.type = type;
  36. }
  37.  
  38. public void printOrder() {
  39. System.out.println("Execution order in project: " + order);
  40. }
  41.  
  42. public void setOrder(int order) {
  43. this.order = order;
  44. }
  45.  
  46. String getName() {
  47. return name;
  48. }
  49.  
  50. void setName(String name) {
  51. this.name = name;
  52. }
  53.  
  54. @Override
  55. public void execute() {
  56. System.out.println(this.toString());
  57. }
  58. }
  59.  
  60. package org.school;
  61.  
  62. class AdministrativeActivity extends Activity {
  63. AdministrativeActivity(String name, int order, int duration) {
  64. super(name, order, duration);
  65. this.setType("Administrative");
  66. }
  67.  
  68. @Override
  69. public void doAction() {
  70. System.out.println("Doing very important Administrative thing");
  71. }
  72.  
  73. }
  74. package org.school;
  75.  
  76. class ComercialActivity extends Activity {
  77. ComercialActivity(String name, int order, int duration) {
  78. super(name, order, duration);
  79. this.setType("Comercial");
  80. }
  81.  
  82. @Override
  83. public void doAction() {
  84. System.out.println("Doing relatively important Comercial thing");
  85. }
  86. }
  87. package org.school;
  88.  
  89. import java.util.ArrayList;
  90. import java.util.HashMap;
  91. import java.util.List;
  92.  
  93. public class Company {
  94. private HashMap<String, Project> projects = new HashMap<>();
  95.  
  96. public void addProject(Project project) {
  97. projects.put(project.getName(), project);
  98. }
  99.  
  100. private Project getProjectByName(String projectName) {
  101. if (projects.containsKey(projectName)) return projects.get(projectName);
  102. throw new IllegalArgumentException("Non-existing project");
  103. }
  104.  
  105. public void startProject(String projectName) {
  106. getProjectByName(projectName).start();
  107. }
  108.  
  109. public void performActivityAction(String projectName, String activityName) {
  110. Project project = getProjectByName(projectName);
  111. if (!project.isStarted()) throw new ProjectNotStarted(projectName, activityName);
  112. project.getActivityByName(activityName).doAction();
  113. }
  114.  
  115.  
  116. }
  117. package org.school;
  118.  
  119. public interface Execute {
  120. void execute();
  121. }
  122. package org.school;
  123.  
  124. public class Main {
  125.  
  126. public static void main(String[] args) {
  127. // write your code here
  128. }
  129. }
  130. package org.school;
  131.  
  132. import java.util.LinkedList;
  133.  
  134. public class Project {
  135. private int index = 0;
  136. private LinkedList<Activity> activities = new LinkedList<>();
  137. private boolean isStarted = false;
  138. private String name;
  139.  
  140. Project(String name) {
  141. this.name = name;
  142. }
  143.  
  144. public void addActivity(String type, String name, int duration) {
  145. Activity activity;
  146. if (type.equalsIgnoreCase("Administrative")) {
  147. activity = new AdministrativeActivity(name, index, duration);
  148. } else if (type.equalsIgnoreCase("Comercial")) {
  149. activity = new ComercialActivity(name, index, duration);
  150. } else throw new IllegalArgumentException("Bad activity type");
  151. activities.add(activity);
  152. index++;
  153. }
  154.  
  155. public void start() {
  156. isStarted = true;
  157. System.out.println("Started project " + name);
  158. for (Activity activity : activities) {
  159. activity.execute();
  160. }
  161. }
  162.  
  163. public boolean isStarted() {
  164. return isStarted;
  165. }
  166.  
  167. public String getName() {
  168. return this.name;
  169. }
  170.  
  171. public Activity getActivityByIndex(int index) {
  172. if (index < 0 || index > activities.size())
  173. throw new IllegalArgumentException("There's no activity with this order index");
  174. return activities.get(index);
  175. }
  176.  
  177. public Activity getActivityByName(String activityName) {
  178. return activities.stream()
  179. .filter(a -> a.getName().equalsIgnoreCase(activityName))
  180. .findFirst()
  181. .orElseThrow(() -> new IllegalArgumentException("There is no activity with name " + activityName));
  182. }
  183. }
  184. package org.school;
  185.  
  186. class ProjectNotStarted extends RuntimeException {
  187. ProjectNotStarted(String projectName, String activityName) {
  188. super("Project " + projectName + " not started, unable to execute activity " + activityName);
  189. }
  190. }
  191. package org.school;
  192.  
  193. import org.junit.Assert;
  194. import org.junit.Test;
  195.  
  196. public class Tests {
  197.  
  198.  
  199. @Test
  200. public void startProjectInCompany() {
  201. Company myCompany = new Company();
  202. Project project1 = new Project("Project1");
  203. project1.addActivity("Administrative", "Activity1", 10);
  204. project1.addActivity("Comercial", "Activity2", 15);
  205. Project project2 = new Project("Project2");
  206. project2.addActivity("Administrative", "Activity3", 3);
  207. project2.addActivity("Comercial", "Activity4", 6);
  208. myCompany.addProject(project1);
  209. myCompany.addProject(project2);
  210. myCompany.startProject("Project1");
  211. Assert.assertTrue("Project did not start", project1.isStarted());
  212. }
  213.  
  214. @Test(expected = ProjectNotStarted.class)
  215. public void shouldNotExecuteActivityForProjectNotStarted() {
  216. Company myCompany = new Company();
  217. Project project1 = new Project("Project1");
  218. project1.addActivity("Administrative", "Activity1", 10);
  219. project1.addActivity("Comercial", "Activity2", 15);
  220. myCompany.addProject(project1);
  221. myCompany.performActivityAction("Project1", "Activity1");
  222. }
  223.  
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement