/* * Copyright (C) 2015 Red Hat, Inc. and/or its affiliates. * * 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 org.jboss.errai.ui.nav.client.local; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; /** * All HistoryToken instances are produced by this class. * * @author Max Barkley <mbarkley@redhat.com> * @author Divya Dadlani <ddadlani@redhat.com> * */ @ApplicationScoped public class HistoryTokenFactory { private final URLPatternMatcher patternMatcher; // For proxying public HistoryTokenFactory() { patternMatcher = null; } @Inject public HistoryTokenFactory(URLPatternMatcher upm) { this.patternMatcher = upm; } /** * This can be used to create a HistoryToken when navigating by page name. * * @param pageName * The name of the page. Never null. * @param state * The map of {@link PageState} keys and values. Never null. * @return A HistoryToken with the parsed URL matching information. */ public HistoryToken createHistoryToken(String pageName, Multimap<String, String> state) { URLPattern pattern = patternMatcher.getURLPattern(pageName); return new HistoryToken(pageName, ImmutableMultimap.copyOf(state), pattern); } /** * This can be used to generate a HistoryToken from a URL path * * @param url * The typed URL path. If the browser is pushstate-enabled, this will be the URI path, otherwise it will be * the fragment identifier. * @return A HistoryToken with the parsed URL matching information. */ public HistoryToken parseURL(String url) { String context = Navigation.getAppContext(); if (!context.isEmpty() && !url.startsWith("/")) { context = context.substring(1); } if (url.startsWith(context)) { url = url.substring(context.length()); } return patternMatcher.parseURL(url); } }