/* Copyright 2014 MITRE Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mitre.provenance.workflows;
import org.mitre.provenance.Metadata;
import org.mitre.provenance.client.AbstractProvenanceClient;
import org.mitre.provenance.client.LocalProvenanceClient;
import org.mitre.provenance.plusobject.PLUSActor;
import org.mitre.provenance.plusobject.PLUSString;
import org.mitre.provenance.plusobject.ProvenanceCollection;
import org.mitre.provenance.surrogate.sgf.GenericInvocationFuzzer;
import org.mitre.provenance.user.PrivilegeClass;
import org.mitre.provenance.user.PrivilegeSet;
import org.mitre.provenance.workflowengine.RelationalLineageCapture;
import org.mitre.provenance.workflowengine.Transition;
import org.mitre.provenance.workflowengine.Workflow;
import org.mitre.provenance.workflowengine.activity.Activity;
import org.mitre.provenance.workflowengine.activity.PLUSObjectEmittingActivity;
public class TBMCSWorkflow extends TracedWorkflow {
protected Workflow w;
protected RelationalLineageCapture tracer;
protected AbstractProvenanceClient client = new LocalProvenanceClient();
public TBMCSWorkflow() throws Exception {
tracer = new RelationalLineageCapture();
tracer.setWriteImmediate(false);
w = new Workflow(tracer, "TBMCS Workflow");
PrivilegeSet mid = new PrivilegeSet();
mid.addPrivilege(new PrivilegeClass(3));
PLUSActor subord = new PLUSActor("Air Expeditionary Wings");
PLUSActor actor = new PLUSActor("TBMCS");
client.report(ProvenanceCollection.collect(subord, actor));
PLUSObjectEmittingActivity GCCSI3 = new PLUSObjectEmittingActivity("GCCS-I3");
PLUSObjectEmittingActivity MAAP = new PLUSObjectEmittingActivity("MAAP and Theater Air Battle Planner (TAP)");
PLUSObjectEmittingActivity IRIS = new PLUSObjectEmittingActivity("IRIS Messaging Dispatcher");
PLUSObjectEmittingActivity GCCSJ = new PLUSObjectEmittingActivity("Task Execution: GCCS-J COP");
PLUSObjectEmittingActivity ESTAT = new PLUSObjectEmittingActivity("Task Execution: ESTAT");
PLUSObjectEmittingActivity AAT = new PLUSObjectEmittingActivity("Task Execution: AAT");
GCCSI3.getMetadata().put("SGF", new GenericInvocationFuzzer());
GCCSI3.getMetadata().put("PrivSet", mid);
GCCSI3.getMetadata().put("actor", actor);
MAAP.getMetadata().put("SGF", new GenericInvocationFuzzer());
MAAP.getMetadata().put("PrivSet", mid);
MAAP.getMetadata().put("actor", actor);
IRIS.getMetadata().put("SGF", new GenericInvocationFuzzer());
IRIS.getMetadata().put("PrivSet", mid);
IRIS.getMetadata().put("actor", subord);
GCCSJ.getMetadata().put("SGF", new GenericInvocationFuzzer());
GCCSJ.getMetadata().put("PrivSet", mid);
GCCSJ.getMetadata().put("actor", subord);
ESTAT.getMetadata().put("SGF", new GenericInvocationFuzzer());
ESTAT.getMetadata().put("PrivSet", mid);
ESTAT.getMetadata().put("actor", subord);
AAT.getMetadata().put("SGF", new GenericInvocationFuzzer());
AAT.getMetadata().put("PrivSet", mid);
AAT.getMetadata().put("actor", subord);
PLUSString JTT = new PLUSString("Joint Targeting Toolkit (JTT)", "Joint Targeting Toolkit (JTT)");
PLUSString ORB = new PLUSString("Order of Battle", "FRoB and EOB");
PLUSString WEBAD = new PLUSString("Web Airspace Deconfliction", "WEBAD");
PLUSString ATOs = new PLUSString("ATOs and Coordination", "ATOs and Coordination");
PLUSString ATO1 = new PLUSString("Air Tasking Order 1", "Air Tasking Order 1");
PLUSString ATO2 = new PLUSString("Air Tasking Order 2", "Air Tasking Order 2");
PLUSString ATO3 = new PLUSString("Air Tasking Order 3", "Air Tasking Order 3");
JTT.setOwner(actor); ORB.setOwner(actor); WEBAD.setOwner(actor); ATOs.setOwner(actor);
ATO1.setOwner(subord); ATO2.setOwner(subord); ATO3.setOwner(subord);
JTT.getPrivileges().addPrivilege(new PrivilegeClass(5));
ORB.getPrivileges().addPrivilege(new PrivilegeClass(5));
WEBAD.getPrivileges().addPrivilege(new PrivilegeClass(5));
ATOs.getPrivileges().addPrivilege(new PrivilegeClass(5));
ATO1.getPrivileges().addPrivilege(new PrivilegeClass(5));
ATO2.getPrivileges().addPrivilege(new PrivilegeClass(5));
ATO3.getPrivileges().addPrivilege(new PrivilegeClass(5));
// Note that we have to call "addEmittedObject" each time, because we're rigging
// the results to be those particular tuples. If the activities were actually
// computing something on their own, that wouldn't be necessary.
GCCSI3.registerOutput("Order of Battle", new Metadata());
GCCSI3.addEmittedObject("Order of Battle", ORB);
MAAP.registerOutput("ATOs and Coordination", new Metadata());
MAAP.addEmittedObject("ATOs and Coordination", ATOs);
MAAP.registerInput("Joint Targeting Toolkit (JTT)", new Metadata());
MAAP.registerInput("Order of Battle", new Metadata());
MAAP.registerInput("Web Airspace Deconfliction", new Metadata());
IRIS.registerOutput("ATO1", new Metadata());
IRIS.registerOutput("ATO2", new Metadata());
IRIS.registerOutput("ATO3", new Metadata());
IRIS.addEmittedObject("ATO1", ATO1);
IRIS.addEmittedObject("ATO2", ATO2);
IRIS.addEmittedObject("ATO3", ATO3);
IRIS.registerInput("ATOs and Coordination", new Metadata());
GCCSJ.registerInput("ATO1", new Metadata());
ESTAT.registerInput("ATO2", new Metadata());
AAT.registerInput("ATO3", new Metadata());
Transition tSTART_GCCSI3 = new Transition(Activity.START_STATE, GCCSI3, "START STATE", null);
Transition tGCCSI3_MAAP = new Transition(GCCSI3, MAAP, "Order of Battle", "Order of Battle");
Transition tMAAP_IRIS = new Transition(MAAP, IRIS, "ATOs and Coordination", "ATOs and Coordination");
Transition tIRIS_GCCSJ = new Transition(IRIS, GCCSJ, "ATO1", "ATO1");
Transition tIRIS_ESTAT = new Transition(IRIS, ESTAT, "ATO2", "ATO2");
Transition tIRIS_AAT = new Transition(IRIS, AAT, "ATO3", "ATO3");
tSTART_GCCSI3.register();
tGCCSI3_MAAP.register();
tMAAP_IRIS.register();
tIRIS_ESTAT.register();
tIRIS_GCCSJ.register();
tIRIS_AAT.register();
w.addPrecomputedObject("Web Airspace Deconfliction", WEBAD);
w.addPrecomputedObject("Joint Targeting Toolkit (JTT)", JTT);
w.execute(Activity.START_STATE);
System.out.println("Done");
} // End TBMCSWorkflow
public ProvenanceCollection getCollection() {
return tracer.getCollection();
}
} // End TBMCSWorkflow