if ((rootConnector instanceof IItemSelectable)) { ((IItemSelectable) rootConnector) .fireSelectedItemChange(new ItemSelectionEvent(rootConnector, rootConnector));
/** * This is a versatile helper method that retrieves the selected model either * from the 1st selected child connector if the action was triggered on a * collection connector or from the connector itself. * * @param <T> * type inference return. * @param viewPath * the view index path to follow. * <ul> * <li>A positive integer n means the nth child.</li> * <li>A negative integer -n means the nth parent.</li> * </ul> * @param context * the action context. * @return the selected model. */ protected <T> T getSelectedModel(int[] viewPath, Map<String, Object> context) { IValueConnector viewConnector = getViewConnector(viewPath, context); T selectedModel; if (viewConnector instanceof IItemSelectable) { selectedModel = ((IItemSelectable) viewConnector).getSelectedItem(); if (selectedModel instanceof IValueConnector) { selectedModel = ((IValueConnector) selectedModel).getConnectorValue(); } } else { selectedModel = getModel(viewPath, context); } return selectedModel; }
/** * {@inheritDoc} */ @Override public void bind(IValueConnector masterConnector, final IValueConnector detailConnector) { if (masterConnector instanceof IItemSelectable) { ((IItemSelectable) masterConnector) .addItemSelectionListener(new BoundConnectorSelectionListener( detailConnector)); } else { // Do not simply add the detail connector since it will propagate // writability of the master to the detail which is wrong. see bug#342. // } else if (masterConnector instanceof ICompositeValueConnector) { // ((ICompositeValueConnector) masterConnector) // .addChildConnector(detailConnector); mvcBinder.bind(detailConnector, masterConnector.getModelConnector()); masterConnector.addPropertyChangeListener( IValueConnector.MODEL_CONNECTOR_PROPERTY, new BoundConnectorModelListener(detailConnector)); } }
/** * Creates a workspace navigator based on the workspace definition. * * @param workspaceName * the workspace to create the navigator for. * @param workspaceNavigatorViewDescriptor * the view descriptor of the navigator. * @return the workspace navigator view. */ protected IView<E> createWorkspaceNavigator(final String workspaceName, IViewDescriptor workspaceNavigatorViewDescriptor) { IView<E> workspaceNavigatorView = viewFactory.createView(workspaceNavigatorViewDescriptor, this, getLocale()); IItemSelectable workspaceNavigator; if (workspaceNavigatorView.getConnector() instanceof IItemSelectable) { workspaceNavigator = (IItemSelectable) workspaceNavigatorView.getConnector(); } else { workspaceNavigator = (IItemSelectable) ((ICompositeValueConnector) workspaceNavigatorView.getConnector()) .getChildConnector(ModelRefPropertyConnector.THIS_PROPERTY); } workspaceNavigator.addItemSelectionListener(new IItemSelectionListener() { @Override public void selectedItemChange(ItemSelectionEvent event) { navigatorSelectionChanged(workspaceName, (ICompositeValueConnector) event.getSelectedItem()); } }); workspaceNavigatorConnectors.put(workspaceName, (ICompositeValueConnector) workspaceNavigatorView.getConnector()); return workspaceNavigatorView; }
/** * Utility implementation to factorize method support. This should only be * used by subclasses which implement {@code IItemSelectable}. * * @param evt * the item selection event to propagate. */ protected void implFireSelectedItemChange(ItemSelectionEvent evt) { selectedItem = evt.getSelectedItem(); if (itemSelectionSupport != null && (evt.getSource() == this || isTrackingChildrenSelection())) { itemSelectionSupport.fireSelectedConnectorChange(evt); } IValueConnector parentConnector = getParentConnector(); while (parentConnector != null && !(parentConnector instanceof IItemSelectable)) { parentConnector = parentConnector.getParentConnector(); } if (parentConnector != null) { ((IItemSelectable) parentConnector).fireSelectedItemChange(evt); } }