package com.aol.micro.server.servers.model; import java.util.List; import java.util.stream.Collectors; import javax.ws.rs.Path; import cyclops.collections.immutable.PStackX; import cyclops.stream.ReactiveSeq; import lombok.Getter; import lombok.Builder; import org.jooq.lambda.tuple.Tuple; import org.jooq.lambda.tuple.Tuple2; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import com.aol.micro.server.module.Module; @Getter @Builder public class ServerData { private final Logger logger = LoggerFactory.getLogger(getClass()); private final int port; private final PStackX<Object> resources; private final ApplicationContext rootContext; private final String baseUrlPattern; private final Module module; public ServerData(int port, List resources, ApplicationContext rootContext, String baseUrlPattern, Module module) { this.port = port; this.module = module; this.resources = resources==null ? PStackX.of() : PStackX.fromCollection(resources); this.rootContext = rootContext; this.baseUrlPattern = baseUrlPattern; } public ReactiveSeq<Tuple2<String,String>> extractResources() { return resources.stream().peek(resource -> logMissingPath(resource)) .filter(resource-> resource.getClass().getAnnotation(Path.class)!=null) .map(resource -> Tuple.tuple(resource.getClass().getName(), resource.getClass().getAnnotation(Path.class).value())); } private void logMissingPath(Object resource) { if(resource.getClass().getAnnotation(Path.class)==null){ logger.info("Resource with no path " + resource); } } }