/*
* 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.ambari.server.state.quicklinks;
import java.util.List;
import javax.annotation.Nullable;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;
@JsonSerialize(include= JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Link{
@JsonProperty("name")
private String name;
@JsonProperty("label")
private String label;
@JsonProperty("component_name")
private String componentName;
@JsonProperty("requires_user_name")
private String requiresUserName;
@JsonProperty("url")
private String url;
@JsonProperty("port")
private Port port;
@JsonProperty("protocol")
private Protocol protocol;
@JsonProperty("attributes")
private List<String> attributes;
@JsonProperty("visible")
private boolean visible = true;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getComponentName() {
return componentName;
}
public void setComponentName(String componentName) {
this.componentName = componentName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getRequiresUserName() {
return requiresUserName;
}
public void setRequiresUserName(String requiresUserName) {
this.requiresUserName = requiresUserName;
}
public Port getPort() {
return port;
}
public void setPort(Port port) {
this.port = port;
}
public Protocol getProtocol() {
return protocol;
}
public void setProtocol(Protocol protocol) {
this.protocol = protocol;
}
public boolean isVisible() {
return visible;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
@Nullable
public List<String> getAttributes() {
return attributes;
}
public void setAttributes(List<String> attributes) {
this.attributes = attributes;
}
public boolean isRemoved(){
//treat a link as removed if the section only contains a name
return (null == port && null == url && null == label && null == requiresUserName);
}
public void mergeWithParent(Link parentLink) {
if (null == parentLink)
return;
/* merge happens when a child link has some infor but not all of them.
* If a child link has nothing but a name, it's treated as being removed from the link list
*/
if(null == label && null != parentLink.getLabel())
label = parentLink.getLabel();
if(null == componentName && null != parentLink.getComponentName())
componentName = parentLink.getComponentName();
if(null == url && null != parentLink.getUrl())
url = parentLink.getUrl();
if(null == requiresUserName && null != parentLink.getRequiresUserName())
requiresUserName = parentLink.getRequiresUserName();
if(null == port){
port = parentLink.getPort();
} else {
port.mergetWithParent(parentLink.getPort());
}
if (null == attributes && null != parentLink.attributes) {
attributes = parentLink.attributes;
}
}
}