org.uberfire.client.mvp.PlaceRequestHistoryMapperImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.uberfire.client.mvp.PlaceRequestHistoryMapperImpl.java

Source

/*
 * Copyright 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.uberfire.client.mvp;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gwt.http.client.URL;
import org.uberfire.backend.vfs.PathFactory;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.mvp.impl.DefaultPlaceRequest;
import org.uberfire.mvp.impl.PathPlaceRequest;

public class PlaceRequestHistoryMapperImpl implements PlaceRequestHistoryMapper {

    @Override
    public PlaceRequest getPlaceRequest(String fullIdentifier) {
        final String encodedIdentifier = fullIdentifier.contains("?")
                ? fullIdentifier.substring(0, fullIdentifier.indexOf("?"))
                : fullIdentifier;
        final String identifier = urlDecode(encodedIdentifier);
        final String query = fullIdentifier.contains("?")
                ? fullIdentifier.substring(fullIdentifier.indexOf("?") + 1)
                : "";
        final Map<String, String> parameters = getParameters(query);

        final PlaceRequest placeRequest;
        if (parameters.containsKey("path_uri")) {
            if (parameters.containsKey("has_version_support")) {
                placeRequest = new PathPlaceRequest(PathFactory.newPath(parameters.remove("file_name"),
                        parameters.remove("path_uri"), new HashMap<String, Object>() {
                            {
                                put(PathFactory.VERSION_PROPERTY,
                                        Boolean.valueOf(parameters.remove("has_version_support")));
                            }
                        }), identifier);
            } else {
                placeRequest = new PathPlaceRequest(
                        PathFactory.newPath(parameters.remove("file_name"), parameters.remove("path_uri")),
                        identifier);
            }
        } else {
            placeRequest = new DefaultPlaceRequest(identifier);
        }

        for (String parameterName : parameters.keySet()) {
            placeRequest.addParameter(parameterName, parameters.get(parameterName));
        }

        return placeRequest;
    }

    private Map<String, String> getParameters(String query) {
        final Map<String, String> parameters = new HashMap<String, String>();

        if (query != null && !"".equalsIgnoreCase(query)) {
            final List<String> parts = Arrays.asList(query.split("&"));
            for (String part : parts) {
                int index = part.indexOf('=');
                String name = null;
                String value = null;
                if (index == -1) {
                    name = part;
                    value = "";
                } else {
                    name = part.substring(0, index);
                    value = index < part.length() ? part.substring(index + 1) : "";
                    value = urlDecode(value);
                }
                parameters.put(urlDecode(name), value);
            }
        }

        return parameters;
    }

    String urlDecode(String value) {
        return URL.decode(value);
    }
}