package ameba.mvc.route;

import com.google.common.collect.Lists;
import org.glassfish.jersey.server.ExtendedResourceContext;
import org.glassfish.jersey.server.model.Resource;

import javax.inject.Singleton;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 路由器帮助类
 *
 * @author icode
 * @since 13-8-9 下午7:45
 */
@Singleton
@Path("route")
public class RouteHelper {
    @Context
    private ExtendedResourceContext resourceContext;

    /**
     * <p>getRoutes.</p>
     *
     * @return a {@link java.util.List} object.
     */
    @GET
    public List<String> getRoutes() {
        List<Resource> resourceList = resourceContext.getResourceModel().getResources();
        List<String> routeList = Lists.newArrayList();
        for (Resource resource : resourceList) {
            String path = resource.getPath().startsWith("/") ? "" : "/" + resource.getPath();
            if (resource.getAllMethods().size() > 0) {
                routeList.add(path);
            }
            routeList.addAll(
                    resource.getChildResources()
                            .stream()
                            .map(res -> path + (res.getPath().startsWith("/") ? "" : "/") + res.getPath())
                            .collect(Collectors.toList())
            );
        }
        return routeList;
    }

}