1 | package com.nailabs.abac.trust; |
---|
2 | |
---|
3 | import java.util.*; |
---|
4 | import com.nailabs.abac.test.*; |
---|
5 | import com.nailabs.abac.process.*; |
---|
6 | import edu.stanford.peer.rbtm.credential.*; |
---|
7 | |
---|
8 | public class IntersectionTTNode extends TargetNode { |
---|
9 | TTGNodeSet intersectionChildren = new TTGNodeSet(); |
---|
10 | int k = 0, satisfactionCount = 0; |
---|
11 | |
---|
12 | public IntersectionTTNode(TrustTarget target) { |
---|
13 | super(target); |
---|
14 | k = ((Intersection)target.getTargetRole()).getPartsCount(); |
---|
15 | subName = "Intersection"; |
---|
16 | } |
---|
17 | |
---|
18 | public void addIntersectionChild(TargetNode child) { |
---|
19 | intersectionChildren.add(child); |
---|
20 | } |
---|
21 | |
---|
22 | protected TTGNodeSet send(TrustTarget source, SatisfactionState state) { |
---|
23 | TTGNodeSet results = new TTGNodeSet(); |
---|
24 | setState(state); |
---|
25 | Iterator i = implicationParents.values().iterator(); |
---|
26 | while(i.hasNext()) { |
---|
27 | try { // this will fail if the parent is a linking goal |
---|
28 | SatisfactionListener listener = (SatisfactionListener)i.next(); |
---|
29 | TTGNodeSet branchResult = |
---|
30 | listener.receive((TrustTarget)getGoal(), state); |
---|
31 | if(branchResult == null && branchResult.size() > 0) { |
---|
32 | results.addAll(branchResult); |
---|
33 | } |
---|
34 | } |
---|
35 | catch(Exception ex) { // to print out exception uncomment |
---|
36 | ex.printStackTrace(); |
---|
37 | } |
---|
38 | } |
---|
39 | i = controlParents.values().iterator(); |
---|
40 | Strategy strategy = context.getStrategy(); |
---|
41 | while(i.hasNext()) { |
---|
42 | // add each control parent to the work list |
---|
43 | strategy.addToWorklist((TTGNode)i.next()); |
---|
44 | } |
---|
45 | return results; |
---|
46 | } |
---|
47 | |
---|
48 | |
---|
49 | public TTGNodeSet receive(TrustTarget source, SatisfactionState state) { |
---|
50 | debug("satisfaction", getGoal() + " received " + state + " from " + |
---|
51 | source + " with count = " + satisfactionCount); |
---|
52 | switch(state.getState()) { |
---|
53 | case SatisfactionState.SATISFIED: |
---|
54 | satisfactionCount += 1; |
---|
55 | if(satisfactionCount < k) { |
---|
56 | debug("statisfaction", "Intersection received partial satisfaction = " |
---|
57 | + satisfactionCount + "/" + k); |
---|
58 | break; |
---|
59 | } |
---|
60 | case SatisfactionState.FAILED: |
---|
61 | debug("satisfaction", "Intersection is propagating received " + |
---|
62 | state + " with " + satisfactionCount + "/" + k); |
---|
63 | return send(source, state); |
---|
64 | default: |
---|
65 | debug("satisfaction", "Intersection default received " + |
---|
66 | state + " with " + satisfactionCount + "/" + k); |
---|
67 | } |
---|
68 | return new TTGNodeSet(); |
---|
69 | } |
---|
70 | |
---|
71 | private void intersectionProcess(NegotiationContext context) { |
---|
72 | debug("satisfaction", "target expression = " + getTargetExpression()); |
---|
73 | Intersection i = (Intersection)getTargetExpression(); |
---|
74 | EntityExpression subject = getSubject(); |
---|
75 | Entity verifier = getVerifier(); |
---|
76 | Iterator parts = i.getParts(); |
---|
77 | //k = i.getPartsCount(); |
---|
78 | |
---|
79 | while(parts.hasNext()) { |
---|
80 | EntityExpression aDotR = (EntityExpression)parts.next(); |
---|
81 | try { |
---|
82 | TrustTarget child = new TrustTarget(verifier, aDotR, subject); |
---|
83 | context.getGraph().addIntersectionEdge((TrustTarget)getGoal(), |
---|
84 | child); |
---|
85 | } |
---|
86 | catch(Exception ex) { |
---|
87 | ex.printStackTrace(); |
---|
88 | } |
---|
89 | } |
---|
90 | } |
---|
91 | |
---|
92 | public void opponentProcess(NegotiationContext context) { |
---|
93 | if(processor.isOpponentProcessed()) { |
---|
94 | return; |
---|
95 | } |
---|
96 | intersectionProcess(context); |
---|
97 | processor.opponentProcess(); |
---|
98 | } |
---|
99 | |
---|
100 | public void verifierProcess(NegotiationContext context) { |
---|
101 | if(processor.isVerifierProcessed()) { |
---|
102 | return; |
---|
103 | } |
---|
104 | intersectionProcess(context); |
---|
105 | processor.verifierProcess(); |
---|
106 | } |
---|
107 | |
---|
108 | } |
---|