* as Measurements on the current experiment.
*/
public String addOntoPropsToExp(){
log.info("Adding properties from the ontology to the experiment");
ExperimentBean expBean = (ExperimentBean)JSFUtil.getManagedObject("ExperimentBean");
String etype = expBean.getEtype();
ExpTypeBackingBean exptype = ExpTypeBackingBean.getExpTypeBean(etype);
if( etype.equals( AdminManagerImpl.IDENTIFY ) ) {
exptype = (ExpTypeBackingBean)JSFUtil.getManagedObject("ExpTypeIdentify");
} else if( etype.equals( AdminManagerImpl.MIGRATE ) ) {
exptype = (ExpTypeBackingBean)JSFUtil.getManagedObject("ExpTypeMigrate");
} else if( etype.equals( AdminManagerImpl.EMULATE) ) {
exptype = (ExpTypeBackingBean)JSFUtil.getManagedObject("ExpTypeViewer");
} else if( etype.equals( AdminManagerImpl.EXECUTABLEPP) ) {
exptype = (ExpTypeBackingBean)JSFUtil.getManagedObject("ExpTypeExecutablePP");
}else {
// For unrecognised experiment types, set to NULL:
log.error("unrecognised experiment type");
NewExpWizardController.redirectToExpStage(expBean.getID(), 3);
return "success";
}
//get the information from the ontology tree bean
PropertyDnDTreeBean treeBean = expBean.getOntologyDnDBean();
if(treeBean==null){
// ontology tree bean has not been set
log.error("ontology tree bean not set");
NewExpWizardController.redirectToExpStage(expBean.getID(), 3);
return "success";
}
//the bean's manual observables
HashMap<String, List<MeasurementImpl>> props = exptype.getManualObservables();
//now iterate over all added properties
Map<String,HashMap<String,String>> stagePropsSel = treeBean.getStageSelectedState();
List<OntologyProperty> selProps = treeBean.getSelectedOntologyProperties();
try {
for(ExperimentStageBean stageb : exptype.getStageBeans()){
for(OntologyProperty prop : selProps){
String pURI = prop.getURI();
if(stagePropsSel.get(pURI) !=null){
String val = stagePropsSel.get(pURI).get(stageb.getName());
if(val!=null){
//create a MeasurementImpl from the OntologyProperty
MeasurementImpl measurement = OntoPropertyUtil.createMeasurementFromOntologyProperty(prop);
//check if this property was already added
boolean bContained = false;
MeasurementImpl measurementContained=null;
List<MeasurementImpl> lExistingMeasurements = props.get(stageb.getName());
for(MeasurementImpl m : lExistingMeasurements){
if(m.getIdentifier().equals(measurement.getIdentifier())){
bContained = true;
measurementContained = m;
}
}
//add new
if(val.equals("true")){
//add the Measurement to the experimentType's backing bean
if(! bContained) {
lExistingMeasurements.add(measurement);
log.info("Added manual property: "+measurement.getIdentifier());
}
//update the model's information
expBean.getExperiment().getExperimentExecutable().addManualProperty(stageb.getName(), measurement.getIdentifier().toString());
}
//remove existing
if(val.equals("false")){
//remove the Measurement from the experimentType's backing bean
if(bContained) {
lExistingMeasurements.remove(measurementContained);
log.info("Removed manual property: "+measurement.getIdentifier());
}
//update the model's information
expBean.getExperiment().getExperimentExecutable().removeManualProperty(stageb.getName(), measurement.getIdentifier().toString());
}
}
}
}
}
//store the updated experiment
TestbedManager testbedMan = (TestbedManager) JSFUtil.getManagedObject("TestbedManager");
testbedMan.updateExperiment(expBean.getExperiment());
} catch (Exception e) {
log.debug("error building Measurement from OntologyProperty",e);
}
NewExpWizardController.redirectToExpStage(expBean.getID(), 3);
return "success";
}