- private void createMenuItem(Menu menu, String menuLabel, TreeNode selectedNode, Class<?> childClass, SpecimenOrObservationType specimenType) {
- MenuItem menuItem = new MenuItem(menu, SWT.NONE);
- menuItem.setText(menuLabel);
- menuItem.addSelectionListener(new WidgetSelectionListener(selectedNode, childClass, specimenType));
+ private void createMenuItem(Menu menu, String menuLabel, final TreeNode selectedNode, Class<?> childClass, final SpecimenOrObservationType specimenType, final DerivationEventType derivationEventType) {
+ if(specimenType!=null && specimenType.equals(SpecimenOrObservationType.Media)){
+ //media submenu
+ MenuItem mediaItem = new MenuItem(menu, SWT.CASCADE);
+ mediaItem.setText(Messages.CreateDerivateContextMenu_MEDIA);
+ Menu mediaMenu = new Menu(menu);
+ mediaItem.setMenu(mediaMenu);
+
+ //media specimen menu
+ MenuItem menuItem = new MenuItem(mediaMenu, SWT.NONE);
+ menuItem.setText(menuLabel);
+ menuItem.addSelectionListener(new WidgetSelectionListener(selectedNode, childClass, specimenType, derivationEventType));
+
+ //existing media menu
+ MenuItem existingMediaItem = new MenuItem(mediaMenu, SWT.NONE);
+ existingMediaItem.setText(Messages.CreateDerivateContextMenu_MEDIA_EXISTING);
+ existingMediaItem.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ //select media
+ Media media = MediaSelectionDialog.select(AbstractUtility.getShell(), null, null);
+ if(media!=null){
+ //create MediaSpecimen
+ MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(specimenType);
+ mediaSpecimen.setMediaSpecimen(media);
+
+ //attach to parent
+ if(selectedNode.getValue() instanceof SpecimenOrObservationBase){
+ SpecimenOrObservationBase<?> specimenOrObservationBase = (SpecimenOrObservationBase<?>)selectedNode.getValue();
+
+ specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, mediaSpecimen, derivationEventType));
+ mediaSpecimen.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
+ mediaSpecimen.getTitleCache(); //update title cache
+ if(CdmStore.getCurrentSessionManager().isRemoting()) {
+ CdmStore.getService(IOccurrenceService.class).merge(specimenOrObservationBase, true);
+ }
+ }
+
+ //refresh view
+ DerivateView derivateView = null;
+ if(AbstractUtility.getActivePart() instanceof DerivateView){
+ derivateView = (DerivateView) AbstractUtility.getActivePart();
+ }
+ if(derivateView!=null){
+
+ derivateView.getConversationHolder().commit();
+ derivateView.refreshTree(mediaSpecimen);
+ }
+ }
+ }
+ });
+ }
+ else{
+ MenuItem menuItem = new MenuItem(menu, SWT.NONE);
+ menuItem.setText(menuLabel);
+ menuItem.addSelectionListener(new WidgetSelectionListener(selectedNode, childClass, specimenType, derivationEventType));
+ }