/*
* 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.rest.transform;
import java.net.URI;
import java.util.Map;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.policy.Policies;
import org.apache.brooklyn.rest.domain.ApplicationSummary;
import org.apache.brooklyn.rest.domain.PolicyConfigSummary;
import org.apache.brooklyn.rest.domain.PolicySummary;
import org.apache.brooklyn.rest.resources.PolicyConfigResource;
import org.apache.brooklyn.rest.util.BrooklynRestResourceUtils;
import com.google.common.collect.ImmutableMap;
/**
* Converts from Brooklyn entities to restful API summary objects
*/
public class PolicyTransformer {
public static PolicySummary policySummary(Entity entity, Policy policy) {
String applicationUri = "/v1/applications/" + entity.getApplicationId();
String entityUri = applicationUri + "/entities/" + entity.getId();
Map<String, URI> links = ImmutableMap.<String, URI>builder()
.put("self", URI.create(entityUri + "/policies/" + policy.getId()))
.put("config", URI.create(entityUri + "/policies/" + policy.getId() + "/config"))
.put("start", URI.create(entityUri + "/policies/" + policy.getId() + "/start"))
.put("stop", URI.create(entityUri + "/policies/" + policy.getId() + "/stop"))
.put("destroy", URI.create(entityUri + "/policies/" + policy.getId() + "/destroy"))
.put("application", URI.create(applicationUri))
.put("entity", URI.create(entityUri))
.build();
return new PolicySummary(policy.getId(), policy.getDisplayName(), policy.getCatalogItemId(), ApplicationTransformer.statusFromLifecycle(Policies.getPolicyStatus(policy)), links);
}
public static PolicyConfigSummary policyConfigSummary(BrooklynRestResourceUtils utils, ApplicationSummary application, Entity entity, Policy policy, ConfigKey<?> config) {
PolicyConfigSummary summary = policyConfigSummary(utils, entity, policy, config);
// TODO
// if (!entity.getApplicationId().equals(application.getInstance().getId()))
// throw new IllegalStateException("Application "+application+" does not match app "+entity.getApplication()+" of "+entity);
return summary;
}
public static PolicyConfigSummary policyConfigSummary(BrooklynRestResourceUtils utils, Entity entity, Policy policy, ConfigKey<?> config) {
String applicationUri = "/v1/applications/" + entity.getApplicationId();
String entityUri = applicationUri + "/entities/" + entity.getId();
String policyUri = entityUri + "/policies/" + policy.getId();
Map<String, URI> links = ImmutableMap.<String, URI>builder()
.put("self", URI.create(policyUri + "/config/" + config.getName()))
.put("application", URI.create(applicationUri))
.put("entity", URI.create(entityUri))
.put("policy", URI.create(policyUri))
.build();
return new PolicyConfigSummary(config.getName(), config.getTypeName(), config.getDescription(),
PolicyConfigResource.getStringValueForDisplay(utils, policy, config.getDefaultValue()),
config.isReconfigurable(),
links);
}
}