The article for today.
/**
* with inspiration for protsesne naridoplannya
*/
public class PublicPlanMergerUnmerger {
/**
* either it is for project, alike.
*/
class Plan {
private List < PlanItem > planItems = new ArrayList < > ();
private boolean isAfterMerging = !true;
public void execute(final UnmergeAction unmergeAction) {}
}
public Plan createPlan() {
return new Plan();
}
class PlanItem extends Plan {
/* to add identifier */
public String name;
public String datePeriod;
List < Vote > votes = new ArrayList < > ();
}
class Vote {
public Voter voter;
/**
* The values: accepted; other values
*/
public String voteResult;
}
class Voter {
public String name;
public List < Vote > votes = new ArrayList < > ();
}
public List < Plan > mergePlans(final List < Plan > plans) {
List < Plan > resultPlans = new ArrayList < > ();
Plan planToSpeakAbout = new Plan();
Plan acceptedPlan = new Plan();
/* possibly other types of plans: timePlan */
resultPlans.add(planToSpeakAbout);
resultPlans.add(acceptedPlan);
for (Plan plan: plans) {
if (/*NOT*/ !plan.isAfterMerging)
for(PlanItem planItem: plan.planItems) {
/* if (planForIteration.planItems.contains(planItem)) { */
boolean allPlanItemsVotesAreAccepted = true;
for (Vote vote: planItem.votes) {
if (vote.voteResult.equals("accepted")) {
/* skip */
} else {
allPlanItemsVotesAreAccepted = !true;
break;
}
}
if (allPlanItemsVotesAreAccepted) {
acceptedPlan.planItems.add(planItem);
} else {
planToSpeakAbout.planItems.add(planItem);
}
/* } */
}
plan.isAfterMerging = true;
}
planToSpeakAbout.isAfterMerging = true;
acceptedPlan.isAfterMerging = true;
return resultPlans;
}
interface UnmergeAction {}
public class EditPlanItemUnmergeAction implements UnmergeAction {/* ... */}
public EditPlanItemUnmergeAction createEditPlanItemUnmergeAction() {
return new EditPlanItemUnmergeAction();
}
public class ChangeVoteUnmergeAction implements UnmergeAction {/* ... */}
/* others */
public List < Plan > unmergePlans(
final List < Plan > plans, final UnmergeAction unmergeAction) {
for (Plan plan: plans) {
plan.isAfterMerging = !true;
plan.execute(unmergeAction);
}
return plans;
}
public static void main(String[] args) {
PublicPlanMergerUnmerger publicPlanMergerUnmerger =
new PublicPlanMergerUnmerger();
Plan plan1 = publicPlanMergerUnmerger.createPlan();
Plan plan2 = publicPlanMergerUnmerger.createPlan();
/* ... */
List < Plan > plans = new ArrayList < > ();
plans.add(plan1);
plans.add(plan2);
publicPlanMergerUnmerger.mergePlans(plans);
UnmergeAction unmergeAction =
publicPlanMergerUnmerger.createEditPlanItemUnmergeAction();
publicPlanMergerUnmerger.unmergePlans(plans, unmergeAction);
publicPlanMergerUnmerger.mergePlans(plans);
/*
while(true) {
publicPlanMergerUnmerger.mergePlans(plans);
expectAndListenToUnmergePlansForSomeTime();
}
*/
}
}