Skip to content

Commit

Permalink
#8 PoliticianLazy rule
Browse files Browse the repository at this point in the history
  • Loading branch information
pethers committed Mar 3, 2018
1 parent 240581d commit 5ca166f
Show file tree
Hide file tree
Showing 4 changed files with 123 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,13 @@
*/
@Service
@Transactional(propagation = Propagation.REQUIRED,timeout=600)
public final class ComplianceCheckService extends
public final class ComplianceCheckServiceImpl extends
AbstractBusinessServiceImpl<ComplianceCheckRequest, ComplianceCheckResponse>
implements BusinessService<ComplianceCheckRequest, ComplianceCheckResponse> {

/** The Constant LOGGER. */
private static final Logger LOGGER = LoggerFactory
.getLogger(ComplianceCheckService.class);
.getLogger(ComplianceCheckServiceImpl.class);

/** The create application event service. */
@Autowired
Expand All @@ -67,7 +67,7 @@ public final class ComplianceCheckService extends
/**
* Instantiates a new compliance check service.
*/
public ComplianceCheckService() {
public ComplianceCheckServiceImpl() {
super(ComplianceCheckRequest.class);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,12 @@ public final class PoliticianComplianceCheckImpl extends AbstractComplianceCheck
* @param politician
* the politician
*/
public PoliticianComplianceCheckImpl(final ViewRiksdagenPolitician politician) {
public PoliticianComplianceCheckImpl(final ViewRiksdagenPolitician politician,final ViewRiksdagenVoteDataBallotPoliticianSummaryDaily dailySummary, final ViewRiksdagenVoteDataBallotPoliticianSummaryMonthly monthlySummary,final ViewRiksdagenVoteDataBallotPoliticianSummaryAnnual annualSummary) {
super(ResourceType.POLITICIAN);
this.politician = politician;
this.dailySummary = dailySummary;
this.monthlySummary = monthlySummary;
this.annualSummary = annualSummary;
this.name = politician.getFirstName() + " " + politician.getLastName() + " (" +politician.getParty() +")";
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@
package com.hack23.cia.service.impl.rules;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import javax.annotation.PostConstruct;

Expand All @@ -41,6 +44,10 @@
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.google.common.collect.Iterables;
import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenVoteDataBallotPoliticianSummaryAnnual;
import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenVoteDataBallotPoliticianSummaryDaily;
import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenVoteDataBallotPoliticianSummaryMonthly;
import com.hack23.cia.model.internal.application.data.party.impl.ViewRiksdagenPartySummary;
import com.hack23.cia.model.internal.application.data.politician.impl.ViewRiksdagenPolitician;
import com.hack23.cia.service.api.action.kpi.ComplianceCheck;
Expand All @@ -50,20 +57,23 @@
* The Class RulesEngineImpl.
*/
@Service
@Transactional(propagation = Propagation.REQUIRED)
@Transactional(propagation = Propagation.REQUIRED, timeout = 1200)
public final class RulesEngineImpl implements RulesEngine {

/** The Constant politicianDrlFile. */
private static final String politicianDrlFile = "rules/politician/PoliticianLeftPartyStillHoldingPositions.drl";
private static final String POLITICAN_RULE_1 = "rules/politician/PoliticianLeftPartyStillHoldingPositions.drl";

private static final String politicianDrlFile2 = "rules/politician/PoliticianTimeToRetire.drl";
private static final String POLITICAN_RULE_2 = "rules/politician/PoliticianTimeToRetire.drl";

private static final String politicianDrlFile3 = "rules/politician/PoliticianBusySchedule.drl";
private static final String POLITICAN_RULE_3 = "rules/politician/PoliticianBusySchedule.drl";

private static final String politicianDrlFile4 = "rules/politician/PoliticianMinisterWithoutParliamentExperience.drl";
private static final String POLITICAN_RULE_4 = "rules/politician/PoliticianMinisterWithoutParliamentExperience.drl";

private static final String POLITICAN_RULE_5 = "rules/politician/PoliticianLazy.drl";


/** The Constant partyDrlFile. */
private static final String partyDrlFile = "rules/party/PartyNoGovernmentExperience.drl";
private static final String PARTY_RULE_1 = "rules/party/PartyNoGovernmentExperience.drl";

/** The data viewer. */
@Autowired
Expand All @@ -78,11 +88,12 @@ public void initRules() {
KieServices kieServices = KieServices.Factory.get();

KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write(new ClassPathResource(politicianDrlFile));
kieFileSystem.write(new ClassPathResource(politicianDrlFile2));
kieFileSystem.write(new ClassPathResource(politicianDrlFile3));
kieFileSystem.write(new ClassPathResource(politicianDrlFile4));
kieFileSystem.write(new ClassPathResource(partyDrlFile));
kieFileSystem.write(new ClassPathResource(POLITICAN_RULE_1));
kieFileSystem.write(new ClassPathResource(POLITICAN_RULE_2));
kieFileSystem.write(new ClassPathResource(POLITICAN_RULE_3));
kieFileSystem.write(new ClassPathResource(POLITICAN_RULE_4));
kieFileSystem.write(new ClassPathResource(POLITICAN_RULE_5));
kieFileSystem.write(new ClassPathResource(PARTY_RULE_1));

KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
Expand Down Expand Up @@ -115,9 +126,60 @@ public List<ComplianceCheck> checkRulesCompliance() {
* @return the list
*/
private void insertPoliticians(KieSession ksession, final List<ViewRiksdagenPolitician> list) {

Map<String, List<ViewRiksdagenVoteDataBallotPoliticianSummaryAnnual>> politicanBallotSummaryAnnualMap = dataViewer
.getAll(ViewRiksdagenVoteDataBallotPoliticianSummaryAnnual.class).stream()
.collect(Collectors.groupingBy(p -> p.getEmbeddedId().getIntressentId()));
Map<String, List<ViewRiksdagenVoteDataBallotPoliticianSummaryMonthly>> politicanBallotSummaryMontlyMap = dataViewer
.getAll(ViewRiksdagenVoteDataBallotPoliticianSummaryMonthly.class).stream()
.collect(Collectors.groupingBy(p -> p.getEmbeddedId().getIntressentId()));
Map<String, List<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily>> politicanBallotSummaryDailyMap = dataViewer
.getAll(ViewRiksdagenVoteDataBallotPoliticianSummaryDaily.class).stream()
.collect(Collectors.groupingBy(p -> p.getEmbeddedId().getIntressentId()));
// Map<String, List<ViewRiksdagenVoteDataBallotPoliticianSummary>>
// politicanBallotSummaryMap =
// dataViewer.getAll(ViewRiksdagenVoteDataBallotPoliticianSummary.class).stream().collect(Collectors.groupingBy(p
// -> p.getEmbeddedId().getIntressentId()));
// Map<String, List<ViewRiksdagenCommitteeBallotDecisionPoliticianSummary>>
// politicanCommitteeDecisionSummaryMap =
// dataViewer.getAll(ViewRiksdagenCommitteeBallotDecisionPoliticianSummary.class).stream().collect(Collectors.groupingBy(p
// -> p.getEmbeddedId().getIntressentId()));
// Map<String, List<ViewRiksdagenPoliticianDocumentDailySummary>>
// politicanDocumentSummaryDailyMap =
// dataViewer.getAll(ViewRiksdagenPoliticianDocumentDailySummary.class).stream().collect(Collectors.groupingBy(p
// -> p.getEmbeddedId().getPersonId()));
// Map<String, List<ViewRiksdagenPoliticianDocument>> politicanDocumentMap =
// dataViewer.getAll(ViewRiksdagenPoliticianDocument.class).stream().collect(Collectors.groupingBy(p
// -> p.getPersonReferenceId()));

for (ViewRiksdagenPolitician politicianData : list) {
if (politicianData != null) {
ksession.insert(new PoliticianComplianceCheckImpl(politicianData));

List<ViewRiksdagenVoteDataBallotPoliticianSummaryDaily> dailyList = politicanBallotSummaryDailyMap
.get(politicianData.getPersonId());
List<ViewRiksdagenVoteDataBallotPoliticianSummaryMonthly> monthlyList = politicanBallotSummaryMontlyMap
.get(politicianData.getPersonId());
List<ViewRiksdagenVoteDataBallotPoliticianSummaryAnnual> annualList = politicanBallotSummaryAnnualMap
.get(politicianData.getPersonId());

if (politicianData.isActiveParliament() && dailyList != null && monthlyList != null
&& annualList != null) {
Collections.sort(dailyList,
(e1, e2) -> e1.getEmbeddedId().getVoteDate().compareTo(e2.getEmbeddedId().getVoteDate()));
Collections.sort(monthlyList,
(e1, e2) -> e1.getEmbeddedId().getVoteDate().compareTo(e2.getEmbeddedId().getVoteDate()));
Collections.sort(annualList,
(e1, e2) -> e1.getEmbeddedId().getVoteDate().compareTo(e2.getEmbeddedId().getVoteDate()));

PoliticianComplianceCheckImpl politicianComplianceCheckImpl = new PoliticianComplianceCheckImpl(
politicianData, Iterables.getFirst(dailyList, null), Iterables.getFirst(monthlyList, null),
Iterables.getFirst(annualList, null));
ksession.insert(politicianComplianceCheckImpl);
} else {
PoliticianComplianceCheckImpl politicianComplianceCheckImpl = new PoliticianComplianceCheckImpl(
politicianData, null, null, null);
ksession.insert(politicianComplianceCheckImpl);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.hack23.cia.service.impl.rules

import com.hack23.cia.model.internal.application.data.politician.impl.ViewRiksdagenPolitician
import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenVoteDataBallotPoliticianSummaryAnnual
import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenVoteDataBallotPoliticianSummaryDaily
import com.hack23.cia.model.internal.application.data.committee.impl.ViewRiksdagenVoteDataBallotPoliticianSummaryMonthly

import com.hack23.cia.service.api.action.kpi.Status
import com.hack23.cia.service.impl.rules.PoliticianComplianceCheckImpl

rule "We have a lazy politician, absent 100 % last day of ballots in parliament"
dialect "java"
salience 10
when
$p : PoliticianComplianceCheckImpl(politician.activeParliament == true && dailySummary != null && dailySummary.politicianPercentageAbsent == 100)
then
modify( $p ) {
setStatus( Status.MINOR )
}
end

rule "We have a lazy politician, absent more than 20 % of ballots last month"
dialect "java"
salience 50
when
$p : PoliticianComplianceCheckImpl( politician.activeParliament == true && monthlySummary != null && monthlySummary.politicianPercentageAbsent >= 20)
then
modify( $p ) {
setStatus( Status.MAJOR )
}
end

rule "We have a lazy politician, absent more than 20 % of ballots last year"
dialect "java"
salience 100
when
$p : PoliticianComplianceCheckImpl( politician.activeParliament == true && annualSummary != null && annualSummary.politicianPercentageAbsent >= 20)
then
modify( $p ) {
setStatus( Status.CRITICAL )
}
end

0 comments on commit 5ca166f

Please sign in to comment.