/*
* 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.brooklyn.core.mgmt.rebind.dto;
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.mgmt.rebind.mementos.CatalogItemMemento;
import org.apache.brooklyn.api.objs.SpecParameter;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import com.google.common.base.Joiner;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE)
public class BasicCatalogItemMemento extends AbstractMemento implements CatalogItemMemento, Serializable {
private static final long serialVersionUID = -2040630288193425950L;
public static Builder builder() {
return new Builder();
}
public static class Builder extends AbstractMemento.Builder<Builder> {
protected String description;
protected String symbolicName;
protected String iconUrl;
protected String javaType;
protected String version;
protected String planYaml;
protected List<SpecParameter<?>> parameters;
protected Collection<CatalogItem.CatalogBundle> libraries;
protected CatalogItem.CatalogItemType catalogItemType;
protected Class<?> catalogItemJavaType;
protected Class<?> specType;
protected boolean deprecated;
protected boolean disabled;
public Builder description(String description) {
this.description = description;
return self();
}
public Builder symbolicName(String symbolicName) {
this.symbolicName = symbolicName;
return self();
}
public Builder iconUrl(String iconUrl) {
this.iconUrl = iconUrl;
return self();
}
public Builder javaType(String javaType) {
this.javaType = javaType;
return self();
}
public Builder version(String version) {
this.version = version;
return self();
}
public Builder planYaml(String planYaml) {
this.planYaml = planYaml;
return self();
}
public Builder parameters(List<SpecParameter<?>> params) {
this.parameters = params;
return self();
}
public Builder libraries(Collection<CatalogItem.CatalogBundle> libraries) {
this.libraries = libraries;
return self();
}
public Builder catalogItemType(CatalogItem.CatalogItemType catalogItemType) {
this.catalogItemType = catalogItemType;
return self();
}
public Builder catalogItemJavaType(Class<?> catalogItemJavaType) {
this.catalogItemJavaType = catalogItemJavaType;
return self();
}
public Builder specType(Class<?> specType) {
this.specType = specType;
return self();
}
public Builder deprecated(boolean deprecated) {
this.deprecated = deprecated;
return self();
}
public Builder disabled(boolean disabled) {
this.disabled = disabled;
return self();
}
public Builder from(CatalogItemMemento other) {
super.from(other);
description = other.getDescription();
symbolicName = other.getSymbolicName();
iconUrl = other.getIconUrl();
javaType = other.getJavaType();
version = other.getVersion();
planYaml = other.getPlanYaml();
parameters = other.getParameters();
libraries = other.getLibraries();
catalogItemType = other.getCatalogItemType();
catalogItemJavaType = other.getCatalogItemJavaType();
specType = other.getSpecType();
deprecated = other.isDeprecated();
disabled = other.isDisabled();
return self();
}
public BasicCatalogItemMemento build() {
return new BasicCatalogItemMemento(this);
}
}
private String description;
private String symbolicName;
private String iconUrl;
private String javaType;
private String version;
private String planYaml;
private List<SpecParameter<?>> parameters;
private Collection<CatalogItem.CatalogBundle> libraries;
private CatalogItem.CatalogItemType catalogItemType;
private Class<?> catalogItemJavaType;
private Class<?> specType;
private boolean deprecated;
private boolean disabled;
@SuppressWarnings("unused") // For deserialisation
private BasicCatalogItemMemento() {}
protected BasicCatalogItemMemento(Builder builder) {
super(builder);
this.description = builder.description;
this.symbolicName = builder.symbolicName;
this.iconUrl = builder.iconUrl;
this.version = builder.version;
this.planYaml = builder.planYaml;
this.parameters = builder.parameters;
this.libraries = builder.libraries;
this.catalogItemJavaType = builder.catalogItemJavaType;
this.catalogItemType = builder.catalogItemType;
this.specType = builder.specType;
this.javaType = builder.javaType;
this.deprecated = builder.deprecated;
this.disabled = builder.disabled;
}
@Override
public String getId() {
return CatalogUtils.getVersionedId(getSymbolicName(), getVersion());
}
@Override
public String getDescription() {
return description;
}
@Override
public String getSymbolicName() {
return symbolicName;
}
@Override
public String getIconUrl() {
return iconUrl;
}
@Override
public String getVersion() {
if (version != null) {
return version;
} else {
return BasicBrooklynCatalog.NO_VERSION;
}
}
@Override
public String getPlanYaml() {
return planYaml;
}
@Override
public String getJavaType() {
return javaType;
}
@Override
public List<SpecParameter<?>> getParameters() {
if (parameters != null) {
return parameters;
} else {
return ImmutableList.of();
}
}
@Override
public Collection<CatalogItem.CatalogBundle> getLibraries() {
return libraries;
}
@Override
public CatalogItem.CatalogItemType getCatalogItemType() {
return catalogItemType;
}
@Override
public Class<?> getCatalogItemJavaType() {
return catalogItemJavaType;
}
@Override
public Class<?> getSpecType() {
return specType;
}
@Override
public boolean isDeprecated() {
return deprecated;
}
@Override
public boolean isDisabled() {
return disabled;
}
@Override
protected void setCustomFields(Map<String, Object> fields) {
if (!fields.isEmpty()) {
throw new UnsupportedOperationException("Cannot set custom fields on " + this + ". " +
"Fields=" + Joiner.on(", ").join(fields.keySet()));
}
}
@Override
public Map<String, ? extends Object> getCustomFields() {
return Collections.emptyMap();
}
@Override
protected Objects.ToStringHelper newVerboseStringHelper() {
return super.newVerboseStringHelper()
.add("description", getDescription())
.add("symbolicName", getSymbolicName())
.add("iconUrl", getIconUrl())
.add("version", getVersion())
.add("planYaml", getPlanYaml())
.add("parameters", getParameters())
.add("libraries", getLibraries())
.add("catalogItemJavaType", getCatalogItemJavaType())
.add("catalogItemType", getCatalogItemType())
.add("javaType", getJavaType())
.add("specType", getSpecType())
.add("deprecated", isDeprecated())
.add("disabled", isDisabled());
}
}