Github user ahgittin commented on a diff in the pull request:

    https://github.com/apache/brooklyn-server/pull/821#discussion_r142360501
  
    --- Diff: 
rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/ConfigTransformer.java
 ---
    @@ -0,0 +1,173 @@
    +/*
    + * 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.util.WebResourceUtils.serviceUriBuilder;
    +
    +import java.lang.reflect.Field;
    +import java.net.URI;
    +import java.util.concurrent.atomic.AtomicInteger;
    +
    +import javax.ws.rs.core.UriBuilder;
    +
    +import org.apache.brooklyn.api.catalog.CatalogConfig;
    +import org.apache.brooklyn.api.entity.Entity;
    +import org.apache.brooklyn.api.objs.BrooklynObject;
    +import org.apache.brooklyn.api.objs.EntityAdjunct;
    +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.api.AdjunctApi;
    +import org.apache.brooklyn.rest.api.EntityConfigApi;
    +import org.apache.brooklyn.rest.domain.ConfigSummary;
    +import org.apache.brooklyn.util.collections.MutableMap;
    +
    +import com.google.common.collect.Iterables;
    +
    +public class ConfigTransformer {
    +
    +    private final ConfigKey<?> key;
    +
    +    UriBuilder ub;
    +    boolean includeContextLinks, includeActionLinks;
    +    Entity entity;
    +    EntityAdjunct adjunct;
    +    
    +    String label;
    +    Double priority;
    +    Boolean pinned;
    +    
    +    public static ConfigTransformer of(ConfigKey<?> key) {
    +        return new ConfigTransformer(key);
    +    }
    +
    +    public static ConfigTransformer of(SpecParameter<?> param) {
    +        ConfigTransformer result = of(param.getConfigKey());
    +        result.label = param.getLabel();
    +        result.pinned = param.isPinned();
    +        return result;
    +    }
    +
    +    private ConfigTransformer(ConfigKey<?> key) {
    +        this.key = key;
    +    }
    +    
    +    public ConfigTransformer on(Entity entity) {
    +        this.entity = entity;
    +        return this;
    +    }
    +    
    +    public ConfigTransformer on(Entity entity, EntityAdjunct adjunct) {
    +        this.entity = entity;
    +        this.adjunct = adjunct;
    +        return this;
    +    }
    +    
    +    public ConfigTransformer includeLinks(UriBuilder ub, boolean 
includeContextLinks, boolean includeActionLinks) {
    +        this.ub = ub;
    +        this.includeContextLinks = includeContextLinks;
    +        this.includeActionLinks = includeActionLinks;
    +        return this;
    +    }
    +    
    +    public ConfigTransformer uiMetadata(String label, Double priority, 
Boolean pinned) {
    +        this.label = label;
    +        this.priority = priority;
    +        this.pinned = pinned;
    +        return this;
    +    }
    +    
    +    public ConfigTransformer uiMetadata(String label, Boolean pinned) {
    +        return uiMetadata(label, Boolean.TRUE.equals(pinned) ? 1.0d : 0, 
pinned);
    +    }
    +    
    +    public ConfigTransformer 
uiIncrementAndSetPriorityIfPinned(AtomicInteger lastPriority) {
    +        if (Boolean.TRUE.equals(pinned)) {
    +            this.priority = (double) lastPriority.incrementAndGet();
    +        }
    +        return this;
    +    }
    +
    +    public ConfigTransformer uiMetadata(Field keyField) {
    +        if (keyField==null) return this;
    +        return 
uiMetadata(keyField.getDeclaredAnnotation(CatalogConfig.class));
    +    }
    +        
    +    public ConfigTransformer uiMetadata(CatalogConfig annotation) {
    +        if (annotation==null) return this;
    +        return uiMetadata(annotation.label(), annotation.priority(), 
annotation.pinned());
    +    }
    +    
    +    public ConfigSummary transform() {
    +        MutableMap.Builder<String, URI> lb = new 
MutableMap.Builder<String, URI>();
    +        
    +        if (ub!=null && entity!=null) {
    --- End diff --
    
    there might be a context where someone wants to include whatever links are 
possible but an entity may or may not be present.  i wouldn't say it's 
necessarily a programming error.  if inclusion in links is wanted unit tests 
should check it explicitly rather than constrain this method to fail-fast.
    
    i'll update javadoc on `includeLinks` methods


---

Reply via email to