/*******************************************************************************
* Copyright 2013 Ivan Shubin http://mindengine.net
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package net.mindengine.blogix.web.routes;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class RoutesContainer {
private List<Route> routes;
private ClassLoader[] classLoaders;
public List<Route> getRoutes() {
return routes;
}
public void setRoutes(List<Route> routes) {
this.routes = routes;
}
public RoutesContainer(ClassLoader[] classLoaders) {
this.classLoaders = classLoaders;
}
public void load(File file, String[] defaultControllerPackages, String[] defaultProviderPackages) throws IOException {
if (classLoaders == null) {
throw new IllegalArgumentException("classLoaders are not specified");
}
RoutesParser parser = new DefaultRoutesParser(classLoaders, defaultControllerPackages, defaultProviderPackages);
setRoutes(parser.parseRoutes(file));
}
public Route findRouteMatchingUri(String uri) {
if ( routes == null ) {
throw new RuntimeException("Routes container was not initialized");
}
for (Route route : routes) {
if ( matches(route, uri) ) {
return route;
}
}
return null;
}
private boolean matches(Route route, String uri) {
return route.getUrl().asRegexPattern().matcher(uri).matches();
}
public ClassLoader[] getClassLoaders() {
return classLoaders;
}
public void setClassLoaders(ClassLoader[] classLoaders) {
this.classLoaders = classLoaders;
}
}