Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.school;
- public abstract class Activity implements Execute {
- private int duration;
- private String type;
- private int order;
- private String name;
- Activity(String name, int order, int duration) {
- this.setName(name);
- this.setOrder(order);
- this.setDuration(duration);
- }
- abstract void doAction();
- @Override
- public String toString() {
- return "Activity " + name + " of type " + type + " started with order " + order + " and will last " + duration + " days.";
- }
- public void printDuration() {
- System.out.println("Activity duration " + duration);
- }
- public void setDuration(int duration) {
- this.duration = duration;
- }
- String getType() {
- return type;
- }
- void setType(String type) {
- this.type = type;
- }
- public void printOrder() {
- System.out.println("Execution order in project: " + order);
- }
- public void setOrder(int order) {
- this.order = order;
- }
- String getName() {
- return name;
- }
- void setName(String name) {
- this.name = name;
- }
- @Override
- public void execute() {
- System.out.println(this.toString());
- }
- }
- package org.school;
- class AdministrativeActivity extends Activity {
- AdministrativeActivity(String name, int order, int duration) {
- super(name, order, duration);
- this.setType("Administrative");
- }
- @Override
- public void doAction() {
- System.out.println("Doing very important Administrative thing");
- }
- }
- package org.school;
- class ComercialActivity extends Activity {
- ComercialActivity(String name, int order, int duration) {
- super(name, order, duration);
- this.setType("Comercial");
- }
- @Override
- public void doAction() {
- System.out.println("Doing relatively important Comercial thing");
- }
- }
- package org.school;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- public class Company {
- private HashMap<String, Project> projects = new HashMap<>();
- public void addProject(Project project) {
- projects.put(project.getName(), project);
- }
- private Project getProjectByName(String projectName) {
- if (projects.containsKey(projectName)) return projects.get(projectName);
- throw new IllegalArgumentException("Non-existing project");
- }
- public void startProject(String projectName) {
- getProjectByName(projectName).start();
- }
- public void performActivityAction(String projectName, String activityName) {
- Project project = getProjectByName(projectName);
- if (!project.isStarted()) throw new ProjectNotStarted(projectName, activityName);
- project.getActivityByName(activityName).doAction();
- }
- }
- package org.school;
- public interface Execute {
- void execute();
- }
- package org.school;
- public class Main {
- public static void main(String[] args) {
- // write your code here
- }
- }
- package org.school;
- import java.util.LinkedList;
- public class Project {
- private int index = 0;
- private LinkedList<Activity> activities = new LinkedList<>();
- private boolean isStarted = false;
- private String name;
- Project(String name) {
- this.name = name;
- }
- public void addActivity(String type, String name, int duration) {
- Activity activity;
- if (type.equalsIgnoreCase("Administrative")) {
- activity = new AdministrativeActivity(name, index, duration);
- } else if (type.equalsIgnoreCase("Comercial")) {
- activity = new ComercialActivity(name, index, duration);
- } else throw new IllegalArgumentException("Bad activity type");
- activities.add(activity);
- index++;
- }
- public void start() {
- isStarted = true;
- System.out.println("Started project " + name);
- for (Activity activity : activities) {
- activity.execute();
- }
- }
- public boolean isStarted() {
- return isStarted;
- }
- public String getName() {
- return this.name;
- }
- public Activity getActivityByIndex(int index) {
- if (index < 0 || index > activities.size())
- throw new IllegalArgumentException("There's no activity with this order index");
- return activities.get(index);
- }
- public Activity getActivityByName(String activityName) {
- return activities.stream()
- .filter(a -> a.getName().equalsIgnoreCase(activityName))
- .findFirst()
- .orElseThrow(() -> new IllegalArgumentException("There is no activity with name " + activityName));
- }
- }
- package org.school;
- class ProjectNotStarted extends RuntimeException {
- ProjectNotStarted(String projectName, String activityName) {
- super("Project " + projectName + " not started, unable to execute activity " + activityName);
- }
- }
- package org.school;
- import org.junit.Assert;
- import org.junit.Test;
- public class Tests {
- @Test
- public void startProjectInCompany() {
- Company myCompany = new Company();
- Project project1 = new Project("Project1");
- project1.addActivity("Administrative", "Activity1", 10);
- project1.addActivity("Comercial", "Activity2", 15);
- Project project2 = new Project("Project2");
- project2.addActivity("Administrative", "Activity3", 3);
- project2.addActivity("Comercial", "Activity4", 6);
- myCompany.addProject(project1);
- myCompany.addProject(project2);
- myCompany.startProject("Project1");
- Assert.assertTrue("Project did not start", project1.isStarted());
- }
- @Test(expected = ProjectNotStarted.class)
- public void shouldNotExecuteActivityForProjectNotStarted() {
- Company myCompany = new Company();
- Project project1 = new Project("Project1");
- project1.addActivity("Administrative", "Activity1", 10);
- project1.addActivity("Comercial", "Activity2", 15);
- myCompany.addProject(project1);
- myCompany.performActivityAction("Project1", "Activity1");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement