Example usage for com.vaadin.server LegacyCommunicationManager handleConnectorRelatedException

List of usage examples for com.vaadin.server LegacyCommunicationManager handleConnectorRelatedException

Introduction

In this page you can find the example usage for com.vaadin.server LegacyCommunicationManager handleConnectorRelatedException.

Prototype

@Deprecated
public void handleConnectorRelatedException(ClientConnector connector, Throwable throwable) 

Source Link

Document

Handles an exception related to a connector by invoking the appropriate error handler.

Usage

From source file:org.semanticsoft.vaaclipse.app.servlet.VaaclipseServerRpcHandler.java

License:Open Source License

private void handleInvocations(UI uI, int lastSyncIdSeenByClient, JSONArray invocationsData) {
    // TODO PUSH Refactor so that this is not needed
    LegacyCommunicationManager manager = uI.getSession().getCommunicationManager();

    try {/*from w  w w .ja  v  a  2 s  . c  o  m*/
        ConnectorTracker connectorTracker = uI.getConnectorTracker();

        Set<Connector> enabledConnectors = new HashSet<Connector>();

        List<MethodInvocation> invocations = parseInvocations(uI.getConnectorTracker(), invocationsData,
                lastSyncIdSeenByClient);
        for (MethodInvocation invocation : invocations) {
            final ClientConnector connector = connectorTracker.getConnector(invocation.getConnectorId());

            if (connector != null && connector.isConnectorEnabled()) {
                enabledConnectors.add(connector);
            }
        }

        for (int i = 0; i < invocations.size(); i++) {
            MethodInvocation invocation = invocations.get(i);

            final ClientConnector connector = connectorTracker.getConnector(invocation.getConnectorId());
            if (connector == null) {
                getLogger().log(Level.WARNING,
                        "Received RPC call for unknown connector with id {0} (tried to invoke {1}.{2})",
                        new Object[] { invocation.getConnectorId(), invocation.getInterfaceName(),
                                invocation.getMethodName() });
                continue;
            }

            if (!enabledConnectors.contains(connector)) {

                if (invocation instanceof LegacyChangeVariablesInvocation) {
                    LegacyChangeVariablesInvocation legacyInvocation = (LegacyChangeVariablesInvocation) invocation;
                    // TODO convert window close to a separate RPC call and
                    // handle above - not a variable change

                    // Handle special case where window-close is called
                    // after the window has been removed from the
                    // application or the application has closed
                    Map<String, Object> changes = legacyInvocation.getVariableChanges();
                    if (changes.size() == 1 && changes.containsKey("close")
                            && Boolean.TRUE.equals(changes.get("close"))) {
                        // Silently ignore this
                        continue;
                    }
                }

                // Connector is disabled, log a warning and move to the next
                getLogger().warning(getIgnoredDisabledError("RPC call", connector));
                continue;
            }
            // DragAndDropService has null UI
            if (connector.getUI() != null && connector.getUI().isClosing()) {
                String msg = "Ignoring RPC call for connector " + connector.getClass().getName();
                if (connector instanceof Component) {
                    String caption = ((Component) connector).getCaption();
                    if (caption != null) {
                        msg += ", caption=" + caption;
                    }
                }
                msg += " in closed UI";
                getLogger().warning(msg);
                continue;

            }

            if (invocation instanceof ServerRpcMethodInvocation) {
                try {
                    ServerRpcManager.applyInvocation(connector, (ServerRpcMethodInvocation) invocation);
                } catch (RpcInvocationException e) {
                    manager.handleConnectorRelatedException(connector, e);
                }
            } else {
                // All code below is for legacy variable changes
                LegacyChangeVariablesInvocation legacyInvocation = (LegacyChangeVariablesInvocation) invocation;
                Map<String, Object> changes = legacyInvocation.getVariableChanges();
                try {
                    if (connector instanceof VariableOwner) {
                        // The source parameter is never used anywhere
                        changeVariables(null, (VariableOwner) connector, changes);
                        executorService.exec();
                    } else {
                        throw new IllegalStateException("Received legacy variable change for "
                                + connector.getClass().getName() + " (" + connector.getConnectorId()
                                + ") which is not a VariableOwner. The client-side connector sent these legacy varaibles: "
                                + changes.keySet());
                    }
                } catch (Exception e) {
                    manager.handleConnectorRelatedException(connector, e);
                }
            }
        }
    } catch (JSONException e) {
        getLogger().warning("Unable to parse RPC call from the client: " + e.getMessage());
        throw new RuntimeException(e);
    }
}