blob: 64319cc1391e3662e06b7ce6a868d1f4fd5b7fdc [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You 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.apache.geode.management.configuration;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.apache.commons.lang3.StringUtils;
/**
* this keeps all HATEOAS links related to a particular configuration object.
* only the map (links) is serialized back to the client, nothing get de-serialized.
*/
public class Links {
public static final String HREF_PREFIX = "#HREF";
public static final String URI_CONTEXT = "/management";
public static final String URI_VERSION = "/v1";
private String self;
private String list;
private Map<String, String> links;
public Links() {
links = new HashMap<>();
}
public Links(String id, String listUri) {
links = new HashMap<>();
setList(listUri);
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(listUri)) {
setSelf(this.list + "/" + id);
}
}
@JsonIgnore
public String getSelf() {
return self;
}
@JsonIgnore
public void setSelf(String self) {
this.self = self;
addLink("self", self);
}
@JsonIgnore
public String getList() {
return list;
}
@JsonIgnore
public void setList(String list) {
this.list = list;
addLink("list", list);
}
/**
* adds the additional HATEOAS links
*/
public void addLink(String key, String url) {
links.put(key, qualifyUrl(url));
}
// this is just to make sure nothing get de-serialized
@JsonAnySetter
public void anySetter(String key, String url) {}
@JsonAnyGetter
public Map<String, String> getLinks() {
return links;
}
private static String qualifyUrl(String uri) {
if (uri.startsWith(URI_VERSION)) {
return HREF_PREFIX + URI_CONTEXT + uri;
}
if (uri.startsWith(URI_CONTEXT)) {
return HREF_PREFIX + uri;
}
if (uri.startsWith(HREF_PREFIX)) {
return uri;
}
return HREF_PREFIX + URI_CONTEXT + URI_VERSION + uri;
}
}