package edu.ualberta.med.biobank.widgets; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import edu.ualberta.med.biobank.gui.common.widgets.BgcBaseWidget; import edu.ualberta.med.biobank.gui.common.widgets.BgcEntryFormWidgetListener; import edu.ualberta.med.biobank.model.EventAttrCustom; import edu.ualberta.med.biobank.model.GlobalEventAttr; import edu.ualberta.med.biobank.model.StudyEventAttr; public class StudyEventAttrSelectionWidget extends BgcBaseWidget { private static class StudyEventAttrCustom extends EventAttrCustom { public EventAttrWidget widget; public GlobalEventAttr geAttr; public boolean selected; } Map<String, StudyEventAttrCustom> seAttrSettings; public StudyEventAttrSelectionWidget(Composite parent, int style, Set<GlobalEventAttr> globalEventAttrs, Set<StudyEventAttr> studyEventAttrs, BgcEntryFormWidgetListener listener) { super(parent, style); seAttrSettings = new HashMap<String, StudyEventAttrCustom>(); StudyEventAttrCustom seAttrCustom; for (GlobalEventAttr geAttr : globalEventAttrs) { String label = geAttr.getLabel(); seAttrCustom = new StudyEventAttrCustom(); seAttrCustom.geAttr = geAttr; seAttrCustom.setLabel(label); seAttrCustom.setType(geAttr.getEventAttrType().getName()); seAttrCustom.setIsDefault(false); seAttrCustom.selected = false; // set correctly below seAttrSettings.put(geAttr.getLabel(), seAttrCustom); } for (StudyEventAttr seAttr : studyEventAttrs) { seAttrCustom = seAttrSettings.get(seAttr.getGlobalEventAttr().getLabel()); if (seAttrCustom == null) { throw new NullPointerException(); } seAttrCustom.selected = true; seAttrCustom.setAllowedValues(seAttr.getPermissible().split(";")); } for (GlobalEventAttr geAttr : globalEventAttrs) { seAttrCustom = seAttrSettings.get(geAttr.getLabel()); seAttrCustom.widget = new EventAttrWidget(this, SWT.NONE, seAttrCustom, seAttrCustom.selected); seAttrCustom.widget.addSelectionChangedListener(listener); } } public Set<StudyEventAttr> getStudyEventAttr() { Set<StudyEventAttr> newSeAttrs = new HashSet<StudyEventAttr>(); for (StudyEventAttrCustom seAttrCustom : seAttrSettings.values()) { if (!seAttrCustom.widget.getSelected()) continue; StudyEventAttr seAttr = new StudyEventAttr(); seAttr.setGlobalEventAttr(seAttrCustom.geAttr); seAttr.setPermissible(seAttrCustom.widget.getValues()); newSeAttrs.add(seAttr); } return newSeAttrs; } }