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/01 18:50:57 UTC

[15/51] [abbrv] [partial] brooklyn-server git commit: move subdir from incubator up a level as it is promoted to its own repo (first non-incubator commit!)

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadSubstituters.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadSubstituters.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadSubstituters.java
deleted file mode 100644
index 64a081c..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/drivers/downloads/DownloadSubstituters.java
+++ /dev/null
@@ -1,172 +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.core.entity.drivers.downloads;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.Map;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.drivers.EntityDriver;
-import org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolverManager.DownloadRequirement;
-import org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolverManager.DownloadTargets;
-import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-
-import freemarker.cache.StringTemplateLoader;
-import freemarker.template.Configuration;
-import freemarker.template.Template;
-import freemarker.template.TemplateException;
-
-public class DownloadSubstituters {
-
-    private static final Logger LOG = LoggerFactory.getLogger(DownloadSubstituters.class);
-
-    static {
-        // TODO in Freemarker 2.4 SLF4J may be auto-selected and we can remove this;
-        // for now, we need it somewhere, else we get j.u.l logging; 
-        // since this is the main place it is used, let's do it here
-        try {
-            LOG.debug("Configuring Freemarker logging for Brooklyn to use SLF4J");
-            System.setProperty(freemarker.log.Logger.SYSTEM_PROPERTY_NAME_LOGGER_LIBRARY, freemarker.log.Logger.LIBRARY_NAME_SLF4J);
-        } catch (Exception e) {
-            LOG.warn("Error setting Freemarker logging: "+e, e);
-        }
-    }
-    
-    private DownloadSubstituters() {}
-    
-    /**
-     * Converts the basevalue by substituting things in the form ${key} for values specific
-     * to a given entity driver. The keys used are:
-     * <ul>
-     *   <li>driver: the driver instance (e.g. can do freemarker.org stuff like ${driver.osTag} to call {@code driver.getOsTag()})
-     *   <li>entity: the entity instance
-     *   <li>type: the fully qualified type name of the entity
-     *   <li>simpletype: the unqualified type name of the entity
-     *   <li>addon: the name of the add-on, or null if for the entity's main artifact
-     *   <li>version: the version for this entity (or of the add-on), or not included if null
-     * </ul>
-     * 
-     * Additional substitution keys (and values) can be defined using {@link DownloadRequirement#getProperties()}; these
-     * override the default substitutions listed above.
-     */
-    public static String substitute(DownloadRequirement req, String basevalue) {
-        return substitute(basevalue, getBasicSubstitutions(req));
-    }
-
-    public static Map<String,Object> getBasicSubstitutions(DownloadRequirement req) {
-        EntityDriver driver = req.getEntityDriver();
-        String addon = req.getAddonName();
-        Map<String, ?> props = req.getProperties();
-        
-        if (addon == null) {
-            return MutableMap.<String,Object>builder()
-                    .putAll(getBasicEntitySubstitutions(driver))
-                    .putAll(props)
-                    .build();
-        } else {
-            return MutableMap.<String,Object>builder()
-                    .putAll(getBasicAddonSubstitutions(driver, addon))
-                    .putAll(props)
-                    .build();
-        }
-    }
-    
-    public static Map<String,Object> getBasicEntitySubstitutions(EntityDriver driver) {
-        Entity entity = driver.getEntity();
-        String type = entity.getEntityType().getName();
-        String simpleType = type.substring(type.lastIndexOf(".")+1);
-        String version = entity.getConfig(BrooklynConfigKeys.SUGGESTED_VERSION);
-        
-        return MutableMap.<String,Object>builder()
-                .put("entity", entity)
-                .put("driver", driver)
-                .put("type", type)
-                .put("simpletype", simpleType)
-                .putIfNotNull("version", version)
-                .build();
-    }
-
-    public static Map<String,Object> getBasicAddonSubstitutions(EntityDriver driver, String addon) {
-        return MutableMap.<String,Object>builder()
-                .putAll(getBasicEntitySubstitutions(driver))
-                .put("addon", addon)
-                .build();
-    }
-
-    public static String substitute(String basevalue, Map<String,?> substitutions) {
-        try {
-            Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
-            StringTemplateLoader templateLoader = new StringTemplateLoader();
-            templateLoader.putTemplate("config", basevalue);
-            cfg.setTemplateLoader(templateLoader);
-            Template template = cfg.getTemplate("config");
-            
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            Writer out = new OutputStreamWriter(baos);
-            template.process(substitutions, out);
-            out.flush();
-            
-            return new String(baos.toByteArray());
-        } catch (IOException e) {
-            LOG.warn("Error processing template '"+basevalue+"'", e);
-            throw Exceptions.propagate(e);
-        } catch (TemplateException e) {
-            throw new IllegalArgumentException("Failed to process driver download '"+basevalue+"'", e);
-        }
-    }
-
-    public static Function<DownloadRequirement, DownloadTargets> substituter(Function<? super DownloadRequirement, String> basevalueProducer, Function<? super DownloadRequirement, ? extends Map<String,?>> subsProducer) {
-        // FIXME Also need default subs (entity, driver, simpletype, etc)
-        return new Substituter(basevalueProducer, subsProducer);
-    }
-
-    protected static class Substituter implements Function<DownloadRequirement, DownloadTargets> {
-        private final Function<? super DownloadRequirement, String> basevalueProducer;
-        private final Function<? super DownloadRequirement, ? extends Map<String,?>> subsProducer;
-        
-        Substituter(Function<? super DownloadRequirement, String> baseValueProducer, Function<? super DownloadRequirement, ? extends Map<String,?>> subsProducer) {
-            this.basevalueProducer = checkNotNull(baseValueProducer, "basevalueProducer");
-            this.subsProducer = checkNotNull(subsProducer, "subsProducer");
-        }
-        
-        @Override
-        public DownloadTargets apply(DownloadRequirement input) {
-            String basevalue = basevalueProducer.apply(input);
-            Map<String, ?> subs = subsProducer.apply(input);
-            String result = (basevalue != null) ? substitute(basevalue, subs) : null;
-            return (result != null) ? BasicDownloadTargets.builder().addPrimary(result).build() : BasicDownloadTargets.empty();
-        }
-        
-        @Override public String toString() {
-            return Objects.toStringHelper(this).add("basevalue", basevalueProducer).add("subs", subsProducer).toString();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/drivers/downloads/FilenameProducers.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/drivers/downloads/FilenameProducers.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/drivers/downloads/FilenameProducers.java
deleted file mode 100644
index 18240f1..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/drivers/downloads/FilenameProducers.java
+++ /dev/null
@@ -1,64 +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.core.entity.drivers.downloads;
-
-import java.util.List;
-
-import javax.annotation.Nullable;
-
-import org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolverManager.DownloadRequirement;
-import org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolverManager.DownloadTargets;
-import org.apache.brooklyn.util.text.Strings;
-
-import com.google.common.base.Function;
-
-public class FilenameProducers {
-
-    public static String inferFilename(String target) {
-        String result = target.substring(target.lastIndexOf("/")+1);
-        result = result.contains("?") ? result.substring(0, result.indexOf("?")) : result;
-        if (!result.contains("."))
-            // require a full stop, else assume it isn't a filename
-            return null;
-        return result;
-    }
-
-    public static Function<DownloadRequirement, String> fromFilenameProperty() {
-        return new Function<DownloadRequirement, String>() {
-            @Override public String apply(@Nullable DownloadRequirement req) {
-                Object filename = req.getProperties().get("filename");
-                return (filename != null) ? filename.toString() : null;
-            }
-        };
-    }
-    
-    public static Function<DownloadRequirement, String> firstPrimaryTargetOf(final Function<DownloadRequirement, DownloadTargets> producer) {
-        return new Function<DownloadRequirement, String>() {
-            @Override public String apply(@Nullable DownloadRequirement req) {
-                DownloadTargets targets = producer.apply(req);
-                List<String> primaryTargets = targets.getPrimaryLocations();
-                for (String primaryTarget : primaryTargets) {
-                    String result = inferFilename(primaryTarget);
-                    if (!Strings.isBlank(result)) return result;
-                }
-                return null;
-            }
-        };
-    }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/AbstractConfigurableEntityFactory.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/AbstractConfigurableEntityFactory.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/AbstractConfigurableEntityFactory.java
deleted file mode 100644
index 6b41e4b..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/AbstractConfigurableEntityFactory.java
+++ /dev/null
@@ -1,82 +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.core.entity.factory;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.config.ConfigKey;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class AbstractConfigurableEntityFactory<T extends Entity> implements ConfigurableEntityFactory<T>, Serializable {
-    private static final Logger log = LoggerFactory.getLogger(AbstractConfigurableEntityFactory.class);
-    
-    protected final Map config = new LinkedHashMap();
-
-    public AbstractConfigurableEntityFactory(){
-        this(new HashMap());
-    }
-
-    public AbstractConfigurableEntityFactory(Map flags) {
-        this.config.putAll(flags);
-
-    }
-    public AbstractConfigurableEntityFactory<T> configure(Map flags) {
-        config.putAll(flags);
-        return this;
-    }
-
-    public AbstractConfigurableEntityFactory<T> configure(ConfigKey key, Object value) {
-        config.put(key, value);
-        return this;
-    }
-
-    public AbstractConfigurableEntityFactory<T> configure(ConfigKey.HasConfigKey key, Object value) {
-        return setConfig(key.getConfigKey(), value);
-    }
-
-    public AbstractConfigurableEntityFactory<T> setConfig(ConfigKey key, Object value) {
-        return configure(key, value);
-    }
-
-    public AbstractConfigurableEntityFactory<T> setConfig(ConfigKey.HasConfigKey key, Object value) {
-        return configure(key.getConfigKey(), value);
-    }
-
-    public T newEntity(Entity parent){
-        return newEntity(new HashMap(),parent);
-    }
-
-    public T newEntity(Map flags, Entity parent) {
-        Map flags2 = new HashMap();
-        flags2.putAll(config);
-        flags2.putAll(flags);
-        T result = newEntity2(flags2, parent);
-        // we rely increasingly on init, which factory doesn't call; really should remove factories!
-        log.warn("Deprecated legacy compatibility, using factory (init will not be invoked): "+result);
-        return result;
-    }
-
-    public abstract T newEntity2(Map flags, Entity parent);
-}
-

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
deleted file mode 100644
index 66f4795..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
+++ /dev/null
@@ -1,249 +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.core.entity.factory;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.mgmt.EntityManager;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.entity.StartableApplication;
-import org.apache.brooklyn.entity.stock.BasicApplication;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.Beta;
-
-/**
- * Experimental mechanism for defining/building applications. In future releases, this
- * API will change. Its concepts will most likely be merged with a TOSCA implementation
- * and with {@link EntitySpec}.
- *
- * For building an application. Users can sub-class and override doBuild(), putting the logic for  
- * creating and wiring together entities in there.
- * 
- * The builder is mutable; a given instance should be used to build only a single application.
- * Once {@link #manage()} has been called, the application will be built and no additional configuration
- * should be performed through this builder.  
- * 
- * Example (simplified) code for sub-classing is:
- * <pre>
- * {@code
- *   app = new ApplicationBuilder() {
- *       //@Override
- *       public void doBuild() {
- *           MySqlNode db = addChild(EntitySpec.create(MySqlNode.class)));
- *           JBoss7Server as = addChild(EntitySpec.create(JBoss7Server.class)
- *                   .configure(HTTP_PORT, "8080+")
- *                   .configure(javaSysProp("brooklyn.example.db.url"), attributeWhenReady(db, MySqlNode.MYSQL_URL));
- *       }
- *   }.manage();
- * }
- * </pre>
- * 
- * @author aled
- * 
- * @deprecated since 0.9.0; use {@link EntitySpec} and {@link EntityManager#createEntity(EntitySpec)}, having 
- *             added the children to the spec etc.
- */
-@Deprecated
-@Beta
-public abstract class ApplicationBuilder {
-
-    @SuppressWarnings("unused")
-    private static final Logger LOG = LoggerFactory.getLogger(ApplicationBuilder.class);
-
-    @SuppressWarnings("unchecked")
-    @Beta
-    /** @deprecated since 0.7.0 the management context should normally be passed in;
-     * for TestApplication also see TestApplication.Factory.newManagedInstanceForTests() */ 
-    @Deprecated
-    public static <T extends StartableApplication> T newManagedApp(Class<T> type) {
-        if (type.isInterface()) {
-            return (T) newManagedApp(EntitySpec.create(type));
-        } else {
-            return (T) newManagedApp(EntitySpec.create(StartableApplication.class, type));
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private static <T extends StartableApplication> T newManagedApp(EntitySpec<T> spec) {
-        return (T) new ApplicationBuilder(spec) {
-            @Override protected void doBuild() {
-            }
-        }.manage();
-    }
-
-    @SuppressWarnings("unchecked")
-    @Beta
-    public static <T extends StartableApplication> T newManagedApp(Class<T> type, ManagementContext managementContext) {
-        if (type.isInterface()) {
-            return (T) newManagedApp(EntitySpec.create(type), managementContext);
-        } else {
-            return (T) newManagedApp(EntitySpec.create(StartableApplication.class, type), managementContext);
-        }
-    }
-
-    /** @deprecated class can be removed; users of this convenience method can now simply do mgmt.getEntityManager().createEntity(spec) */ 
-    @SuppressWarnings("unchecked")
-    @Beta
-    public static <T extends StartableApplication> T newManagedApp(EntitySpec<T> spec, ManagementContext managementContext) {
-        return (T) new ApplicationBuilder(spec) {
-            @Override protected void doBuild() {
-            }
-        }.manage(managementContext);
-    }
-
-    protected volatile boolean managed = false;
-    protected final AtomicBoolean inManage = new AtomicBoolean(false);
-    private EntitySpec<? extends StartableApplication> appSpec;
-    private ManagementContext managementContext;
-    private StartableApplication app;
-    
-    public ApplicationBuilder() {
-        this.appSpec = EntitySpec.create(BasicApplication.class);
-    }
-
-    public ApplicationBuilder(EntitySpec<? extends StartableApplication> appSpec) {
-        this.appSpec = EntitySpec.create(appSpec);
-    }
-
-    public final ApplicationBuilder appDisplayName(String val) {
-        checkPreManage();
-        appSpec.displayName(val);
-        return this;
-    }
-    
-    protected final <T extends Entity> T createEntity(EntitySpec<T> spec) {
-        checkDuringManage();
-        EntityManager entityManager = managementContext.getEntityManager();
-        return entityManager.createEntity(spec);
-    }
-
-    /**
-     * Adds the given entity as a child of the application being built.
-     * To be called during {@link #doBuild()}.
-     */
-    protected final <T extends Entity> T addChild(T entity) {
-        checkDuringManage();
-        return app.addChild(entity);
-    }
-
-    /**
-     * Returns the type of the application being built.
-     */
-    public final Class<? extends StartableApplication> getType() {
-        return appSpec.getType();
-    }
-    
-    /**
-     * Configures the application instance.
-     */
-    public final ApplicationBuilder configure(Map<?,?> config) {
-        checkPreManage();
-        appSpec.configure(config);
-        return this;
-    }
-    
-    /**
-     * Adds the given entity as a child of the application being built.
-     */
-    protected final <T extends Entity> T addChild(EntitySpec<T> spec) {
-        checkDuringManage();
-        return addChild(createEntity(spec));
-    }
-    
-    protected final <T extends Entity> T addChild(Map<?,?> config, Class<T> type) {
-        checkDuringManage();
-        EntitySpec<T> spec = EntitySpec.create(type).configure(config);
-        return addChild(createEntity(spec));
-    }
-    
-    protected final ManagementContext getManagementContext() {
-        return checkNotNull(managementContext, "must only be called after manage()");
-    }
-
-    protected final StartableApplication getApp() {
-        return checkNotNull(app, "must only be called after manage()");
-    }
-
-    /**
-     * For overriding, to create and wire together entities.
-     */
-    protected abstract void doBuild();
-
-    /**
-     * Creates a new {@link ManagementContext}, and then builds and manages the application.
-     * 
-     * @see #manage(ManagementContext)
-     */
-    public final StartableApplication manage() {
-        return manage(Entities.newManagementContext());
-    }
-    
-    /**
-     * Builds and manages the application, calling the user's {@link #doBuild()} method.
-     * 
-     * @throws IllegalStateException If already managed, or if called during {@link #doBuild()}, or if 
-     *                               multiple concurrent calls
-     */
-    public final StartableApplication manage(ManagementContext managementContext) {
-        if (!inManage.compareAndSet(false, true)) {
-            throw new IllegalStateException("Concurrent and re-entrant calls to manage() forbidden on "+this);
-        }
-        try {
-            checkNotManaged();
-            this.managementContext = managementContext;
-            this.app = managementContext.getEntityManager().createEntity(appSpec);
-            doBuild();
-            // not needed with 0.9.0 (TODO - remove when confirmed)
-//            Entities.startManagement(app, managementContext);
-            managed = true;
-            return app;
-        } finally {
-            inManage.set(false);
-        }
-    }
-    
-    protected void checkPreManage() {
-        if (inManage.get()) {
-            throw new IllegalStateException("Builder being managed; cannot perform operation during call to manage(), or in doBuild()");
-        }
-        if (managed) {
-            throw new IllegalStateException("Builder already managed; cannot perform operation after call to manage()");
-        }
-    }
-    
-    protected void checkNotManaged() {
-        if (managed) {
-            throw new IllegalStateException("Builder already managed; cannot perform operation after call to manage()");
-        }
-    }
-    
-    protected void checkDuringManage() {
-        if (!inManage.get() || app == null) {
-            throw new IllegalStateException("Operation only permitted during manage, e.g. called from doBuild() of "+this);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/BasicConfigurableEntityFactory.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/BasicConfigurableEntityFactory.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/BasicConfigurableEntityFactory.java
deleted file mode 100644
index 8f6e3f6..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/BasicConfigurableEntityFactory.java
+++ /dev/null
@@ -1,76 +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.core.entity.factory;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.core.mgmt.persist.DeserializingClassRenamesProvider;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Throwables;
-
-/** @deprecated since 0.7.0; use EntitySpec instead, as per {@link EntityFactory} javadoc */
-@Deprecated
-public class BasicConfigurableEntityFactory<T extends Entity> extends AbstractConfigurableEntityFactory<T> {
-    private transient Class<? extends T> clazz;
-    private final String clazzName;
-
-    public BasicConfigurableEntityFactory(Class<? extends T> clazz) {
-        this(new HashMap(), clazz);
-    }
-
-    public BasicConfigurableEntityFactory(Map flags, Class<? extends T> clazz) {
-        super(flags);
-        this.clazz = checkNotNull(clazz, "clazz");
-        this.clazzName = DeserializingClassRenamesProvider.findMappedName(clazz.getName());
-    }
-
-    public T newEntity2(Map flags, Entity parent) {
-        try {
-            Constructor<? extends T> constructor = clazz.getConstructor(Map.class, Entity.class);
-            return constructor.newInstance(flags, parent);
-        } catch (InstantiationException e) {
-            throw Throwables.propagate(e);
-        } catch (IllegalAccessException e) {
-            throw Throwables.propagate(e);
-        } catch (InvocationTargetException e) {
-            throw Throwables.propagate(e);
-        } catch (NoSuchMethodException e) {
-            throw Throwables.propagate(e);
-        }
-    }
-    
-    private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
-        s.defaultReadObject();
-        clazz = (Class<T>) getClass().getClassLoader().loadClass(clazzName);
-    }
-    
-    @Override
-    public String toString() {
-        return Objects.toStringHelper(this).add("type", clazzName).toString();
-    }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ClosureEntityFactory.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ClosureEntityFactory.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ClosureEntityFactory.java
deleted file mode 100644
index df0cf26..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ClosureEntityFactory.java
+++ /dev/null
@@ -1,53 +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.core.entity.factory;
-
-import groovy.lang.Closure;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.brooklyn.api.entity.Entity;
-
-public class ClosureEntityFactory<T extends Entity> extends AbstractConfigurableEntityFactory<T> {
-    private final Closure<T> closure;
-
-    public ClosureEntityFactory(Closure<T> closure){
-        this(new HashMap(),closure);
-    }
-
-    public ClosureEntityFactory(Map flags, Closure<T> closure) {
-        super(flags);
-        this.closure = closure;
-    }
-
-    public T newEntity2(Map flags, Entity parent) {
-        if (closure.getMaximumNumberOfParameters()>1)
-            return closure.call(flags, parent);
-        else {
-            //leaving out the parent is discouraged
-            T entity = closure.call(flags);
-            if(parent!=null && entity.getParent()==null){
-                entity.setParent(parent);
-            }
-
-            return entity;
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ConfigurableEntityFactory.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ConfigurableEntityFactory.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ConfigurableEntityFactory.java
deleted file mode 100644
index af5fba3..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ConfigurableEntityFactory.java
+++ /dev/null
@@ -1,33 +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.core.entity.factory;
-
-import java.util.Map;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.config.ConfigKey;
-
-public interface ConfigurableEntityFactory<T extends Entity> extends EntityFactory<T> {
-   ConfigurableEntityFactory<T> configure(Map flags);
-   ConfigurableEntityFactory<T> configure(ConfigKey key, Object value);
-   ConfigurableEntityFactory<T> configure(ConfigKey.HasConfigKey key, Object value);
-   
-   ConfigurableEntityFactory<T> setConfig(ConfigKey key, Object value);
-   ConfigurableEntityFactory<T> setConfig(ConfigKey.HasConfigKey key, Object value);
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ConfigurableEntityFactoryFromEntityFactory.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ConfigurableEntityFactoryFromEntityFactory.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ConfigurableEntityFactoryFromEntityFactory.java
deleted file mode 100644
index 1fc36c3..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/ConfigurableEntityFactoryFromEntityFactory.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.core.entity.factory;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.brooklyn.api.entity.Entity;
-
-public class ConfigurableEntityFactoryFromEntityFactory<T extends Entity> extends AbstractConfigurableEntityFactory<T> {
-
-   private final EntityFactory<? extends T> factory;
-
-    public ConfigurableEntityFactoryFromEntityFactory(EntityFactory<? extends T> entityFactory){
-        this(new HashMap(),entityFactory);
-    }
-
-    public ConfigurableEntityFactoryFromEntityFactory(Map flags, EntityFactory<? extends T> factory) {
-        super(flags);
-        this.factory = checkNotNull(factory, "factory");
-    }
-
-    @Override
-    public T newEntity2(Map flags, Entity parent) {
-        return factory.newEntity(flags, parent);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/EntityFactory.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/EntityFactory.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/EntityFactory.java
deleted file mode 100644
index 2f4ede7..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/EntityFactory.java
+++ /dev/null
@@ -1,32 +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.core.entity.factory;
-
-import java.util.Map;
-
-import org.apache.brooklyn.api.entity.Entity;
-
-/**
- * A Factory for creating entities.
- *
- * @deprecated since 0.7.0; use EntitySpec instead, as the factory does not put the entity through the initialization process */
-@Deprecated
-public interface EntityFactory<T extends Entity> {
-    T newEntity(Map flags, Entity parent);
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/EntityFactoryForLocation.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/EntityFactoryForLocation.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/EntityFactoryForLocation.java
deleted file mode 100644
index 79f72d7..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/factory/EntityFactoryForLocation.java
+++ /dev/null
@@ -1,30 +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.core.entity.factory;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.location.Location;
-
-/**
- * dispatch interface to allow an EntityFactory to indicate it might be able to discover
- * other factories for specific locations (e.g. if the location implements a custom entity-aware interface)
- */
-public interface EntityFactoryForLocation<T extends Entity> {
-    ConfigurableEntityFactory<T> newFactoryForLocation(Location l);
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/ConfigMapViewWithStringKeys.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/ConfigMapViewWithStringKeys.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/ConfigMapViewWithStringKeys.java
deleted file mode 100644
index 7d91af4..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/ConfigMapViewWithStringKeys.java
+++ /dev/null
@@ -1,130 +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.core.entity.internal;
-
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.BasicConfigKey;
-
-import com.google.common.annotations.Beta;
-import com.google.common.collect.Sets;
-
-/**
- * Internal class that presents a view over a ConfigMap, so it looks like a Map (with the
- * keys being the config key names).
- */
-@Beta
-public class ConfigMapViewWithStringKeys implements Map<String,Object> {
-
-    private org.apache.brooklyn.config.ConfigMap target;
-
-    public ConfigMapViewWithStringKeys(org.apache.brooklyn.config.ConfigMap target) {
-        this.target = target;
-    }
-    
-    @Override
-    public int size() {
-        return target.getAllConfig().size();
-    }
-
-    @Override
-    public boolean isEmpty() {
-        return target.getAllConfig().isEmpty();
-    }
-
-    @Override
-    public boolean containsKey(Object key) {
-        return keySet().contains(key);
-    }
-
-    @Override
-    public boolean containsValue(Object value) {
-        return values().contains(value);
-    }
-
-    @Override
-    public Object get(Object key) {
-        return target.getConfig(new BasicConfigKey<Object>(Object.class, (String)key));
-    }
-
-    @Override
-    public Object put(String key, Object value) {
-        throw new UnsupportedOperationException("This view is read-only");
-    }
-
-    @Override
-    public Object remove(Object key) {
-        throw new UnsupportedOperationException("This view is read-only");
-    }
-
-    @Override
-    public void putAll(Map<? extends String, ? extends Object> m) {
-        throw new UnsupportedOperationException("This view is read-only");
-    }
-
-    @Override
-    public void clear() {
-        throw new UnsupportedOperationException("This view is read-only");
-    }
-
-    @Override
-    public Set<String> keySet() {
-        LinkedHashSet<String> result = Sets.newLinkedHashSet();
-        Set<Map.Entry<ConfigKey<?>, Object>> set = target.getAllConfig().entrySet();
-        for (final Map.Entry<ConfigKey<?>, Object> entry: set) {
-            result.add(entry.getKey().getName());
-        }
-        return result;
-    }
-
-    @Override
-    public Collection<Object> values() {
-        return target.getAllConfig().values();
-    }
-
-    @Override
-    public Set<Map.Entry<String, Object>> entrySet() {
-        LinkedHashSet<Map.Entry<String, Object>> result = Sets.newLinkedHashSet();
-        Set<Map.Entry<ConfigKey<?>, Object>> set = target.getAllConfig().entrySet();
-        for (final Map.Entry<ConfigKey<?>, Object> entry: set) {
-            result.add(new Map.Entry<String, Object>() {
-                @Override
-                public String getKey() {
-                    return entry.getKey().getName();
-                }
-
-                @Override
-                public Object getValue() {
-                    return entry.getValue();
-                }
-
-                @Override
-                public Object setValue(Object value) {
-                    return entry.setValue(value);
-                }
-            });
-        }
-        return result;
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityConfigMap.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityConfigMap.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityConfigMap.java
deleted file mode 100644
index da209e1..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityConfigMap.java
+++ /dev/null
@@ -1,319 +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.core.entity.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.apache.brooklyn.util.groovy.GroovyJavaMethods.elvis;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.brooklyn.api.mgmt.ExecutionContext;
-import org.apache.brooklyn.api.mgmt.Task;
-import org.apache.brooklyn.config.ConfigInheritance;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.Sanitizer;
-import org.apache.brooklyn.core.config.StructuredConfigKey;
-import org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl;
-import org.apache.brooklyn.core.entity.AbstractEntity;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.core.flags.FlagUtils;
-import org.apache.brooklyn.util.core.flags.SetFromFlag;
-import org.apache.brooklyn.util.core.flags.TypeCoercions;
-import org.apache.brooklyn.util.core.internal.ConfigKeySelfExtracting;
-import org.apache.brooklyn.util.guava.Maybe;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-public class EntityConfigMap extends AbstractConfigMapImpl {
-
-    private static final Logger LOG = LoggerFactory.getLogger(EntityConfigMap.class);
-
-    /** entity against which config resolution / task execution will occur */
-    private final AbstractEntity entity;
-
-    /**
-     * Map of configuration information that is defined at start-up time for the entity. These
-     * configuration parameters are shared and made accessible to the "children" of this
-     * entity.
-     */
-    private final Map<ConfigKey<?>,Object> inheritedConfig = Collections.synchronizedMap(new LinkedHashMap<ConfigKey<?>, Object>());
-    // TODO do we really want to have *both* bags and maps for these?  danger that they get out of synch.
-    // have added some logic (Oct 2014) so that the same changes are applied to both, in most places at least;
-    // i (alex) think we should prefer ConfigBag (the input keys don't matter, it is more a question of retrieval keys),
-    // but first we need ConfigBag to support StructuredConfigKeys 
-    private final ConfigBag localConfigBag;
-    private final ConfigBag inheritedConfigBag;
-
-    public EntityConfigMap(AbstractEntity entity) {
-        // Not using ConcurrentMap, because want to (continue to) allow null values.
-        // Could use ConcurrentMapAcceptingNullVals (with the associated performance hit on entrySet() etc).
-        this(entity, Collections.synchronizedMap(Maps.<ConfigKey<?>, Object>newLinkedHashMap()));
-    }
-    
-    public EntityConfigMap(AbstractEntity entity, Map<ConfigKey<?>, Object> storage) {
-        this.entity = checkNotNull(entity, "entity must be specified");
-        this.ownConfig = checkNotNull(storage, "storage map must be specified");
-        
-        // TODO store ownUnused in backing-storage
-        this.localConfigBag = ConfigBag.newInstance();
-        this.inheritedConfigBag = ConfigBag.newInstance();
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T> T getConfig(ConfigKey<T> key, T defaultValue) {
-        // FIXME What about inherited task in config?!
-        //              alex says: think that should work, no?
-        // FIXME What if someone calls getConfig on a task, before setting parent app?
-        //              alex says: not supported (throw exception, or return the task)
-        
-        // In case this entity class has overridden the given key (e.g. to set default), then retrieve this entity's key
-        // TODO If ask for a config value that's not in our configKeys, should we really continue with rest of method and return key.getDefaultValue?
-        //      e.g. SshBasedJavaAppSetup calls setAttribute(JMX_USER), which calls getConfig(JMX_USER)
-        //           but that example doesn't have a default...
-        ConfigKey<T> ownKey = entity!=null ? (ConfigKey<T>)elvis(entity.getEntityType().getConfigKey(key.getName()), key) : key;
-        
-        ConfigInheritance inheritance = key.getInheritance();
-        if (inheritance==null) inheritance = ownKey.getInheritance(); 
-        if (inheritance==null) {
-            // TODO we could warn by introducing a temporary "ALWAYS_BUT_WARNING" instance
-            inheritance = getDefaultInheritance(); 
-        }
-        
-        // TODO We're notifying of config-changed because currently persistence needs to know when the
-        // attributeWhenReady is complete (so it can persist the result).
-        // Long term, we'll just persist tasks properly so the call to onConfigChanged will go!
-
-        // Don't use groovy truth: if the set value is e.g. 0, then would ignore set value and return default!
-        if (ownKey instanceof ConfigKeySelfExtracting) {
-            Object rawval = ownConfig.get(key);
-            T result = null;
-            boolean complete = false;
-            if (((ConfigKeySelfExtracting<T>)ownKey).isSet(ownConfig)) {
-                ExecutionContext exec = entity.getExecutionContext();
-                result = ((ConfigKeySelfExtracting<T>)ownKey).extractValue(ownConfig, exec);
-                complete = true;
-            } else if (isInherited(ownKey, inheritance) && 
-                    ((ConfigKeySelfExtracting<T>)ownKey).isSet(inheritedConfig)) {
-                ExecutionContext exec = entity.getExecutionContext();
-                result = ((ConfigKeySelfExtracting<T>)ownKey).extractValue(inheritedConfig, exec);
-                complete = true;
-            } else if (localConfigBag.containsKey(ownKey)) {
-                // TODO configBag.get doesn't handle tasks/attributeWhenReady - it only uses TypeCoercions
-                result = localConfigBag.get(ownKey);
-                complete = true;
-            } else if (isInherited(ownKey, inheritance) && 
-                    inheritedConfigBag.containsKey(ownKey)) {
-                result = inheritedConfigBag.get(ownKey);
-                complete = true;
-            }
-
-            if (rawval instanceof Task) {
-                entity.getManagementSupport().getEntityChangeListener().onConfigChanged(key);
-            }
-            if (complete) {
-                return result;
-            }
-        } else {
-            LOG.warn("Config key {} of {} is not a ConfigKeySelfExtracting; cannot retrieve value; returning default", ownKey, this);
-        }
-        return TypeCoercions.coerce((defaultValue != null) ? defaultValue : ownKey.getDefaultValue(), key.getTypeToken());
-    }
-
-    private <T> boolean isInherited(ConfigKey<T> key) {
-        return isInherited(key, key.getInheritance());
-    }
-    private <T> boolean isInherited(ConfigKey<T> key, ConfigInheritance inheritance) {
-        if (inheritance==null) inheritance = getDefaultInheritance(); 
-        return inheritance.isInherited(key, entity.getParent(), entity);
-    }
-    private ConfigInheritance getDefaultInheritance() {
-        return ConfigInheritance.ALWAYS; 
-    }
-
-    @Override
-    public Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited) {
-        if (ownConfig.containsKey(key)) return Maybe.of(ownConfig.get(key));
-        if (includeInherited && inheritedConfig.containsKey(key)) return Maybe.of(inheritedConfig.get(key));
-        return Maybe.absent();
-    }
-    
-    /** an immutable copy of the config visible at this entity, local and inherited (preferring local) */
-    public Map<ConfigKey<?>,Object> getAllConfig() {
-        Map<ConfigKey<?>,Object> result = new LinkedHashMap<ConfigKey<?>,Object>(inheritedConfig.size()+ownConfig.size());
-        result.putAll(inheritedConfig);
-        result.putAll(ownConfig);
-        return Collections.unmodifiableMap(result);
-    }
-
-    /** an immutable copy of the config defined at this entity, ie not inherited */
-    public Map<ConfigKey<?>,Object> getLocalConfig() {
-        Map<ConfigKey<?>,Object> result = new LinkedHashMap<ConfigKey<?>,Object>(ownConfig.size());
-        result.putAll(ownConfig);
-        return Collections.unmodifiableMap(result);
-    }
-    
-    /** Creates an immutable copy of the config visible at this entity, local and inherited (preferring local), including those that did not match config keys */
-    public ConfigBag getAllConfigBag() {
-        return ConfigBag.newInstanceCopying(localConfigBag)
-                .putAll(ownConfig)
-                .putIfAbsent(inheritedConfig)
-                .putIfAbsent(inheritedConfigBag)
-                .seal();
-    }
-
-    /** Creates an immutable copy of the config defined at this entity, ie not inherited, including those that did not match config keys */
-    public ConfigBag getLocalConfigBag() {
-        return ConfigBag.newInstanceCopying(localConfigBag)
-                .putAll(ownConfig)
-                .seal();
-    }
-
-    @SuppressWarnings("unchecked")
-    public Object setConfig(ConfigKey<?> key, Object v) {
-        Object val = coerceConfigVal(key, v);
-        Object oldVal;
-        if (key instanceof StructuredConfigKey) {
-            oldVal = ((StructuredConfigKey)key).applyValueToMap(val, ownConfig);
-            // TODO ConfigBag does not handle structured config keys; quick fix is to remove (and should also remove any subkeys;
-            // as it stands if someone set string a.b.c in the config bag then removed structured key a.b, then got a.b.c they'd get a vale);
-            // long term fix is to support structured config keys in ConfigBag, at which point i think we could remove ownConfig altogether
-            localConfigBag.remove(key);
-        } else {
-            oldVal = ownConfig.put(key, val);
-            localConfigBag.put((ConfigKey<Object>)key, v);
-        }
-        entity.config().refreshInheritedConfigOfChildren();
-        return oldVal;
-    }
-    
-    public void setLocalConfig(Map<ConfigKey<?>, ?> vals) {
-        ownConfig.clear();
-        localConfigBag.clear();
-        ownConfig.putAll(vals);
-        localConfigBag.putAll(vals);
-    }
-    
-    public void setInheritedConfig(Map<ConfigKey<?>, ?> valsO, ConfigBag configBagVals) {
-        Map<ConfigKey<?>, ?> vals = filterUninheritable(valsO);
-        
-        inheritedConfig.clear();
-        inheritedConfig.putAll(vals);
-
-        // The configBagVals contains all inherited, including strings that did not match a config key on the parent.
-        // They might match a config-key on this entity though, so need to check that:
-        //   - if it matches one of our keys, set it in inheritedConfig
-        //   - otherwise add it to our inheritedConfigBag
-        Set<String> valKeyNames = Sets.newLinkedHashSet();
-        for (ConfigKey<?> key : vals.keySet()) {
-            valKeyNames.add(key.getName());
-        }
-        Map<String,Object> valsUnmatched = MutableMap.<String,Object>builder()
-                .putAll(configBagVals.getAllConfig())
-                .removeAll(valKeyNames)
-                .build();
-        inheritedConfigBag.clear();
-        Map<ConfigKey<?>, SetFromFlag> annotatedConfigKeys = FlagUtils.getAnnotatedConfigKeys(entity.getClass());
-        Map<String, ConfigKey<?>> renamedConfigKeys = Maps.newLinkedHashMap();
-        for (Map.Entry<ConfigKey<?>, SetFromFlag> entry: annotatedConfigKeys.entrySet()) {
-            String rename = entry.getValue().value();
-            if (rename != null) {
-                renamedConfigKeys.put(rename, entry.getKey());
-            }
-        }
-        for (Map.Entry<String,Object> entry : valsUnmatched.entrySet()) {
-            String name = entry.getKey();
-            Object value = entry.getValue();
-            ConfigKey<?> key = renamedConfigKeys.get(name);
-            if (key == null) key = entity.getEntityType().getConfigKey(name);
-            if (key != null) {
-                if (!isInherited(key)) {
-                    // no-op
-                } else if (inheritedConfig.containsKey(key)) {
-                    LOG.warn("Entity "+entity+" inherited duplicate config for key "+key+", via explicit config and string name "+name+"; using value of key");
-                } else {
-                    inheritedConfig.put(key, value);
-                }
-            } else {
-                // a config bag has discarded the keys, so we must assume default inheritance for things given that way
-                // unless we can infer a key; not a big deal, as we should have the key in inheritedConfig for everything
-                // which originated with a key ... but still, it would be nice to clean up the use of config bag!
-                inheritedConfigBag.putStringKey(name, value);
-            }
-        }
-    }
-    
-    private Map<ConfigKey<?>, ?> filterUninheritable(Map<ConfigKey<?>, ?> vals) {
-        Map<ConfigKey<?>, Object> result = Maps.newLinkedHashMap();
-        for (Map.Entry<ConfigKey<?>, ?> entry : vals.entrySet()) {
-            if (isInherited(entry.getKey())) {
-                result.put(entry.getKey(), entry.getValue());
-            }
-        }
-        return result;
-    }
-    
-    public void addToLocalBag(Map<String,?> vals) {
-        localConfigBag.putAll(vals);
-        // quick fix for problem that ownConfig can get out of synch
-        ownConfig.putAll(localConfigBag.getAllConfigAsConfigKeyMap());
-    }
-
-    public void removeFromLocalBag(String key) {
-        localConfigBag.remove(key);
-        ownConfig.remove(key);
-    }
-
-    public void clearInheritedConfig() {
-        inheritedConfig.clear();
-        inheritedConfigBag.clear();
-    }
-
-    @Override
-    public EntityConfigMap submap(Predicate<ConfigKey<?>> filter) {
-        EntityConfigMap m = new EntityConfigMap(entity, Maps.<ConfigKey<?>, Object>newLinkedHashMap());
-        for (Map.Entry<ConfigKey<?>,Object> entry: inheritedConfig.entrySet())
-            if (filter.apply(entry.getKey()))
-                m.inheritedConfig.put(entry.getKey(), entry.getValue());
-        synchronized (ownConfig) {
-            for (Map.Entry<ConfigKey<?>,Object> entry: ownConfig.entrySet())
-                if (filter.apply(entry.getKey()))
-                    m.ownConfig.put(entry.getKey(), entry.getValue());
-        }
-        return m;
-    }
-
-    @Override
-    public String toString() {
-        Map<ConfigKey<?>, Object> sanitizeConfig;
-        synchronized (ownConfig) {
-            sanitizeConfig = Sanitizer.sanitize(ownConfig);
-        }
-        return super.toString()+"[own="+sanitizeConfig+"; inherited="+Sanitizer.sanitize(inheritedConfig)+"]";
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityTransientCopyInternal.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityTransientCopyInternal.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityTransientCopyInternal.java
deleted file mode 100644
index 09a8fdf..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityTransientCopyInternal.java
+++ /dev/null
@@ -1,121 +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.core.entity.internal;
-
-import java.util.Collection;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-import org.apache.brooklyn.api.effector.Effector;
-import org.apache.brooklyn.api.entity.Application;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityType;
-import org.apache.brooklyn.api.entity.Group;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.mgmt.ExecutionContext;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.api.mgmt.rebind.RebindSupport;
-import org.apache.brooklyn.api.mgmt.rebind.mementos.EntityMemento;
-import org.apache.brooklyn.api.objs.BrooklynObject.TagSupport;
-import org.apache.brooklyn.api.policy.Policy;
-import org.apache.brooklyn.api.sensor.AttributeSensor;
-import org.apache.brooklyn.api.sensor.Enricher;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
-import org.apache.brooklyn.core.entity.EntityInternal;
-import org.apache.brooklyn.core.entity.EntityInternal.FeedSupport;
-import org.apache.brooklyn.core.mgmt.internal.EntityManagementSupport;
-import org.apache.brooklyn.core.objs.proxy.EntityProxyImpl;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.guava.Maybe;
-
-import com.google.common.annotations.Beta;
-
-/** 
- * Selected methods from {@link EntityInternal} and parents which are permitted
- * for entities being loaded in read-only mode, enforced by {@link EntityProxyImpl}.
- * <p>
- * Some of these methods do expose write capabilities, but such modifications are likely
- * to be temporary, discarded on next rebind. Callers must take care with any such invocations.
- * (The primary intent of this interface is to catch and prevent *most* such invocations!)
- */
-@Beta
-public interface EntityTransientCopyInternal {
-
-    // TODO For feeds() and config(), need to ensure mutator methods on returned object are not invoked.
-    
-    // from Entity
-    
-    String getId();
-    long getCreationTime();
-    String getDisplayName();
-    @Nullable String getIconUrl();
-    EntityType getEntityType();
-    Application getApplication();
-    String getApplicationId();
-    Entity getParent();
-    Collection<Entity> getChildren();
-    Collection<Policy> getPolicies();
-    Collection<Enricher> getEnrichers();
-    Collection<Group> getGroups();
-    Collection<Location> getLocations();
-    <T> T getAttribute(AttributeSensor<T> sensor);
-    <T> T getConfig(ConfigKey<T> key);
-    <T> T getConfig(HasConfigKey<T> key);
-    Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited);
-    Maybe<Object> getConfigRaw(HasConfigKey<?> key, boolean includeInherited);
-    TagSupport tags();
-    String getCatalogItemId();
-
-    
-    // from entity local
-    
-    @Deprecated <T> T getConfig(ConfigKey<T> key, T defaultValue);
-    @Deprecated <T> T getConfig(HasConfigKey<T> key, T defaultValue);
-
-    
-    // from EntityInternal:
-    
-    @Deprecated EntityConfigMap getConfigMap();
-    @Deprecated Map<ConfigKey<?>,Object> getAllConfig();
-    // for rebind mainly:
-    @Deprecated ConfigBag getAllConfigBag();
-    @Deprecated ConfigBag getLocalConfigBag();
-    @SuppressWarnings("rawtypes")
-    Map<AttributeSensor, Object> getAllAttributes();
-    EntityManagementSupport getManagementSupport();
-    ManagementContext getManagementContext();
-    Effector<?> getEffector(String effectorName);
-    @Deprecated FeedSupport getFeedSupport();
-    FeedSupport feeds();
-    RebindSupport<EntityMemento> getRebindSupport();
-    // for REST calls on read-only entities which want to resolve values
-    ExecutionContext getExecutionContext();
-    void setCatalogItemId(String id);
-    
-    /** more methods, but which are only on selected entities */
-    public interface SpecialEntityTransientCopyInternal {
-        // from Group
-        Collection<Entity> getMembers();
-        boolean hasMember(Entity member);
-        Integer getCurrentSize();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/Lifecycle.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/Lifecycle.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/Lifecycle.java
deleted file mode 100644
index 68b316e..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/Lifecycle.java
+++ /dev/null
@@ -1,187 +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.core.entity.lifecycle;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.core.config.render.RendererHints;
-import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.util.core.flags.TypeCoercions;
-import org.apache.brooklyn.util.text.StringFunctions;
-
-import com.google.common.base.CaseFormat;
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.base.Preconditions;
-
-/**
- * An enumeration representing the status of an {@link org.apache.brooklyn.api.entity.Entity}.
- */
-public enum Lifecycle {
-    /**
-     * The entity has just been created.
-     *
-     * This stage encompasses the contruction. Once this stage is
-     * complete, the basic set of sensors will be available, apart from any that require the entity to be active or
-     * deployed to a {@link Location}.
-     */
-    CREATED,
-
-    /**
-     * The entity is starting.
-     * <p>
-     * This stage is typically entered when the {@link Startable#START} effector 
-     * is called, to undertake the startup operations from the management plane.
-     * When this completes the entity will normally transition to 
-     * {@link Lifecycle#RUNNING}. 
-     */
-    STARTING,
-
-    /**
-     * The entity service is expected to be running. In healthy operation, {@link Attributes#SERVICE_UP} will be true,
-     * or will shortly be true if all service start actions have been completed and we are merely waiting for it to be running. 
-     */
-    RUNNING,
-
-    /**
-     * The entity is stopping.
-     *
-     * This stage is activated when the 
-     * {@link Startable#STOP} effector is called. The entity service is stopped. 
-     * Sensors that provide data from the running entity may be cleared and subscriptions cancelled.
-     */
-    STOPPING,
-
-    /**
-     * The entity is not expected to be active.
-     *
-     * This stage is entered when an entity is stopped, or may be entered when an entity is 
-     * fully created but not started. It may or may not be removed from the location(s) it was assigned,
-     * and it will typically not be providing new sensor data apart.
-     */
-    STOPPED,
-
-    /**
-     * The entity is destroyed.
-     *
-     * The entity will be unmanaged and removed from any groups and from its parent.
-     */
-    DESTROYED,
-
-    /**
-     * Entity error state.
-     *
-     * This stage is reachable from any other stage if an error occurs or an exception is thrown.
-     */
-    ON_FIRE;
-
-    /**
-     * The text representation of the {@link #name()}.
-     *
-     * This is formatted as lower case characters, with hyphens instead of spaces.
-     */
-    public String value() {
-       return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, name());
-    }
-
-    /** @see #value() */
-    @Override
-    public String toString() { return value(); }
-
-    /**
-     * Creates a {@link Lifecycle} from a text representation.
-     *
-     * This accepts the text representations output by the {@link #value()} method for each entry.
-     *
-     * @see #value()
-     */
-    public static Lifecycle fromValue(String v) {
-       try {
-          return valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, v));
-       } catch (IllegalArgumentException iae) {
-          return ON_FIRE;
-       }
-    }
-    
-    public static class Transition implements Serializable {
-        private static final long serialVersionUID = 603419184398753502L;
-        
-        final Lifecycle state;
-        final long timestampUtc;
-        
-        public Transition(Lifecycle state, Date timestamp) {
-            this.state = Preconditions.checkNotNull(state, "state");
-            this.timestampUtc = Preconditions.checkNotNull(timestamp, "timestamp").getTime();
-        }
-        
-        public Lifecycle getState() {
-            return state;
-        }
-        public Date getTimestamp() {
-            return new Date(timestampUtc);
-        }
-        
-        @Override
-        public int hashCode() {
-            return Objects.hashCode(state, timestampUtc);
-        }
-        
-        @Override
-        public boolean equals(Object obj) {
-            if (!(obj instanceof Transition)) return false;
-            if (!state.equals(((Transition)obj).getState())) return false;
-            if (timestampUtc != ((Transition)obj).timestampUtc) return false;
-            return true;
-        }
-        
-        @Override
-        public String toString() {
-            return state+" @ "+timestampUtc+" / "+new Date(timestampUtc);
-        }
-    }
-    
-    protected static class TransitionCoalesceFunction implements Function<String, Transition> {
-        private static final Pattern TRANSITION_PATTERN = Pattern.compile("^([\\w-]+)\\s+@\\s+(\\d+).*");
-
-        @Override
-        public Transition apply(final String input) {
-            if (input != null) {
-                Matcher m = TRANSITION_PATTERN.matcher(input);
-                if (m.matches()) {
-                    Lifecycle state = Lifecycle.valueOf(m.group(1).toUpperCase().replace('-', '_'));
-                    long time = Long.parseLong(m.group(2));
-                    return new Transition(state, new Date(time));
-                } else {
-                    throw new IllegalStateException("Serialized Lifecycle.Transition can't be parsed: " + input);
-                }
-            } else {
-                return null;
-            }
-        }
-    }
-
-    static {
-        TypeCoercions.registerAdapter(String.class, Transition.class, new TransitionCoalesceFunction());
-        RendererHints.register(Transition.class, RendererHints.displayValue(StringFunctions.toStringFunction()));
-    }
-}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/PolicyDescriptor.java
----------------------------------------------------------------------
diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/PolicyDescriptor.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/PolicyDescriptor.java
deleted file mode 100644
index ee063cb..0000000
--- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/entity/lifecycle/PolicyDescriptor.java
+++ /dev/null
@@ -1,68 +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.core.entity.lifecycle;
-
-import org.apache.brooklyn.api.policy.Policy;
-import org.apache.brooklyn.core.entity.AbstractEntity;
-
-import com.google.common.base.Objects;
-
-/** Emitted as part of {@link AbstractEntity#POLICY_ADDED} and {@link AbstractEntity#POLICY_REMOVED} */
-public class PolicyDescriptor {
-
-    private final String id;
-    private final String type;
-    private final String name;
-
-    public PolicyDescriptor(Policy policy) {
-        this.id = policy.getId();
-        this.type = policy.getPolicyType().getName();
-        this.name = policy.getDisplayName();
-    }
-    public String getId() {
-        return id;
-    }
-    
-    public String getPolicyType() {
-        return type;
-    }
-    
-    public String getName() {
-        return name;
-    }
-    
-    @Override
-    public boolean equals(Object other) {
-        if (!(other instanceof PolicyDescriptor)) {
-            return false;
-        }
-        PolicyDescriptor o = (PolicyDescriptor) other;
-        return Objects.equal(id, o.id) && Objects.equal(type, o.type) && Objects.equal(name, o.name);
-    }
-    
-    @Override
-    public int hashCode() {
-        return id.hashCode();
-    }
-    
-    @Override
-    public String toString() {
-        return Objects.toStringHelper(this).add("id", id).add("type", type).add("name",  name).omitNullValues().toString();
-    }
-}