[8780cbec] | 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 | } |
---|