You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/02/18 16:47:25 UTC
[07/34] brooklyn-server git commit: [BROOKLYN-183] REST API using CXF
JAX-RS 2.0 implementation
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/security/provider/LdapSecurityProvider.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/security/provider/LdapSecurityProvider.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/security/provider/LdapSecurityProvider.java
deleted file mode 100644
index d3636e9..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/security/provider/LdapSecurityProvider.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.security.provider;
-
-import java.util.Hashtable;
-
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.naming.directory.InitialDirContext;
-import javax.servlet.http.HttpSession;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.CharMatcher;
-
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.config.StringConfigMap;
-import org.apache.brooklyn.rest.BrooklynWebConfig;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.text.Strings;
-
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * A {@link SecurityProvider} implementation that relies on LDAP to authenticate.
- *
- * @author Peter Veentjer.
- */
-public class LdapSecurityProvider extends AbstractSecurityProvider implements SecurityProvider {
-
- public static final Logger LOG = LoggerFactory.getLogger(LdapSecurityProvider.class);
-
- public static final String LDAP_CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
-
- private final String ldapUrl;
- private final String ldapRealm;
- private final String organizationUnit;
-
- public LdapSecurityProvider(ManagementContext mgmt) {
- StringConfigMap properties = mgmt.getConfig();
- ldapUrl = properties.getConfig(BrooklynWebConfig.LDAP_URL);
- Strings.checkNonEmpty(ldapUrl, "LDAP security provider configuration missing required property "+BrooklynWebConfig.LDAP_URL);
- ldapRealm = CharMatcher.isNot('"').retainFrom(properties.getConfig(BrooklynWebConfig.LDAP_REALM));
- Strings.checkNonEmpty(ldapRealm, "LDAP security provider configuration missing required property "+BrooklynWebConfig.LDAP_REALM);
-
- if(Strings.isBlank(properties.getConfig(BrooklynWebConfig.LDAP_OU))) {
- LOG.info("Setting LDAP ou attribute to: Users");
- organizationUnit = "Users";
- } else {
- organizationUnit = CharMatcher.isNot('"').retainFrom(properties.getConfig(BrooklynWebConfig.LDAP_OU));
- }
- Strings.checkNonEmpty(ldapRealm, "LDAP security provider configuration missing required property "+BrooklynWebConfig.LDAP_OU);
- }
-
- public LdapSecurityProvider(String ldapUrl, String ldapRealm, String organizationUnit) {
- this.ldapUrl = ldapUrl;
- this.ldapRealm = ldapRealm;
- this.organizationUnit = organizationUnit;
- }
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- @Override
- public boolean authenticate(HttpSession session, String user, String password) {
- if (session==null || user==null) return false;
- checkCanLoad();
-
- Hashtable env = new Hashtable();
- env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
- env.put(Context.PROVIDER_URL, ldapUrl);
- env.put(Context.SECURITY_AUTHENTICATION, "simple");
- env.put(Context.SECURITY_PRINCIPAL, getUserDN(user));
- env.put(Context.SECURITY_CREDENTIALS, password);
-
- try {
- new InitialDirContext(env);
- return allow(session, user);
- } catch (NamingException e) {
- return false;
- }
- }
-
- /**
- * Returns the LDAP path for the user
- *
- * @param user
- * @return String
- */
- protected String getUserDN(String user) {
- List<String> domain = Lists.transform(Arrays.asList(ldapRealm.split("\\.")), new Function<String, String>() {
- @Override
- public String apply(String input) {
- return "dc=" + input;
- }
- });
-
- String dc = Joiner.on(",").join(domain).toLowerCase();
- return "cn=" + user + ",ou=" + organizationUnit + "," + dc;
- }
-
- static boolean triedLoading = false;
- public synchronized static void checkCanLoad() {
- if (triedLoading) return;
- try {
- Class.forName(LDAP_CONTEXT_FACTORY);
- triedLoading = true;
- } catch (Throwable e) {
- throw Exceptions.propagate(new ClassNotFoundException("Unable to load LDAP classes ("+LDAP_CONTEXT_FACTORY+") required for Brooklyn LDAP security provider"));
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/security/provider/SecurityProvider.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/security/provider/SecurityProvider.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/security/provider/SecurityProvider.java
deleted file mode 100644
index 57d1400..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/security/provider/SecurityProvider.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.security.provider;
-
-import javax.servlet.http.HttpSession;
-
-/**
- * The SecurityProvider is responsible for doing authentication.
- *
- * A class should either have a constructor receiving a BrooklynProperties or it should have a no-arg constructor.
- */
-public interface SecurityProvider {
-
- public boolean isAuthenticated(HttpSession session);
-
- public boolean authenticate(HttpSession session, String user, String password);
-
- public boolean logout(HttpSession session);
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/AccessTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/AccessTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/AccessTransformer.java
deleted file mode 100644
index 62e698e..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/AccessTransformer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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 org.apache.brooklyn.core.mgmt.internal.AccessManager;
-import org.apache.brooklyn.rest.domain.AccessSummary;
-
-import com.google.common.collect.ImmutableMap;
-
-/**
- * @author Adam Lowe
- */
-public class AccessTransformer {
-
- public static AccessSummary accessSummary(AccessManager manager) {
- String selfUri = "/v1/access/";
- ImmutableMap<String, URI> links = ImmutableMap.of("self", URI.create(selfUri));
-
- return new AccessSummary(manager.isLocationProvisioningAllowed(), links);
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/ApplicationTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/ApplicationTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/ApplicationTransformer.java
deleted file mode 100644
index 8f3ddbc..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/ApplicationTransformer.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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 static org.apache.brooklyn.rest.domain.Status.ACCEPTED;
-import static org.apache.brooklyn.rest.domain.Status.RUNNING;
-import static org.apache.brooklyn.rest.domain.Status.STARTING;
-import static org.apache.brooklyn.rest.domain.Status.STOPPED;
-import static org.apache.brooklyn.rest.domain.Status.STOPPING;
-import static org.apache.brooklyn.rest.domain.Status.UNKNOWN;
-import static org.apache.brooklyn.rest.domain.Status.DESTROYED;
-import static org.apache.brooklyn.rest.domain.Status.ERROR;
-
-import java.net.URI;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-import org.apache.brooklyn.api.entity.Application;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.core.entity.Attributes;
-import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.rest.domain.ApplicationSpec;
-import org.apache.brooklyn.rest.domain.ApplicationSummary;
-import org.apache.brooklyn.rest.domain.Status;
-
-import com.google.common.base.Function;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableMap;
-
-public class ApplicationTransformer {
-
- public static final Function<? super Application, ApplicationSummary> FROM_APPLICATION = new Function<Application, ApplicationSummary>() {
- @Override
- public ApplicationSummary apply(Application input) {
- return summaryFromApplication(input);
- }
- };
-
- public static Status statusFromApplication(Application application) {
- if (application == null) return UNKNOWN;
- Lifecycle state = application.getAttribute(Attributes.SERVICE_STATE_ACTUAL);
- if (state != null) return statusFromLifecycle(state);
- Boolean up = application.getAttribute(Startable.SERVICE_UP);
- if (up != null && up.booleanValue()) return RUNNING;
- return UNKNOWN;
- }
-
-
- public static Status statusFromLifecycle(Lifecycle state) {
- if (state == null) return UNKNOWN;
- switch (state) {
- case CREATED:
- return ACCEPTED;
- case STARTING:
- return STARTING;
- case RUNNING:
- return RUNNING;
- case STOPPING:
- return STOPPING;
- case STOPPED:
- return STOPPED;
- case DESTROYED:
- return DESTROYED;
- case ON_FIRE:
- return ERROR;
- default:
- return UNKNOWN;
- }
- }
-
- public static ApplicationSpec specFromApplication(Application application) {
- Collection<String> locations = Collections2.transform(application.getLocations(), new Function<Location, String>() {
- @Override
- @Nullable
- public String apply(@Nullable Location input) {
- return input.getId();
- }
- });
- // okay to have entities and config as null, as this comes from a real instance
- return new ApplicationSpec(application.getDisplayName(), application.getEntityType().getName(),
- null, locations, null);
- }
-
- public static ApplicationSummary summaryFromApplication(Application application) {
- Map<String, URI> links;
- if (application.getId() == null) {
- links = Collections.emptyMap();
- } else {
- links = ImmutableMap.of(
- "self", URI.create("/v1/applications/" + application.getId()),
- "entities", URI.create("/v1/applications/" + application.getId() + "/entities"));
- }
-
- return new ApplicationSummary(application.getId(), specFromApplication(application), statusFromApplication(application), links);
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/BrooklynFeatureTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/BrooklynFeatureTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/BrooklynFeatureTransformer.java
deleted file mode 100644
index c8477cf..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/BrooklynFeatureTransformer.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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 com.google.common.base.Function;
-
-import org.apache.brooklyn.core.BrooklynVersion.BrooklynFeature;
-import org.apache.brooklyn.rest.domain.BrooklynFeatureSummary;
-
-public class BrooklynFeatureTransformer {
-
- public static final Function<BrooklynFeature, BrooklynFeatureSummary> FROM_FEATURE = new Function<BrooklynFeature, BrooklynFeatureSummary>() {
- @Override
- public BrooklynFeatureSummary apply(BrooklynFeature feature) {
- return featureSummary(feature);
- }
- };
-
- public static BrooklynFeatureSummary featureSummary(BrooklynFeature feature) {
- return new BrooklynFeatureSummary(
- feature.getName(),
- feature.getSymbolicName(),
- feature.getVersion(),
- feature.getLastModified(),
- feature.getAdditionalData());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/CatalogTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/CatalogTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/CatalogTransformer.java
deleted file mode 100644
index 514d9c9..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/CatalogTransformer.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * 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 java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
-import org.apache.brooklyn.api.effector.Effector;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.entity.EntityType;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationSpec;
-import org.apache.brooklyn.api.objs.SpecParameter;
-import org.apache.brooklyn.api.policy.Policy;
-import org.apache.brooklyn.api.policy.PolicySpec;
-import org.apache.brooklyn.api.sensor.Sensor;
-import org.apache.brooklyn.core.entity.EntityDynamicType;
-import org.apache.brooklyn.core.mgmt.BrooklynTags;
-import org.apache.brooklyn.core.objs.BrooklynTypes;
-import org.apache.brooklyn.rest.domain.CatalogEntitySummary;
-import org.apache.brooklyn.rest.domain.CatalogItemSummary;
-import org.apache.brooklyn.rest.domain.CatalogLocationSummary;
-import org.apache.brooklyn.rest.domain.CatalogPolicySummary;
-import org.apache.brooklyn.rest.domain.EffectorSummary;
-import org.apache.brooklyn.rest.domain.EntityConfigSummary;
-import org.apache.brooklyn.rest.domain.LocationConfigSummary;
-import org.apache.brooklyn.rest.domain.PolicyConfigSummary;
-import org.apache.brooklyn.rest.domain.SensorSummary;
-import org.apache.brooklyn.rest.domain.SummaryComparators;
-import org.apache.brooklyn.rest.util.BrooklynRestResourceUtils;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.collections.MutableSet;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.javalang.Reflections;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-
-public class CatalogTransformer {
-
- private static final org.slf4j.Logger log = LoggerFactory.getLogger(CatalogTransformer.class);
-
- public static <T extends Entity> CatalogEntitySummary catalogEntitySummary(BrooklynRestResourceUtils b, CatalogItem<T,EntitySpec<? extends T>> item) {
- Set<EntityConfigSummary> config = Sets.newLinkedHashSet();
- Set<SensorSummary> sensors = Sets.newTreeSet(SummaryComparators.nameComparator());
- Set<EffectorSummary> effectors = Sets.newTreeSet(SummaryComparators.nameComparator());
-
- EntitySpec<?> spec = null;
- try {
- @SuppressWarnings({ "unchecked", "rawtypes" })
- // the raw type isn't needed according to eclipse IDE, but jenkins maven fails without it;
- // must be a java version or compiler thing. don't remove even though it looks okay without it!
- EntitySpec<?> specRaw = (EntitySpec<?>) b.getCatalog().createSpec((CatalogItem) item);
- spec = specRaw;
- EntityDynamicType typeMap = BrooklynTypes.getDefinedEntityType(spec.getType());
- EntityType type = typeMap.getSnapshot();
-
- AtomicInteger paramPriorityCnt = new AtomicInteger();
- for (SpecParameter<?> input: spec.getParameters()) {
- config.add(EntityTransformer.entityConfigSummary(input, paramPriorityCnt));
- if (input.getSensor()!=null)
- sensors.add(SensorTransformer.sensorSummaryForCatalog(input.getSensor()));
- }
- for (Sensor<?> x: type.getSensors())
- sensors.add(SensorTransformer.sensorSummaryForCatalog(x));
- for (Effector<?> x: type.getEffectors())
- effectors.add(EffectorTransformer.effectorSummaryForCatalog(x));
-
- } catch (Exception e) {
- Exceptions.propagateIfFatal(e);
-
- // templates with multiple entities can't have spec created in the manner above; just ignore
- if (item.getCatalogItemType()==CatalogItemType.ENTITY) {
- log.warn("Unable to create spec for "+item+": "+e, e);
- }
- if (log.isTraceEnabled()) {
- log.trace("Unable to create spec for "+item+": "+e, e);
- }
- }
-
- return new CatalogEntitySummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(),
- item.getJavaType(), item.getPlanYaml(),
- item.getDescription(), tidyIconLink(b, item, item.getIconUrl()),
- makeTags(spec, item), config, sensors, effectors,
- item.isDeprecated(), makeLinks(item));
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- public static CatalogItemSummary catalogItemSummary(BrooklynRestResourceUtils b, CatalogItem item) {
- try {
- switch (item.getCatalogItemType()) {
- case TEMPLATE:
- case ENTITY:
- return catalogEntitySummary(b, item);
- case POLICY:
- return catalogPolicySummary(b, item);
- case LOCATION:
- return catalogLocationSummary(b, item);
- default:
- log.warn("Unexpected catalog item type when getting self link (supplying generic item): "+item.getCatalogItemType()+" "+item);
- }
- } catch (Exception e) {
- Exceptions.propagateIfFatal(e);
- log.warn("Invalid item in catalog when converting REST summaries (supplying generic item), at "+item+": "+e, e);
- }
- return new CatalogItemSummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(),
- item.getJavaType(), item.getPlanYaml(),
- item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), item.tags().getTags(), item.isDeprecated(), makeLinks(item));
- }
-
- public static CatalogPolicySummary catalogPolicySummary(BrooklynRestResourceUtils b, CatalogItem<? extends Policy,PolicySpec<?>> item) {
- Set<PolicyConfigSummary> config = ImmutableSet.of();
- return new CatalogPolicySummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(),
- item.getJavaType(), item.getPlanYaml(),
- item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), config,
- item.tags().getTags(), item.isDeprecated(), makeLinks(item));
- }
-
- public static CatalogLocationSummary catalogLocationSummary(BrooklynRestResourceUtils b, CatalogItem<? extends Location,LocationSpec<?>> item) {
- Set<LocationConfigSummary> config = ImmutableSet.of();
- return new CatalogLocationSummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(),
- item.getJavaType(), item.getPlanYaml(),
- item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), config,
- item.tags().getTags(), item.isDeprecated(), makeLinks(item));
- }
-
- protected static Map<String, URI> makeLinks(CatalogItem<?,?> item) {
- return MutableMap.<String, URI>of().addIfNotNull("self", URI.create(getSelfLink(item)));
- }
-
- protected static String getSelfLink(CatalogItem<?,?> item) {
- String itemId = item.getId();
- switch (item.getCatalogItemType()) {
- case TEMPLATE:
- return "/v1/applications/" + itemId + "/" + item.getVersion();
- case ENTITY:
- return "/v1/entities/" + itemId + "/" + item.getVersion();
- case POLICY:
- return "/v1/policies/" + itemId + "/" + item.getVersion();
- case LOCATION:
- return "/v1/locations/" + itemId + "/" + item.getVersion();
- default:
- log.warn("Unexpected catalog item type when getting self link (not supplying self link): "+item.getCatalogItemType()+" "+item);
- return null;
- }
- }
- private static String tidyIconLink(BrooklynRestResourceUtils b, CatalogItem<?,?> item, String iconUrl) {
- if (b.isUrlServerSideAndSafe(iconUrl))
- return "/v1/catalog/icon/"+item.getSymbolicName() + "/" + item.getVersion();
- return iconUrl;
- }
-
- private static Set<Object> makeTags(EntitySpec<?> spec, CatalogItem<?, ?> item) {
- // Combine tags on item with an InterfacesTag.
- Set<Object> tags = MutableSet.copyOf(item.tags().getTags());
- if (spec != null) {
- Class<?> type;
- if (spec.getImplementation() != null) {
- type = spec.getImplementation();
- } else {
- type = spec.getType();
- }
- if (type != null) {
- tags.add(new BrooklynTags.TraitsTag(Reflections.getAllInterfaces(type)));
- }
- }
- return tags;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EffectorTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EffectorTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EffectorTransformer.java
deleted file mode 100644
index a434659..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EffectorTransformer.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * 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.Set;
-
-import javax.annotation.Nullable;
-
-import org.apache.brooklyn.api.effector.Effector;
-import org.apache.brooklyn.api.effector.ParameterType;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.rest.domain.EffectorSummary;
-import org.apache.brooklyn.rest.domain.EffectorSummary.ParameterSummary;
-import org.apache.brooklyn.rest.util.WebResourceUtils;
-import org.apache.brooklyn.util.core.task.Tasks;
-import org.apache.brooklyn.util.core.task.ValueResolver;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.guava.Maybe;
-
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-
-public class EffectorTransformer {
-
- public static EffectorSummary effectorSummary(final Entity entity, Effector<?> effector) {
- String applicationUri = "/v1/applications/" + entity.getApplicationId();
- String entityUri = applicationUri + "/entities/" + entity.getId();
- return new EffectorSummary(effector.getName(), effector.getReturnTypeName(),
- ImmutableSet.copyOf(Iterables.transform(effector.getParameters(),
- new Function<ParameterType<?>, EffectorSummary.ParameterSummary<?>>() {
- @Override
- public EffectorSummary.ParameterSummary<?> apply(@Nullable ParameterType<?> parameterType) {
- return parameterSummary(entity, parameterType);
- }
- })), effector.getDescription(), ImmutableMap.of(
- "self", URI.create(entityUri + "/effectors/" + effector.getName()),
- "entity", URI.create(entityUri),
- "application", URI.create(applicationUri)
- ));
- }
-
- public static EffectorSummary effectorSummaryForCatalog(Effector<?> effector) {
- Set<EffectorSummary.ParameterSummary<?>> parameters = ImmutableSet.copyOf(Iterables.transform(effector.getParameters(),
- new Function<ParameterType<?>, EffectorSummary.ParameterSummary<?>>() {
- @Override
- public EffectorSummary.ParameterSummary<?> apply(ParameterType<?> parameterType) {
- return parameterSummary(null, parameterType);
- }
- }));
- return new EffectorSummary(effector.getName(),
- effector.getReturnTypeName(), parameters, effector.getDescription(), null);
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected static EffectorSummary.ParameterSummary<?> parameterSummary(Entity entity, ParameterType<?> parameterType) {
- try {
- Maybe<?> defaultValue = Tasks.resolving(parameterType.getDefaultValue()).as(parameterType.getParameterClass())
- .context(entity).timeout(ValueResolver.REAL_QUICK_WAIT).getMaybe();
- return new ParameterSummary(parameterType.getName(), parameterType.getParameterClassName(),
- parameterType.getDescription(),
- WebResourceUtils.getValueForDisplay(defaultValue.orNull(), true, false));
- } catch (Exception e) {
- throw Exceptions.propagate(e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EntityTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EntityTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EntityTransformer.java
deleted file mode 100644
index f5079b9..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EntityTransformer.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * 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 static com.google.common.collect.Iterables.transform;
-
-import java.lang.reflect.Field;
-import java.net.URI;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.brooklyn.api.catalog.CatalogConfig;
-import org.apache.brooklyn.api.entity.Application;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.objs.SpecParameter;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.render.RendererHints;
-import org.apache.brooklyn.rest.domain.EntityConfigSummary;
-import org.apache.brooklyn.rest.domain.EntitySummary;
-import org.apache.brooklyn.rest.util.WebResourceUtils;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.net.URLParamEncoder;
-
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-/**
- * @author Adam Lowe
- */
-public class EntityTransformer {
-
- public static final Function<? super Entity, EntitySummary> FROM_ENTITY = new Function<Entity, EntitySummary>() {
- @Override
- public EntitySummary apply(Entity entity) {
- return EntityTransformer.entitySummary(entity);
- }
- };
-
- public static EntitySummary entitySummary(Entity entity) {
- String applicationUri = "/v1/applications/" + entity.getApplicationId();
- String entityUri = applicationUri + "/entities/" + entity.getId();
- ImmutableMap.Builder<String, URI> lb = ImmutableMap.<String, URI>builder()
- .put("self", URI.create(entityUri));
- if (entity.getParent()!=null)
- lb.put("parent", URI.create(applicationUri+"/entities/"+entity.getParent().getId()));
- String type = entity.getEntityType().getName();
- lb.put("application", URI.create(applicationUri))
- .put("children", URI.create(entityUri + "/children"))
- .put("config", URI.create(entityUri + "/config"))
- .put("sensors", URI.create(entityUri + "/sensors"))
- .put("effectors", URI.create(entityUri + "/effectors"))
- .put("policies", URI.create(entityUri + "/policies"))
- .put("activities", URI.create(entityUri + "/activities"))
- .put("locations", URI.create(entityUri + "/locations"))
- .put("tags", URI.create(entityUri + "/tags"))
- .put("expunge", URI.create(entityUri + "/expunge"))
- .put("rename", URI.create(entityUri + "/name"))
- .put("spec", URI.create(entityUri + "/spec"))
- ;
-
- if (entity.getCatalogItemId() != null) {
- lb.put("catalog", URI.create("/v1/catalog/entities/" + WebResourceUtils.getPathFromVersionedId(entity.getCatalogItemId())));
- }
-
- if (entity.getIconUrl()!=null)
- lb.put("iconUrl", URI.create(entityUri + "/icon"));
-
- return new EntitySummary(entity.getId(), entity.getDisplayName(), type, entity.getCatalogItemId(), lb.build());
- }
-
- public static List<EntitySummary> entitySummaries(Iterable<? extends Entity> entities) {
- return Lists.newArrayList(transform(
- entities,
- new Function<Entity, EntitySummary>() {
- @Override
- public EntitySummary apply(Entity entity) {
- return EntityTransformer.entitySummary(entity);
- }
- }));
- }
-
- protected static EntityConfigSummary entityConfigSummary(ConfigKey<?> config, String label, Double priority, Map<String, URI> links) {
- Map<String, URI> mapOfLinks = links==null ? null : ImmutableMap.copyOf(links);
- return new EntityConfigSummary(config, label, priority, mapOfLinks);
- }
- /** generates a representation for a given config key,
- * with label inferred from annoation in the entity class,
- * and links pointing to the entity and the applicaiton */
- public static EntityConfigSummary entityConfigSummary(Entity entity, ConfigKey<?> config) {
- /*
- * following code nearly there to get the @CatalogConfig annotation
- * in the class and use that to populate a label
- */
-
-// EntityDynamicType typeMap =
-// ((AbstractEntity)entity).getMutableEntityType();
-// // above line works if we can cast; line below won't work, but there should some way
-// // to get back the handle to the spec from an entity local, which then *would* work
-// EntityTypes.getDefinedEntityType(entity.getClass());
-
-// String label = typeMap.getConfigKeyField(config.getName());
- String label = null;
- Double priority = null;
-
- String applicationUri = "/v1/applications/" + entity.getApplicationId();
- String entityUri = applicationUri + "/entities/" + entity.getId();
- String selfUri = entityUri + "/config/" + URLParamEncoder.encode(config.getName());
-
- MutableMap.Builder<String, URI> lb = MutableMap.<String, URI>builder()
- .put("self", URI.create(selfUri))
- .put("application", URI.create(applicationUri))
- .put("entity", URI.create(entityUri))
- .put("action:json", URI.create(selfUri));
-
- Iterable<RendererHints.NamedAction> hints = Iterables.filter(RendererHints.getHintsFor(config), RendererHints.NamedAction.class);
- for (RendererHints.NamedAction na : hints) {
- SensorTransformer.addNamedAction(lb, na, entity.getConfig(config), config, entity);
- }
-
- return entityConfigSummary(config, label, priority, lb.build());
- }
-
- public static String applicationUri(Application entity) {
- return "/v1/applications/" + entity.getApplicationId();
- }
-
- public static String entityUri(Entity entity) {
- return applicationUri(entity.getApplication()) + "/entities/" + entity.getId();
- }
-
- public static EntityConfigSummary entityConfigSummary(ConfigKey<?> config, Field configKeyField) {
- CatalogConfig catalogConfig = configKeyField!=null ? configKeyField.getAnnotation(CatalogConfig.class) : null;
- String label = catalogConfig==null ? null : catalogConfig.label();
- Double priority = catalogConfig==null ? null : catalogConfig.priority();
- return entityConfigSummary(config, label, priority, null);
- }
-
- public static EntityConfigSummary entityConfigSummary(SpecParameter<?> input, AtomicInteger paramPriorityCnt) {
- // Increment the priority because the config container is a set. Server-side we are using an ordered set
- // which results in correctly ordered items on the wire (as a list). Clients which use the java bindings
- // though will push the items in an unordered set - so give them means to recover the correct order.
- Double priority = input.isPinned() ? Double.valueOf(paramPriorityCnt.incrementAndGet()) : null;
- return entityConfigSummary(input.getConfigKey(), input.getLabel(), priority, null);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/HighAvailabilityTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/HighAvailabilityTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/HighAvailabilityTransformer.java
deleted file mode 100644
index 41b0f22..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/HighAvailabilityTransformer.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.mgmt.ha.ManagementNodeSyncRecord;
-import org.apache.brooklyn.api.mgmt.ha.ManagementPlaneSyncRecord;
-import org.apache.brooklyn.rest.domain.HighAvailabilitySummary;
-import org.apache.brooklyn.rest.domain.HighAvailabilitySummary.HaNodeSummary;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-
-public class HighAvailabilityTransformer {
-
- public static HighAvailabilitySummary highAvailabilitySummary(String ownNodeId, ManagementPlaneSyncRecord memento) {
- Map<String, HaNodeSummary> nodes = Maps.newLinkedHashMap();
- for (Map.Entry<String, ManagementNodeSyncRecord> entry : memento.getManagementNodes().entrySet()) {
- nodes.put(entry.getKey(), haNodeSummary(entry.getValue()));
- }
-
- // TODO What links?
- ImmutableMap.Builder<String, URI> lb = ImmutableMap.<String, URI>builder();
-
- return new HighAvailabilitySummary(ownNodeId, memento.getMasterNodeId(), nodes, lb.build());
- }
-
- public static HaNodeSummary haNodeSummary(ManagementNodeSyncRecord memento) {
- String status = memento.getStatus() == null ? null : memento.getStatus().toString();
- return new HaNodeSummary(memento.getNodeId(), memento.getUri(), status, memento.getLocalTimestamp(), memento.getRemoteTimestamp());
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/LocationTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/LocationTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/LocationTransformer.java
deleted file mode 100644
index 71639e7..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/LocationTransformer.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * 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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationDefinition;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.config.Sanitizer;
-import org.apache.brooklyn.core.location.BasicLocationDefinition;
-import org.apache.brooklyn.core.location.LocationConfigKeys;
-import org.apache.brooklyn.core.location.internal.LocationInternal;
-import org.apache.brooklyn.rest.domain.LocationSummary;
-import org.apache.brooklyn.rest.util.WebResourceUtils;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.guava.Maybe;
-import org.apache.brooklyn.util.text.Strings;
-
-import com.google.common.collect.ImmutableMap;
-
-public class LocationTransformer {
-
- @SuppressWarnings("unused")
- private static final Logger log = LoggerFactory.getLogger(LocationTransformer.LocationDetailLevel.class);
-
- public static enum LocationDetailLevel { NONE, LOCAL_EXCLUDING_SECRET, FULL_EXCLUDING_SECRET, FULL_INCLUDING_SECRET }
-
- /** @deprecated since 0.7.0 use method taking management context and detail specifier */
- @Deprecated
- public static LocationSummary newInstance(String id, org.apache.brooklyn.rest.domain.LocationSpec locationSpec) {
- return newInstance(null, id, locationSpec, LocationDetailLevel.LOCAL_EXCLUDING_SECRET);
- }
- @SuppressWarnings("deprecation")
- public static LocationSummary newInstance(ManagementContext mgmt, String id, org.apache.brooklyn.rest.domain.LocationSpec locationSpec, LocationDetailLevel level) {
- // TODO: Remove null checks on mgmt when newInstance(String, LocationSpec) is deleted
- Map<String, ?> config = locationSpec.getConfig();
- if (mgmt != null && (level==LocationDetailLevel.FULL_EXCLUDING_SECRET || level==LocationDetailLevel.FULL_INCLUDING_SECRET)) {
- LocationDefinition ld = new BasicLocationDefinition(id, locationSpec.getName(), locationSpec.getSpec(), locationSpec.getConfig());
- Location ll = mgmt.getLocationRegistry().resolve(ld, false, null).orNull();
- if (ll!=null) config = ((LocationInternal)ll).config().getBag().getAllConfig();
- } else if (level==LocationDetailLevel.LOCAL_EXCLUDING_SECRET) {
- // get displayName
- if (!config.containsKey(LocationConfigKeys.DISPLAY_NAME.getName()) && mgmt!=null) {
- LocationDefinition ld = new BasicLocationDefinition(id, locationSpec.getName(), locationSpec.getSpec(), locationSpec.getConfig());
- Location ll = mgmt.getLocationRegistry().resolve(ld, false, null).orNull();
- if (ll!=null) {
- Map<String, Object> configExtra = ((LocationInternal)ll).config().getBag().getAllConfig();
- if (configExtra.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) {
- ConfigBag configNew = ConfigBag.newInstance(config);
- configNew.configure(LocationConfigKeys.DISPLAY_NAME, (String)configExtra.get(LocationConfigKeys.DISPLAY_NAME.getName()));
- config = configNew.getAllConfig();
- }
- }
- }
- }
- return new LocationSummary(
- id,
- locationSpec.getName(),
- locationSpec.getSpec(),
- null,
- copyConfig(config, level),
- ImmutableMap.of("self", URI.create("/v1/locations/" + id)));
- }
-
- /** @deprecated since 0.7.0 use method taking management context and detail specifier */
- @Deprecated
- public static LocationSummary newInstance(LocationDefinition l) {
- return newInstance(null, l, LocationDetailLevel.LOCAL_EXCLUDING_SECRET);
- }
-
- public static LocationSummary newInstance(ManagementContext mgmt, LocationDefinition l, LocationDetailLevel level) {
- // TODO: Can remove null checks on mgmt when newInstance(LocationDefinition) is deleted
- Map<String, Object> config = l.getConfig();
- if (mgmt != null && (level==LocationDetailLevel.FULL_EXCLUDING_SECRET || level==LocationDetailLevel.FULL_INCLUDING_SECRET)) {
- Location ll = mgmt.getLocationRegistry().resolve(l, false, null).orNull();
- if (ll!=null) config = ((LocationInternal)ll).config().getBag().getAllConfig();
- } else if (level==LocationDetailLevel.LOCAL_EXCLUDING_SECRET) {
- // get displayName
- if (mgmt != null && !config.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) {
- Location ll = mgmt.getLocationRegistry().resolve(l, false, null).orNull();
- if (ll!=null) {
- Map<String, Object> configExtra = ((LocationInternal)ll).config().getBag().getAllConfig();
- if (configExtra.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) {
- ConfigBag configNew = ConfigBag.newInstance(config);
- configNew.configure(LocationConfigKeys.DISPLAY_NAME, (String)configExtra.get(LocationConfigKeys.DISPLAY_NAME.getName()));
- config = configNew.getAllConfig();
- }
- }
- }
- }
-
- return new LocationSummary(
- l.getId(),
- l.getName(),
- l.getSpec(),
- null,
- copyConfig(config, level),
- ImmutableMap.of("self", URI.create("/v1/locations/" + l.getId())));
- }
-
- private static Map<String, ?> copyConfig(Map<String,?> entries, LocationDetailLevel level) {
- ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder();
- if (level!=LocationDetailLevel.NONE) {
- for (Map.Entry<String,?> entry : entries.entrySet()) {
- if (level==LocationDetailLevel.FULL_INCLUDING_SECRET || !Sanitizer.IS_SECRET_PREDICATE.apply(entry.getKey())) {
- builder.put(entry.getKey(), WebResourceUtils.getValueForDisplay(entry.getValue(), true, false));
- }
- }
- }
- return builder.build();
- }
-
- public static LocationSummary newInstance(ManagementContext mgmt, Location l, LocationDetailLevel level) {
- String spec = null;
- String specId = null;
- Location lp = l;
- while (lp!=null && (spec==null || specId==null)) {
- // walk parent locations
- // TODO not sure this is the best strategy, or if it's needed, as the spec config is inherited anyway...
- if (spec==null) {
- Maybe<Object> originalSpec = ((LocationInternal)lp).config().getRaw(LocationInternal.ORIGINAL_SPEC);
- if (originalSpec.isPresent())
- spec = Strings.toString(originalSpec.get());
- }
- if (specId==null) {
- LocationDefinition ld = null;
- // prefer looking it up by name as this loads the canonical definition
- if (spec!=null) ld = mgmt.getLocationRegistry().getDefinedLocationByName(spec);
- if (ld==null && spec!=null && spec.startsWith("named:"))
- ld = mgmt.getLocationRegistry().getDefinedLocationByName(Strings.removeFromStart(spec, "named:"));
- if (ld==null) ld = mgmt.getLocationRegistry().getDefinedLocationById(lp.getId());
- if (ld!=null) {
- if (spec==null) spec = ld.getSpec();
- specId = ld.getId();
- }
- }
- lp = lp.getParent();
- }
- if (specId==null && spec!=null) {
- // fall back to attempting to lookup it
- Location ll = mgmt.getLocationRegistry().resolve(spec, false, null).orNull();
- if (ll!=null) specId = ll.getId();
- }
-
- Map<String, Object> configOrig;
- if (level == LocationDetailLevel.LOCAL_EXCLUDING_SECRET) {
- configOrig = MutableMap.copyOf(((LocationInternal)l).config().getLocalBag().getAllConfig());
- } else {
- configOrig = MutableMap.copyOf(((LocationInternal)l).config().getBag().getAllConfig());
- }
- if (level==LocationDetailLevel.LOCAL_EXCLUDING_SECRET) {
- // for LOCAL, also get the display name
- if (!configOrig.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) {
- Map<String, Object> configExtra = ((LocationInternal)l).config().getBag().getAllConfig();
- if (configExtra.containsKey(LocationConfigKeys.DISPLAY_NAME.getName()))
- configOrig.put(LocationConfigKeys.DISPLAY_NAME.getName(), configExtra.get(LocationConfigKeys.DISPLAY_NAME.getName()));
- }
- }
- Map<String, ?> config = level==LocationDetailLevel.NONE ? null : copyConfig(configOrig, level);
-
- return new LocationSummary(
- l.getId(),
- l.getDisplayName(),
- spec,
- l.getClass().getName(),
- config,
- MutableMap.of("self", URI.create("/v1/locations/" + l.getId()))
- .addIfNotNull("parent", l.getParent()!=null ? URI.create("/v1/locations/"+l.getParent().getId()) : null)
- .addIfNotNull("spec", specId!=null ? URI.create("/v1/locations/"+specId) : null)
- .asUnmodifiable() );
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/PolicyTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/PolicyTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/PolicyTransformer.java
deleted file mode 100644
index b29e010..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/PolicyTransformer.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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);
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/SensorTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/SensorTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/SensorTransformer.java
deleted file mode 100644
index b06fd81..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/SensorTransformer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * 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 org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.sensor.AttributeSensor;
-import org.apache.brooklyn.api.sensor.Sensor;
-import org.apache.brooklyn.core.config.render.RendererHints;
-import org.apache.brooklyn.rest.domain.SensorSummary;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.net.URLParamEncoder;
-import org.apache.brooklyn.util.text.Strings;
-
-import com.google.common.collect.Iterables;
-
-public class SensorTransformer {
-
- private static final Logger log = LoggerFactory.getLogger(SensorTransformer.class);
-
- public static SensorSummary sensorSummaryForCatalog(Sensor<?> sensor) {
- return new SensorSummary(sensor.getName(), sensor.getTypeName(),
- sensor.getDescription(), null);
- }
-
- public static SensorSummary sensorSummary(Entity entity, Sensor<?> sensor) {
- String applicationUri = "/v1/applications/" + entity.getApplicationId();
- String entityUri = applicationUri + "/entities/" + entity.getId();
- String selfUri = entityUri + "/sensors/" + URLParamEncoder.encode(sensor.getName());
-
- MutableMap.Builder<String, URI> lb = MutableMap.<String, URI>builder()
- .put("self", URI.create(selfUri))
- .put("application", URI.create(applicationUri))
- .put("entity", URI.create(entityUri))
- .put("action:json", URI.create(selfUri));
-
- if (sensor instanceof AttributeSensor) {
- Iterable<RendererHints.NamedAction> hints = Iterables.filter(RendererHints.getHintsFor((AttributeSensor<?>)sensor), RendererHints.NamedAction.class);
- for (RendererHints.NamedAction na : hints) addNamedAction(lb, na , entity, sensor);
- }
-
- return new SensorSummary(sensor.getName(), sensor.getTypeName(), sensor.getDescription(), lb.build());
- }
-
- private static <T> void addNamedAction(MutableMap.Builder<String, URI> lb, RendererHints.NamedAction na , Entity entity, Sensor<T> sensor) {
- addNamedAction(lb, na, entity.getAttribute( ((AttributeSensor<T>) sensor) ), sensor, entity);
- }
-
- @SuppressWarnings("unchecked")
- static <T> void addNamedAction(MutableMap.Builder<String, URI> lb, RendererHints.NamedAction na, T value, Object context, Entity contextEntity) {
- if (na instanceof RendererHints.NamedActionWithUrl) {
- try {
- String v = ((RendererHints.NamedActionWithUrl<T>) na).getUrlFromValue(value);
- if (Strings.isNonBlank(v)) {
- String action = na.getActionName().toLowerCase();
- lb.putIfAbsent("action:"+action, URI.create(v));
- }
- } catch (Exception e) {
- Exceptions.propagateIfFatal(e);
- log.warn("Unable to make action "+na+" from "+context+" on "+contextEntity+": "+e, e);
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6f624c78/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/TaskTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/TaskTransformer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/TaskTransformer.java
deleted file mode 100644
index e53f781..0000000
--- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/transform/TaskTransformer.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * 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.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.mgmt.HasTaskChildren;
-import org.apache.brooklyn.api.mgmt.Task;
-import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
-import org.apache.brooklyn.core.mgmt.BrooklynTaskTags.WrappedStream;
-import org.apache.brooklyn.rest.domain.LinkWithMetadata;
-import org.apache.brooklyn.rest.domain.TaskSummary;
-import org.apache.brooklyn.rest.util.WebResourceUtils;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.task.TaskInternal;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.text.Strings;
-
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-
-public class TaskTransformer {
-
- @SuppressWarnings("unused")
- private static final Logger log = LoggerFactory.getLogger(TaskTransformer.class);
-
- public static final Function<Task<?>, TaskSummary> FROM_TASK = new Function<Task<?>, TaskSummary>() {
- @Override
- public TaskSummary apply(@Nullable Task<?> input) {
- return taskSummary(input);
- }
- };
-
- public static TaskSummary taskSummary(Task<?> task) {
- try {
- Preconditions.checkNotNull(task);
- Entity entity = BrooklynTaskTags.getContextEntity(task);
- String entityId;
- String entityDisplayName;
- URI entityLink;
-
- String selfLink = asLink(task).getLink();
-
- if (entity != null) {
- entityId = entity.getId();
- entityDisplayName = entity.getDisplayName();
- entityLink = new URI("/v1/applications/"+entity.getApplicationId()+"/"+"entities"+"/"+entity.getId());
- } else {
- entityId = null;
- entityDisplayName = null;
- entityLink = null;
- }
-
- List<LinkWithMetadata> children = Collections.emptyList();
- if (task instanceof HasTaskChildren) {
- children = new ArrayList<LinkWithMetadata>();
- for (Task<?> t: ((HasTaskChildren)task).getChildren()) {
- children.add(asLink(t));
- }
- }
-
- Map<String,LinkWithMetadata> streams = new MutableMap<String, LinkWithMetadata>();
- for (WrappedStream stream: BrooklynTaskTags.streams(task)) {
- MutableMap<String, Object> metadata = MutableMap.<String,Object>of("name", stream.streamType);
- if (stream.streamSize.get()!=null) {
- metadata.add("size", stream.streamSize.get());
- metadata.add("sizeText", Strings.makeSizeString(stream.streamSize.get()));
- }
- String link = selfLink+"/stream/"+stream.streamType;
- streams.put(stream.streamType, new LinkWithMetadata(link, metadata));
- }
-
- Map<String,URI> links = MutableMap.of("self", new URI(selfLink),
- "children", new URI(selfLink+"/"+"children"));
- if (entityLink!=null) links.put("entity", entityLink);
-
- Object result;
- try {
- if (task.isDone()) {
- result = WebResourceUtils.getValueForDisplay(task.get(), true, false);
- } else {
- result = null;
- }
- } catch (Throwable t) {
- result = Exceptions.collapseText(t);
- }
-
- return new TaskSummary(task.getId(), task.getDisplayName(), task.getDescription(), entityId, entityDisplayName,
- task.getTags(), ifPositive(task.getSubmitTimeUtc()), ifPositive(task.getStartTimeUtc()), ifPositive(task.getEndTimeUtc()),
- task.getStatusSummary(), result, task.isError(), task.isCancelled(),
- children, asLink(task.getSubmittedByTask()),
- task.isDone() ? null : task instanceof TaskInternal ? asLink(((TaskInternal<?>)task).getBlockingTask()) : null,
- task.isDone() ? null : task instanceof TaskInternal ? ((TaskInternal<?>)task).getBlockingDetails() : null,
- task.getStatusDetail(true),
- streams,
- links);
- } catch (URISyntaxException e) {
- // shouldn't happen
- throw Exceptions.propagate(e);
- }
- }
-
- private static Long ifPositive(Long time) {
- if (time==null || time<=0) return null;
- return time;
- }
-
- public static LinkWithMetadata asLink(Task<?> t) {
- if (t==null) return null;
- MutableMap<String,Object> data = new MutableMap<String,Object>();
- data.put("id", t.getId());
- if (t.getDisplayName()!=null) data.put("taskName", t.getDisplayName());
- Entity entity = BrooklynTaskTags.getContextEntity(t);
- if (entity!=null) {
- data.put("entityId", entity.getId());
- if (entity.getDisplayName()!=null) data.put("entityDisplayName", entity.getDisplayName());
- }
- return new LinkWithMetadata("/v1/activities/"+t.getId(), data);
- }
-}