[8780cbec] | 1 | package com.nailabs.abac.process; |
---|
| 2 | |
---|
| 3 | import com.nailabs.abac.trust.*; |
---|
| 4 | import com.nailabs.abac.test.*; |
---|
| 5 | |
---|
| 6 | /** |
---|
| 7 | * This is a specialized operation for transmitting a root node between |
---|
| 8 | * negotiators. |
---|
| 9 | */ |
---|
| 10 | public class NodeOperation implements Operation { |
---|
| 11 | /** The new node to construct */ |
---|
| 12 | Goal goal; |
---|
| 13 | |
---|
| 14 | /** An optional processing state */ |
---|
| 15 | ProcessingState state; |
---|
| 16 | |
---|
| 17 | /** a flag to denote whether this is a new (i.e. root) node or not */ |
---|
| 18 | boolean isRoot = false; |
---|
| 19 | |
---|
| 20 | /** root node operation constructor */ |
---|
| 21 | public NodeOperation(Goal g, ProcessingState ps, boolean isRoot) { |
---|
| 22 | goal = g; |
---|
| 23 | state = ps; |
---|
| 24 | this.isRoot = isRoot; |
---|
| 25 | } |
---|
| 26 | |
---|
| 27 | /** non-root, node state change operation */ |
---|
| 28 | public NodeOperation(Goal g, ProcessingState ps) { |
---|
| 29 | goal = g; |
---|
| 30 | state = ps; |
---|
| 31 | isRoot = false; |
---|
| 32 | } |
---|
| 33 | |
---|
| 34 | /** Jared: Added this method to make XML processing easier */ |
---|
| 35 | public NodeOperation() { |
---|
| 36 | goal = null; |
---|
| 37 | state = null; |
---|
| 38 | } |
---|
| 39 | |
---|
| 40 | /** Jared: Added this method to make XML processing easier */ |
---|
| 41 | public void setGoal(Goal g) { goal = g; } |
---|
| 42 | |
---|
| 43 | /** Jared: Added this method to make XML processing easier */ |
---|
| 44 | public void setProcessingState(ProcessingState ps) { state = ps; } |
---|
| 45 | |
---|
| 46 | /** Jared: Added this method to make XML processing easier */ |
---|
| 47 | public void setRoot(boolean isRoot) { this.isRoot = isRoot; } |
---|
| 48 | |
---|
| 49 | /** public accessor method used for logging this node's goal */ |
---|
| 50 | public Goal getGoal() { return goal; } |
---|
| 51 | |
---|
| 52 | /** public accessor method for determinig whether this is a root node */ |
---|
| 53 | public boolean isRoot() { return isRoot; } |
---|
| 54 | |
---|
| 55 | /** public accessor method for finding the updated processing state */ |
---|
| 56 | public ProcessingState getProcessingState() { return state; } |
---|
| 57 | |
---|
| 58 | /** |
---|
| 59 | * Either add a new node to the root of the trust target graph or |
---|
| 60 | * update the processing state of an existing node. |
---|
| 61 | */ |
---|
| 62 | public void perform(TTG graph) { |
---|
| 63 | StringBuffer buff; |
---|
| 64 | if(isRoot) { |
---|
| 65 | buff = new StringBuffer("adding root node "); |
---|
| 66 | buff.append(goal).append(" to ").append(graph); |
---|
| 67 | debug("root", buff.toString()); |
---|
| 68 | graph.putRoot((TargetNode)graph.getNode((TrustTarget)goal)); |
---|
| 69 | } |
---|
| 70 | buff = new StringBuffer("updating node "); |
---|
| 71 | buff.append(goal).append(" with ").append(state); |
---|
| 72 | debug("node", buff.toString()); |
---|
| 73 | TTGNode node = graph.getNodeByHash(goal); |
---|
| 74 | //node.getProcessingState().update(state); |
---|
| 75 | node.updateProcessingState(state); |
---|
| 76 | } |
---|
| 77 | |
---|
| 78 | /** Friendly debugging convenience method */ |
---|
| 79 | protected void debug(String level, String message) { |
---|
| 80 | StringBuffer buff = new StringBuffer("NodeOperation:"); |
---|
| 81 | buff.append(message); |
---|
| 82 | Debug.debug(level, buff.toString()); |
---|
| 83 | } |
---|
| 84 | |
---|
| 85 | public String toXML() { |
---|
| 86 | StringBuffer buff = new StringBuffer("<NodeOperation"); |
---|
| 87 | if(isRoot) { |
---|
| 88 | buff.append(" type=\"root\">\n"); |
---|
| 89 | } else { |
---|
| 90 | buff.append(">\n"); |
---|
| 91 | } |
---|
| 92 | buff.append("<TrustTarget>"); |
---|
| 93 | buff.append(goal.toXML()); |
---|
| 94 | buff.append("</TrustTarget>\n"); |
---|
| 95 | buff.append(state.toXML()); |
---|
| 96 | buff.append("</NodeOperation>\n"); |
---|
| 97 | return buff.toString(); |
---|
| 98 | } |
---|
| 99 | |
---|
| 100 | |
---|
| 101 | /** Converts this operation into a string */ |
---|
| 102 | public String toString() { |
---|
| 103 | StringBuffer buff = new StringBuffer("[NodeOperation "); |
---|
| 104 | if(isRoot){ |
---|
| 105 | buff.append("root = ").append(goal); |
---|
| 106 | if(state != null) { |
---|
| 107 | buff.append(", processing state = ").append(state); |
---|
| 108 | } |
---|
| 109 | } |
---|
| 110 | else { |
---|
| 111 | buff.append("node = ").append(goal); |
---|
| 112 | buff.append(", processing state = ").append(state); |
---|
| 113 | } |
---|
| 114 | buff.append("]"); |
---|
| 115 | return buff.toString(); |
---|
| 116 | } |
---|
| 117 | |
---|
| 118 | } |
---|
| 119 | |
---|