package de.rwth.idsg.bikeman.config;

import de.rwth.idsg.bikeman.ixsi.HandshakeInterceptor;
import de.rwth.idsg.bikeman.ixsi.IXSIConstants;
import de.rwth.idsg.bikeman.ixsi.WebSocketEndpoint;
import de.rwth.idsg.bikeman.ixsi.repository.SystemValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;
import xjc.schema.ixsi.IxsiMessageType;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;

/**
 * Created by max on 23/09/14.
 */
@EnableWebSocket
@Configuration
@Slf4j
public class IxsiConfiguration implements WebSocketConfigurer {

    public static final String WS_ENDPOINT  = "/ws";
    public static final String SYSTEM_ID_KEY = "systemId";
    
    @Autowired private WebSocketEndpoint webSocketEndpoint;
    @Autowired private SystemValidator systemValidator;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketEndpoint, WS_ENDPOINT).setAllowedOrigins("*")
                .addInterceptors(new HandshakeInterceptor(systemValidator));
    }

    @Bean
    public ServletServerContainerFactoryBean createWebSocketContainer() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        container.setMaxTextMessageBufferSize(IXSIConstants.MAX_TEXT_MSG_SIZE);
        return container;
    }

    @Bean
    public JAXBContext jaxbContext() throws JAXBException {
        // is thread-safe
        return JAXBContext.newInstance(IxsiMessageType.class);
    }

    @Bean
    public DatatypeFactory datatypeFactory() throws DatatypeConfigurationException {
        // This is expensive to init
        return DatatypeFactory.newInstance();
    }
}

package de.rwth.idsg.bikeman.config;

import de.rwth.idsg.bikeman.ixsi.HandshakeInterceptor;
import de.rwth.idsg.bikeman.ixsi.IXSIConstants;
import de.rwth.idsg.bikeman.ixsi.endpoint.WebSocketEndpoint;
import de.rwth.idsg.bikeman.ixsi.repository.SystemValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;
import xjc.schema.ixsi.IxsiMessageType;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;

/**
 * Created by max on 23/09/14.
 */
@EnableWebSocket
@Configuration
@Slf4j
public class IxsiConfiguration implements WebSocketConfigurer {

    public static final String WS_ENDPOINT  = "/ws";
    public static final String SYSTEM_ID_KEY = "systemId";
    
    @Autowired private WebSocketEndpoint webSocketEndpoint;
    @Autowired private SystemValidator systemValidator;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketEndpoint, WS_ENDPOINT).setAllowedOrigins("*")
                .addInterceptors(new HandshakeInterceptor(systemValidator));
    }

    @Bean
    public ServletServerContainerFactoryBean createWebSocketContainer() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        container.setMaxTextMessageBufferSize(IXSIConstants.MAX_TEXT_MSG_SIZE);
        return container;
    }

    @Bean
    public JAXBContext jaxbContext() throws JAXBException {
        // is thread-safe
        return JAXBContext.newInstance(IxsiMessageType.class);
    }

    @Bean
    public DatatypeFactory datatypeFactory() throws DatatypeConfigurationException {
        // This is expensive to init
        return DatatypeFactory.newInstance();
    }
}

fix import