+ public void setOutSet(Node currentNode) {
+ if ((currentNode.getSetSet().getDataList1().getAppSet())&&(currentNode.getSetSet().getDataList2().getAppSet())) { //App1 & App2 are writers
+ currentNode.getOutSet().setDataList1(currentNode.getSetSet().getDataList1().getAppSet(), currentNode.getSetSet().getDataList1().getValue());
+ currentNode.getOutSet().setDataList2(currentNode.getSetSet().getDataList2().getAppSet(), currentNode.getSetSet().getDataList2().getValue());
+ } else if (currentNode.getSetSet().getDataList1().getAppSet()) { //App1 is a writer
+ currentNode.getOutSet().setDataList1(currentNode.getSetSet().getDataList1().getAppSet(), currentNode.getSetSet().getDataList1().getValue());
+ currentNode.getOutSet().setDataList2(currentNode.getInSet().getDataList2().getAppSet(), currentNode.getInSet().getDataList2().getValue());
+ } else if (currentNode.getSetSet().getDataList2().getAppSet()) { //App2 is a writer
+ currentNode.getOutSet().setDataList1(currentNode.getInSet().getDataList1().getAppSet(), currentNode.getInSet().getDataList1().getValue());
+ currentNode.getOutSet().setDataList2(currentNode.getSetSet().getDataList2().getAppSet(), currentNode.getSetSet().getDataList2().getValue());
+ } else { //No writer for this node => outSet = inSet
+ currentNode.getOutSet().setDataList1(currentNode.getInSet().getDataList1().getAppSet(), currentNode.getInSet().getDataList1().getValue());
+ currentNode.getOutSet().setDataList2(currentNode.getInSet().getDataList2().getAppSet(), currentNode.getInSet().getDataList2().getValue());
+ }
+ }
+
+ public void setInSet(Node currentNode) {
+ for (Node i : currentNode.getPredecessors()) {
+ //Check to see if dataList1 of predNode(i) is valid or not: if valid get its value
+ if (i.getOutSet().getDataList1().getAppSet()) {
+ currentNode.getInSet().setDataList1(true, i.getOutSet().getDataList1().getValue());
+ }
+
+ //Check to see if dataList2 of predNode(i) is valid or not: if valid get its value
+ if (i.getOutSet().getDataList2().getAppSet()) {
+ currentNode.getInSet().setDataList2(true, i.getOutSet().getDataList2().getValue());
+ }
+ }
+ }
+
+ boolean checkOutSetChange(Node currentNode, DataSet tempOutSet) {
+ return ((currentNode.getOutSet().getDataList1().getAppSet() != tempOutSet.getDataList1().getAppSet())||
+ !(currentNode.getOutSet().getDataList1().getValue().equals(tempOutSet.getDataList1().getValue()))||
+ (currentNode.getOutSet().getDataList2().getAppSet() != tempOutSet.getDataList2().getAppSet())||
+ !(currentNode.getOutSet().getDataList2().getValue().equals(tempOutSet.getDataList2().getValue())));
+ }
+
+ public void checkForConflict(Node currentNode) {
+ if ((currentNode.getOutSet().getDataList1().getAppSet() == true)&&(currentNode.getOutSet().getDataList2().getAppSet() == true)) { //Both apps have set the device
+ if (!(currentNode.getOutSet().getDataList1().getValue().equals(currentNode.getOutSet().getDataList2().getValue()))) //Values set by the apps are not the same, and we have a conflict!
+ conflictFound = true;
+ }
+ }
+
+ class Node {
+ Integer id;
+ ArrayList<Node> predecessors = new ArrayList<Node>();
+ ArrayList<Node> successors = new ArrayList<Node>();
+ DataSet inSet = new DataSet(false, "NA", false, "NA");
+ DataSet setSet = new DataSet(false, "NA", false, "NA");
+ DataSet outSet = new DataSet(false, "NA", false, "NA");
+
+ Node(Integer id) {
+ this.id = id;
+ }
+
+ void addPredecessor(Node node) {
+ predecessors.add(node);
+ }
+
+ void addSuccessor(Node node) {
+ successors.add(node);
+ }
+
+ void emptyInSet() {
+ this.inSet = new DataSet(false, "NA", false, "NA");
+ }
+
+ void setInSet(DataSet inSet) {
+ this.inSet.setDataList1(inSet.getDataList1().getAppSet(), inSet.getDataList1().getValue());
+ this.inSet.setDataList2(inSet.getDataList2().getAppSet(), inSet.getDataList2().getValue());
+ }
+
+ void setSetSet(DataSet setSet) {
+ this.setSet.setDataList1(setSet.getDataList1().getAppSet(), setSet.getDataList1().getValue());
+ this.setSet.setDataList2(setSet.getDataList2().getAppSet(), setSet.getDataList2().getValue());
+ }
+
+ void setOutSet(DataSet outSet) {
+ this.outSet.setDataList1(outSet.getDataList1().getAppSet(), outSet.getDataList1().getValue());
+ this.outSet.setDataList2(outSet.getDataList2().getAppSet(), outSet.getDataList2().getValue());
+ }
+
+ Integer getId() {
+ return id;
+ }
+
+ ArrayList<Node> getPredecessors() {
+ return predecessors;
+ }
+
+ ArrayList<Node> getSuccessors() {
+ return successors;
+ }
+
+ DataSet getInSet() {
+ return inSet;
+ }
+
+ DataSet getOutSet() {
+ return outSet;
+ }
+
+ DataSet getSetSet() {
+ return setSet;
+ }
+ }
+