/*
* 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.api.catalog;
import java.util.Collection;
import javax.annotation.Nullable;
import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.mgmt.rebind.RebindSupport;
import org.apache.brooklyn.api.mgmt.rebind.Rebindable;
import org.apache.brooklyn.api.mgmt.rebind.mementos.CatalogItemMemento;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import com.google.common.annotations.Beta;
@Beta
public interface CatalogItem<T,SpecT> extends BrooklynObject, Rebindable {
public static enum CatalogItemType {
TEMPLATE,
ENTITY,
POLICY,
LOCATION;
public static CatalogItemType ofSpecClass(Class<? extends AbstractBrooklynObjectSpec<?, ?>> type) {
if (type==null) return null;
if (PolicySpec.class.isAssignableFrom(type)) return POLICY;
if (LocationSpec.class.isAssignableFrom(type)) return LOCATION;
if (EntitySpec.class.isAssignableFrom(type)) return ENTITY;
return null;
}
public static CatalogItemType ofTargetClass(Class<? extends BrooklynObject> type) {
if (type==null) return null;
if (Policy.class.isAssignableFrom(type)) return POLICY;
if (Location.class.isAssignableFrom(type)) return LOCATION;
if (Application.class.isAssignableFrom(type)) return TEMPLATE;
if (Entity.class.isAssignableFrom(type)) return ENTITY;
return null;
}
}
public static interface CatalogBundle extends OsgiBundleWithUrl {
/** @deprecated since 0.9.0, use {@link #isNameResolved()} */
public boolean isNamed();
}
/**
* @throws UnsupportedOperationException; config not supported for catalog items
*/
@Override
ConfigurationSupport config();
/**
* @throws UnsupportedOperationException; subscriptions are not supported for catalog items
*/
@Override
SubscriptionSupport subscriptions();
/** @deprecated since 0.7.0 in favour of {@link CatalogBundle}, kept for rebind compatibility */
@Deprecated
public static interface CatalogItemLibraries {
Collection<String> getBundles();
}
public CatalogItemType getCatalogItemType();
/** @return The high-level type of this entity, e.g. Entity (not a specific Entity class) */
public Class<T> getCatalogItemJavaType();
/** @return The type of the spec e.g. EntitySpec corresponding to {@link #getCatalogItemJavaType()} */
public Class<SpecT> getSpecType();
/**
* @return The underlying java type of the item represented, if not described via a YAML spec.
* Normally null (and the type comes from yaml).
* @deprecated since 0.9.0. Use plan based items instead ({@link #getPlanYaml()})
*/
@Deprecated
@Nullable public String getJavaType();
/** @deprecated since 0.7.0. Use {@link #getDisplayName} */
@Deprecated
public String getName();
/** @deprecated since 0.7.0. Use {@link #getSymbolicName} */
@Deprecated
public String getRegisteredTypeName();
@Nullable public String getDescription();
@Nullable public String getIconUrl();
public String getSymbolicName();
public String getVersion();
public Collection<CatalogBundle> getLibraries();
public String toXmlString();
/** @return The underlying YAML for this item, if known;
* currently including `services:` or `brooklyn.policies:` prefix (but this will likely be removed) */
@Nullable public String getPlanYaml();
@Override
RebindSupport<CatalogItemMemento> getRebindSupport();
/** Built up from {@link #getSymbolicName()} and {@link #getVersion()}.
*
* (It is a bit self-referential having this method on this type of {@link BrooklynObject},
* but it is easier this than making the interface hierarchy more complicated.) */
@Override
public String getCatalogItemId();
public void setDeprecated(boolean deprecated);
public void setDisabled(boolean disabled);
/**
* @return True if the item has been deprecated (i.e. its use is discouraged)
*/
boolean isDeprecated();
/**
* @return True if the item has been disabled (i.e. its use is forbidden, except for pre-existing apps)
*/
boolean isDisabled();
}