/*
* 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.mvp.impl;
import java.util.Map;
import org.jboss.errai.common.client.api.annotations.Portable;
import org.jboss.errai.ioc.client.container.IOC;
import org.uberfire.backend.vfs.IsVersioned;
import org.uberfire.backend.vfs.ObservablePath;
import org.uberfire.backend.vfs.Path;
import org.uberfire.mvp.PlaceRequest;
import static org.uberfire.util.URIUtil.encode;
@Portable
public class PathPlaceRequest extends DefaultPlaceRequest {
public static String NULL = "[null]";
private ObservablePath path;
public PathPlaceRequest() {
}
public PathPlaceRequest(final Path path) {
super(NULL);
this.path = createObservablePath(path);
}
public PathPlaceRequest(final Path path,
final Map<String, String> parameters) {
this(path);
this.parameters.putAll(parameters);
}
public PathPlaceRequest(final Path path,
final String id) {
super(id);
this.path = createObservablePath(path);
}
public PathPlaceRequest(final Path path,
final String id,
final Map<String, String> parameters) {
this(path,
id);
this.parameters.putAll(parameters);
}
protected ObservablePath createObservablePath(Path path) {
return IOC.getBeanManager().lookupBean(ObservablePath.class).getInstance().wrap(path);
}
@Override
public ObservablePath getPath() {
return path;
}
@Override
public String getFullIdentifier() {
final StringBuilder fullIdentifier = new StringBuilder();
if (getIdentifier() != null) {
fullIdentifier.append(this.getIdentifier());
} else {
fullIdentifier.append(NULL);
}
fullIdentifier.append("?").append("path_uri").append("=").append(encode(path.toURI())).append("&")
.append("file_name").append("=").append(encode(path.getFileName())).append("&");
if (path instanceof IsVersioned) {
fullIdentifier.append("has_version_support").append("=").append(((IsVersioned) path).hasVersionSupport()).append("&");
}
for (String name : this.getParameterNames()) {
fullIdentifier.append(name).append("=").append(this.getParameter(name,
null));
fullIdentifier.append("&");
}
if (fullIdentifier.length() != 0 && fullIdentifier.lastIndexOf("&") + 1 == fullIdentifier.length()) {
fullIdentifier.deleteCharAt(fullIdentifier.length() - 1);
}
return fullIdentifier.toString();
}
@Override
public PlaceRequest clone() {
return new PathPlaceRequest(path,
identifier,
parameters);
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!(o instanceof PathPlaceRequest)) {
return false;
}
if (!super.equals(o)) {
return false;
}
final PathPlaceRequest that = (PathPlaceRequest) o;
return !(getPath() != null ? !getPath().equals(that.getPath()) : that.getPath() != null);
}
@Override
public int hashCode() {
int result = super.hashCode();
result = ~~result;
result = 31 * result + (getPath() != null ? getPath().hashCode() : 0);
result = ~~result;
return result;
}
@Override
public String toString() {
return "PathPlaceRequest[\"" + identifier + "\" " + parameters + "\" " + path + "]";
}
}