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 2015/12/23 12:06:48 UTC

[25/71] [abbrv] incubator-brooklyn git commit: [SPLITPREP] move more PR items to the right place

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynPropertiesImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynPropertiesImpl.java b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynPropertiesImpl.java
deleted file mode 100644
index 023b3e3..0000000
--- a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynPropertiesImpl.java
+++ /dev/null
@@ -1,477 +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.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import groovy.lang.Closure;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Properties;
-
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
-import org.apache.brooklyn.core.config.BasicConfigKey;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.ResourceUtils;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.core.flags.TypeCoercions;
-import org.apache.brooklyn.util.guava.Maybe;
-import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.text.StringFunctions;
-import org.apache.brooklyn.util.text.Strings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.CharMatcher;
-import com.google.common.base.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.base.Throwables;
-import com.google.common.collect.Maps;
-
-/**
- * TODO methods in this class are not thread safe.
- * intention is that they are set during startup and not modified thereafter.
- */
-@SuppressWarnings("rawtypes")
-public class BrooklynPropertiesImpl extends LinkedHashMap implements BrooklynProperties {
-
-    private static final long serialVersionUID = -945875483083108978L;
-    private static final Logger LOG = LoggerFactory.getLogger(BrooklynPropertiesImpl.class);
-
-    public static class Factory {
-        /** creates a new empty {@link BrooklynPropertiesImpl} */
-        public static BrooklynPropertiesImpl newEmpty() {
-            return new BrooklynPropertiesImpl();
-        }
-
-        /** creates a new {@link BrooklynPropertiesImpl} with contents loaded 
-         * from the usual places, including *.properties files and environment variables */
-        public static BrooklynPropertiesImpl newDefault() {
-            return new Builder(true).build();
-        }
-
-        public static Builder builderDefault() {
-            return new Builder(true);
-        }
-
-        public static Builder builderEmpty() {
-            return new Builder(false);
-        }
-
-        public static class Builder {
-            private String defaultLocationMetadataUrl;
-            private String globalLocationMetadataFile = null;
-            private String globalPropertiesFile = null;
-            private String localPropertiesFile = null;
-            private BrooklynPropertiesImpl originalProperties = null;
-            
-            /** @deprecated since 0.7.0 use static methods in {@link Factory} to create */
-            public Builder() {
-                this(true);
-            }
-            
-            private Builder(boolean setGlobalFileDefaults) {
-                resetDefaultLocationMetadataUrl();
-                if (setGlobalFileDefaults) {
-                    resetGlobalFiles();
-                }
-            }
-            
-            public Builder resetDefaultLocationMetadataUrl() {
-                defaultLocationMetadataUrl = "classpath://brooklyn/location-metadata.properties";
-                return this;
-            }
-            public Builder resetGlobalFiles() {
-                defaultLocationMetadataUrl = "classpath://brooklyn/location-metadata.properties";
-                globalLocationMetadataFile = Os.mergePaths(Os.home(), ".brooklyn", "location-metadata.properties");
-                globalPropertiesFile = Os.mergePaths(Os.home(), ".brooklyn", "brooklyn.properties");
-                return this;
-            }
-            
-            /**
-             * Creates a Builder that when built, will return the BrooklynProperties passed to this constructor
-             */
-            private Builder(BrooklynPropertiesImpl originalProperties) {
-                this.originalProperties = new BrooklynPropertiesImpl().addFromMap(originalProperties);
-            }
-            
-            /**
-             * The URL of a default location-metadata.properties (for meta-data about different locations, such as iso3166 and global lat/lon). 
-             * Defaults to classpath://brooklyn/location-metadata.properties
-             */
-            public Builder defaultLocationMetadataUrl(String val) {
-                defaultLocationMetadataUrl = checkNotNull(val, "file");
-                return this;
-            }
-            
-            /**
-             * The URL of a location-metadata.properties file that appends to and overwrites values in the locationMetadataUrl. 
-             * Defaults to ~/.brooklyn/location-metadata.properties
-             */
-            public Builder globalLocationMetadataFile(String val) {
-                globalLocationMetadataFile = checkNotNull(val, "file");
-                return this;
-            }
-            
-            /**
-             * The URL of a shared brooklyn.properties file. Defaults to ~/.brooklyn/brooklyn.properties.
-             * Can be null to disable.
-             */
-            public Builder globalPropertiesFile(String val) {
-                globalPropertiesFile = val;
-                return this;
-            }
-            
-            @Beta
-            public boolean hasDelegateOriginalProperties() {
-                return this.originalProperties==null;
-            }
-            
-            /**
-             * The URL of a brooklyn.properties file specific to this launch. Appends to and overwrites values in globalPropertiesFile.
-             */
-            public Builder localPropertiesFile(String val) {
-                localPropertiesFile = val;
-                return this;
-            }
-            
-            public BrooklynPropertiesImpl build() {
-                if (originalProperties != null) 
-                    return new BrooklynPropertiesImpl().addFromMap(originalProperties);
-                
-                BrooklynPropertiesImpl properties = new BrooklynPropertiesImpl();
-
-                // TODO Could also read from http://brooklyn.io, for up-to-date values?
-                // But might that make unit tests run very badly when developer is offline?
-                addPropertiesFromUrl(properties, defaultLocationMetadataUrl, false);
-                
-                addPropertiesFromFile(properties, globalLocationMetadataFile);
-                addPropertiesFromFile(properties, globalPropertiesFile);
-                addPropertiesFromFile(properties, localPropertiesFile);
-                
-                properties.addEnvironmentVars();
-                properties.addSystemProperties();
-
-                return properties;
-            }
-
-            public static Builder fromProperties(BrooklynPropertiesImpl brooklynProperties) {
-                return new Builder(brooklynProperties);
-            }
-
-            @Override
-            public String toString() {
-                return Objects.toStringHelper(this)
-                        .omitNullValues()
-                        .add("originalProperties", originalProperties)
-                        .add("defaultLocationMetadataUrl", defaultLocationMetadataUrl)
-                        .add("globalLocationMetadataUrl", globalLocationMetadataFile)
-                        .add("globalPropertiesFile", globalPropertiesFile)
-                        .add("localPropertiesFile", localPropertiesFile)
-                        .toString();
-            }
-        }
-        
-        private static void addPropertiesFromUrl(BrooklynPropertiesImpl p, String url, boolean warnIfNotFound) {
-            if (url==null) return;
-            
-            try {
-                p.addFrom(ResourceUtils.create(BrooklynPropertiesImpl.class).getResourceFromUrl(url));
-            } catch (Exception e) {
-                if (warnIfNotFound)
-                    LOG.warn("Could not load {}; continuing", url);
-                if (LOG.isTraceEnabled()) LOG.trace("Could not load "+url+"; continuing", e);
-            }
-        }
-        
-        private static void addPropertiesFromFile(BrooklynPropertiesImpl p, String file) {
-            if (file==null) return;
-            
-            String fileTidied = Os.tidyPath(file);
-            File f = new File(fileTidied);
-
-            if (f.exists()) {
-                p.addFrom(f);
-            }
-        }
-    }
-
-    protected BrooklynPropertiesImpl() {
-    }
-
-    public BrooklynPropertiesImpl addEnvironmentVars() {
-        addFrom(System.getenv());
-        return this;
-    }
-
-    public BrooklynPropertiesImpl addSystemProperties() {
-        addFrom(System.getProperties());
-        return this;
-    }
-
-    public BrooklynPropertiesImpl addFrom(ConfigBag cfg) {
-        addFrom(cfg.getAllConfig());
-        return this;
-    }
-
-    @SuppressWarnings("unchecked")
-    public BrooklynPropertiesImpl addFrom(Map map) {
-        putAll(Maps.transformValues(map, StringFunctions.trim()));
-        return this;
-    }
-
-    public BrooklynPropertiesImpl addFrom(InputStream i) {
-        // Ugly way to load them in order, but Properties is a Hashtable so loses order otherwise.
-        @SuppressWarnings({ "serial" })
-        Properties p = new Properties() {
-            @Override
-            public synchronized Object put(Object key, Object value) {
-                // Trim the string values to remove leading and trailing spaces
-                String s = (String) value;
-                if (Strings.isBlank(s)) {
-                    s = Strings.EMPTY;
-                } else {
-                    s = CharMatcher.BREAKING_WHITESPACE.trimFrom(s);
-                }
-                return BrooklynPropertiesImpl.this.put(key, s);
-            }
-        };
-        try {
-            p.load(i);
-        } catch (IOException e) {
-            throw Throwables.propagate(e);
-        }
-        return this;
-    }
-    
-    public BrooklynPropertiesImpl addFrom(File f) {
-        if (!f.exists()) {
-            LOG.warn("Unable to find file '"+f.getAbsolutePath()+"' when loading properties; ignoring");
-            return this;
-        } else {
-            try {
-                return addFrom(new FileInputStream(f));
-            } catch (FileNotFoundException e) {
-                throw Throwables.propagate(e);
-            }
-        }
-    }
-    public BrooklynPropertiesImpl addFrom(URL u) {
-        try {
-            return addFrom(u.openStream());
-        } catch (IOException e) {
-            throw new RuntimeException("Error reading properties from "+u+": "+e, e);
-        }
-    }
-    /**
-     * @see ResourceUtils#getResourceFromUrl(String)
-     *
-     * of the form form file:///home/... or http:// or classpath://xx ;
-     * for convenience if not starting with xxx: it is treated as a classpath reference or a file;
-     * throws if not found (but does nothing if argument is null)
-     */
-    public BrooklynPropertiesImpl addFromUrl(String url) {
-        try {
-            if (url==null) return this;
-            return addFrom(ResourceUtils.create(this).getResourceFromUrl(url));
-        } catch (Exception e) {
-            throw new RuntimeException("Error reading properties from "+url+": "+e, e);
-        }
-    }
-
-    /** expects a property already set in scope, whose value is acceptable to {@link #addFromUrl(String)};
-     * if property not set, does nothing */
-    public BrooklynPropertiesImpl addFromUrlProperty(String urlProperty) {
-        String url = (String) get(urlProperty);
-        if (url==null) addFromUrl(url);
-        return this;
-    }
-
-    /**
-    * adds the indicated properties
-    */
-    public BrooklynPropertiesImpl addFromMap(Map properties) {
-        putAll(properties);
-        return this;
-    }
-
-    /** inserts the value under the given key, if it was not present */
-    public boolean putIfAbsent(String key, Object value) {
-        if (containsKey(key)) return false;
-        put(key, value);
-        return true;
-    }
-
-   /** @deprecated attempts to call get with this syntax are probably mistakes; get(key, defaultValue) is fine but
-    * Map is unlikely the key, much more likely they meant getFirst(flags, key).
-    */
-   @Deprecated
-   public String get(Map flags, String key) {
-       LOG.warn("Discouraged use of 'BrooklynProperties.get(Map,String)' (ambiguous); use getFirst(Map,String) or get(String) -- assuming the former");
-       LOG.debug("Trace for discouraged use of 'BrooklynProperties.get(Map,String)'",
-           new Throwable("Arguments: "+flags+" "+key));
-       return getFirst(flags, key);
-   }
-
-    /** returns the value of the first key which is defined
-     * <p>
-     * takes the following flags:
-     * 'warnIfNone', 'failIfNone' (both taking a boolean (to use default message) or a string (which is the message));
-     * and 'defaultIfNone' (a default value to return if there is no such property); defaults to no warning and null response */
-    @Override
-    public String getFirst(String ...keys) {
-       return getFirst(MutableMap.of(), keys);
-    }
-    @Override
-    public String getFirst(Map flags, String ...keys) {
-        for (String k: keys) {
-            if (k!=null && containsKey(k)) return (String) get(k);
-        }
-        if (flags.get("warnIfNone")!=null && !Boolean.FALSE.equals(flags.get("warnIfNone"))) {
-            if (Boolean.TRUE.equals(flags.get("warnIfNone")))
-                LOG.warn("Unable to find Brooklyn property "+keys);
-            else
-                LOG.warn(""+flags.get("warnIfNone"));
-        }
-        if (flags.get("failIfNone")!=null && !Boolean.FALSE.equals(flags.get("failIfNone"))) {
-            Object f = flags.get("failIfNone");
-            if (f instanceof Closure)
-                ((Closure)f).call((Object[])keys);
-            if (Boolean.TRUE.equals(f))
-                throw new NoSuchElementException("Brooklyn unable to find mandatory property "+keys[0]+
-                    (keys.length>1 ? " (or "+(keys.length-1)+" other possible names, full list is "+Arrays.asList(keys)+")" : "") );
-            else
-                throw new NoSuchElementException(""+f);
-        }
-        if (flags.get("defaultIfNone")!=null) {
-            return (String) flags.get("defaultIfNone");
-        }
-        return null;
-    }
-
-    @Override
-    public String toString() {
-        return "BrooklynProperties["+size()+"]";
-    }
-
-    /** like normal map.put, except config keys are dereferenced on the way in */
-    @SuppressWarnings("unchecked")
-    public Object put(Object key, Object value) {
-        if (key instanceof HasConfigKey) key = ((HasConfigKey)key).getConfigKey().getName();
-        if (key instanceof ConfigKey) key = ((ConfigKey)key).getName();
-        return super.put(key, value);
-    }
-
-    /** like normal map.putAll, except config keys are dereferenced on the way in */
-    @Override
-    public void putAll(Map vals) {
-        for (Map.Entry<?,?> entry : ((Map<?,?>)vals).entrySet()) {
-            put(entry.getKey(), entry.getValue());
-        }
-    }
-    
-    @SuppressWarnings("unchecked")
-    public <T> Object put(HasConfigKey<T> key, T value) {
-        return super.put(key.getConfigKey().getName(), value);
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T> Object put(ConfigKey<T> key, T value) {
-        return super.put(key.getName(), value);
-    }
-    
-    public <T> boolean putIfAbsent(ConfigKey<T> key, T value) {
-        return putIfAbsent(key.getName(), value);
-    }
-    
-    @Override
-    public <T> T getConfig(ConfigKey<T> key) {
-        return getConfig(key, null);
-    }
-
-    @Override
-    public <T> T getConfig(HasConfigKey<T> key) {
-        return getConfig(key.getConfigKey(), null);
-    }
-
-    @Override
-    public <T> T getConfig(HasConfigKey<T> key, T defaultValue) {
-        return getConfig(key.getConfigKey(), defaultValue);
-    }
-
-    @Override
-    public <T> T getConfig(ConfigKey<T> key, T defaultValue) {
-        // TODO does not support MapConfigKey etc where entries use subkey notation; for now, access using submap
-        if (!containsKey(key.getName())) {
-            if (defaultValue!=null) return defaultValue;
-            return key.getDefaultValue();
-        }
-        Object value = get(key.getName());
-        if (value==null) return null;
-        // no evaluation / key extraction here
-        return TypeCoercions.coerce(value, key.getTypeToken());
-    }
-
-    @Override
-    public Object getRawConfig(ConfigKey<?> key) {
-        return get(key.getName());
-    }
-    
-    @Override
-    public Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited) {
-        if (containsKey(key.getName())) return Maybe.of(get(key.getName()));
-        return Maybe.absent();
-    }
-
-    @Override
-    public Map<ConfigKey<?>, Object> getAllConfig() {
-        Map<ConfigKey<?>, Object> result = new LinkedHashMap<ConfigKey<?>, Object>();
-        for (Object entry: entrySet())
-            result.put(new BasicConfigKey<Object>(Object.class, ""+((Map.Entry)entry).getKey()), ((Map.Entry)entry).getValue());
-        return result;
-    }
-
-    @Override
-    public BrooklynPropertiesImpl submap(Predicate<ConfigKey<?>> filter) {
-        BrooklynPropertiesImpl result = Factory.newEmpty();
-        for (Object entry: entrySet()) {
-            ConfigKey<?> k = new BasicConfigKey<Object>(Object.class, ""+((Map.Entry)entry).getKey());
-            if (filter.apply(k))
-                result.put(((Map.Entry)entry).getKey(), ((Map.Entry)entry).getValue());
-        }
-        return result;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public Map<String, Object> asMapWithStringKeys() {
-        return this;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/CampYamlParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/CampYamlParser.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/CampYamlParser.java
deleted file mode 100644
index 35841be..0000000
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/CampYamlParser.java
+++ /dev/null
@@ -1,34 +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.mgmt.internal;
-
-import java.util.Map;
-
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.core.config.ConfigKeys;
-
-public interface CampYamlParser {
-
-    ConfigKey<CampYamlParser> YAML_PARSER_KEY = ConfigKeys.newConfigKey(CampYamlParser.class, "brooklyn.camp.yamlParser");
-
-    Map<String, Object> parse(Map<String, Object> map);
-    
-    Object parse(String val);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java
deleted file mode 100644
index ae0c7a5..0000000
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java
+++ /dev/null
@@ -1,370 +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.mgmt.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.File;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-
-import org.apache.brooklyn.api.mgmt.ExecutionContext;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.util.core.config.ConfigBag;
-import org.apache.brooklyn.util.core.flags.TypeCoercions;
-import org.apache.brooklyn.util.core.task.DeferredSupplier;
-import org.apache.brooklyn.util.core.task.Tasks;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-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;
-
-/**
- * Delegates to another {@link BrooklynProperties} implementation, but intercepts all calls to get.
- * The results are transformed: if they are in the external-config format then they are 
- * automatically converted to {@link DeferredSupplier}.
- * 
- * The external-config format is that same as that for camp-yaml blueprints (i.e. 
- * {@code $brooklyn:external("myprovider", "mykey")}.
- */
-public class DeferredBrooklynProperties implements BrooklynProperties {
-
-    private static final Logger LOG = LoggerFactory.getLogger(DeferredBrooklynProperties.class);
-
-    private static final String BROOKLYN_YAML_PREFIX = "$brooklyn:";
-    
-    private final BrooklynProperties delegate;
-    private final ManagementContextInternal mgmt;
-
-    public DeferredBrooklynProperties(BrooklynProperties delegate, ManagementContextInternal mgmt) {
-        this.delegate = checkNotNull(delegate, "delegate");
-        this.mgmt = checkNotNull(mgmt, "mgmt");
-    }
-    
-    private Object transform(ConfigKey<?> key, Object value) {
-        if (value instanceof CharSequence) {
-            String raw = value.toString();
-            if (raw.startsWith(BROOKLYN_YAML_PREFIX)) {
-                CampYamlParser parser = mgmt.getConfig().getConfig(CampYamlParser.YAML_PARSER_KEY);
-                if (parser == null) {
-                    // TODO Should we fail or return the untransformed value?
-                    // Problem is this gets called during initialisation, e.g. by BrooklynFeatureEnablement calling asMapWithStringKeys()
-                    // throw new IllegalStateException("Cannot parse external-config for "+key+" because no camp-yaml parser available");
-                    LOG.debug("Not transforming external-config {}, as no camp-yaml parser available", key);
-                    return value;
-                }
-                return parser.parse(raw);
-            }
-        }
-        return value;
-    }
-    
-    private <T> T resolve(ConfigKey<T> key, Object value) {
-        Object transformed = transform(key, value);
-
-        Object result;
-        if (transformed instanceof DeferredSupplier) {
-            ExecutionContext exec = mgmt.getServerExecutionContext();
-            try {
-                result = Tasks.resolveValue(transformed, key.getType(), exec);
-            } catch (ExecutionException | InterruptedException e) {
-                throw Exceptions.propagate(e);
-            }
-        } else {
-            result = transformed;
-        }
-
-        return TypeCoercions.coerce(result, key.getTypeToken());
-    }
-    
-    @Override
-    public <T> T getConfig(ConfigKey<T> key) {
-        T raw = delegate.getConfig(key);
-        return resolve(key, raw);
-    }
-
-    @Override
-    public <T> T getConfig(HasConfigKey<T> key) {
-        T raw = delegate.getConfig(key);
-        return resolve(key.getConfigKey(), raw);
-    }
-
-    @Override
-    public <T> T getConfig(HasConfigKey<T> key, T defaultValue) {
-        T raw = delegate.getConfig(key, defaultValue);
-        return resolve(key.getConfigKey(), raw);
-    }
-
-    @Override
-    public <T> T getConfig(ConfigKey<T> key, T defaultValue) {
-        T raw = delegate.getConfig(key, defaultValue);
-        return resolve(key, raw);
-    }
-
-    @Deprecated
-    @Override
-    public Object getRawConfig(ConfigKey<?> key) {
-        return transform(key, delegate.getRawConfig(key));
-    }
-    
-    @Override
-    public Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited) {
-        Maybe<Object> result = delegate.getConfigRaw(key, includeInherited);
-        return (result.isPresent()) ? Maybe.of(transform(key, result.get())) : Maybe.absent();
-    }
-
-    @Override
-    public Map<ConfigKey<?>, Object> getAllConfig() {
-        Map<ConfigKey<?>, Object> raw = delegate.getAllConfig();
-        Map<ConfigKey<?>, Object> result = Maps.newLinkedHashMap();
-        for (Map.Entry<ConfigKey<?>, Object> entry : raw.entrySet()) {
-            result.put(entry.getKey(), transform(entry.getKey(), entry.getValue()));
-        }
-        return result;
-    }
-
-    @Override
-    public Map<String, Object> asMapWithStringKeys() {
-        Map<ConfigKey<?>, Object> raw = delegate.getAllConfig();
-        Map<String, Object> result = Maps.newLinkedHashMap();
-        for (Map.Entry<ConfigKey<?>, Object> entry : raw.entrySet()) {
-            result.put(entry.getKey().getName(), transform(entry.getKey(), entry.getValue()));
-        }
-        return result;
-    }
-
-    /**
-     * Discouraged; returns the String so if it is external config, it will be the 
-     * {@code $brooklyn:external(...)} format.
-     */
-    @Override
-    @SuppressWarnings("rawtypes")
-    @Deprecated
-    public String get(Map flags, String key) {
-        return delegate.get(flags, key);
-    }
-
-    /**
-     * Discouraged; returns the String so if it is external config, it will be the 
-     * {@code $brooklyn:external(...)} format.
-     */
-    @Override
-    public String getFirst(String ...keys) {
-        return delegate.getFirst(keys);
-    }
-    
-    /**
-     * Discouraged; returns the String so if it is external config, it will be the 
-     * {@code $brooklyn:external(...)} format.
-     */
-    @Override
-    @SuppressWarnings("rawtypes")
-    public String getFirst(Map flags, String ...keys) {
-        return delegate.getFirst(flags, keys);
-    }
-
-    @Override
-    public BrooklynProperties submap(Predicate<ConfigKey<?>> filter) {
-        BrooklynProperties submap = delegate.submap(filter);
-        return new DeferredBrooklynProperties(submap, mgmt);
-    }
-
-    @Override
-    public BrooklynProperties addEnvironmentVars() {
-        delegate.addEnvironmentVars();
-        return this;
-    }
-
-    @Override
-    public BrooklynProperties addSystemProperties() {
-        delegate.addSystemProperties();
-        return this;
-    }
-
-    @Override
-    public BrooklynProperties addFrom(ConfigBag cfg) {
-        delegate.addFrom(cfg);
-        return this;
-    }
-
-    @Override
-    @SuppressWarnings("rawtypes")
-    public BrooklynProperties addFrom(Map map) {
-        delegate.addFrom(map);
-        return this;
-    }
-
-    @Override
-    public BrooklynProperties addFrom(InputStream i) {
-        delegate.addFrom(i);
-        return this;
-    }
-    
-    @Override
-    public BrooklynProperties addFrom(File f) {
-        delegate.addFrom(f);
-        return this;
-    }
-    
-    @Override
-    public BrooklynProperties addFrom(URL u) {
-        delegate.addFrom(u);
-        return this;
-    }
-
-    @Override
-    public BrooklynProperties addFromUrl(String url) {
-        delegate.addFromUrl(url);
-        return this;
-    }
-
-    @Override
-    public BrooklynProperties addFromUrlProperty(String urlProperty) {
-        delegate.addFromUrlProperty(urlProperty);
-        return this;
-    }
-
-    @Override
-    @SuppressWarnings("rawtypes")
-    public BrooklynProperties addFromMap(Map properties) {
-        delegate.addFromMap(properties);
-        return this;
-    }
-
-    @Override
-    public boolean putIfAbsent(String key, Object value) {
-        return delegate.putIfAbsent(key, value);
-    }
-
-    @Override
-    public String toString() {
-        return delegate.toString();
-    }
-
-    @Override
-    public Object put(Object key, Object value) {
-        return delegate.put(key, value);
-    }
-
-    @Override
-    @SuppressWarnings("rawtypes")
-    public void putAll(Map vals) {
-        delegate.putAll(vals);
-    }
-    
-    @Override
-    public <T> Object put(HasConfigKey<T> key, T value) {
-        return delegate.put(key, value);
-    }
-
-    @Override
-    public <T> Object put(ConfigKey<T> key, T value) {
-        return delegate.put(key, value);
-    }
-    
-    @Override
-    public <T> boolean putIfAbsent(ConfigKey<T> key, T value) {
-        return delegate.putIfAbsent(key, value);
-    }
-    
-    
-    //////////////////////////////////////////////////////////////////////////////////
-    // Methods below from java.util.LinkedHashMap, which BrooklynProperties extends //
-    //////////////////////////////////////////////////////////////////////////////////
-    
-    @Override
-    public int size() {
-        return delegate.size();
-    }
-
-    @Override
-    public boolean isEmpty() {
-        return delegate.isEmpty();
-    }
-
-    @Override
-    public boolean containsKey(Object key) {
-        return delegate.containsKey(key);
-    }
-
-    @Override
-    public boolean containsValue(Object value) {
-        return delegate.containsValue(value);
-    }
-
-    @Override
-    public Object get(Object key) {
-        return delegate.get(key);
-    }
-
-    @Override
-    public Object remove(Object key) {
-        return delegate.remove(key);
-    }
-
-    @Override
-    public void clear() {
-        delegate.clear();
-    }
-
-    @Override
-    @SuppressWarnings("rawtypes")
-    public Set keySet() {
-        return delegate.keySet();
-    }
-
-    @Override
-    @SuppressWarnings("rawtypes")
-    public Collection values() {
-        return delegate.values();
-    }
-    
-    @Override
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public Set<Map.Entry> entrySet() {
-        return delegate.entrySet();
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        return delegate.equals(o);
-    }
-
-    @Override
-    public int hashCode() {
-        return delegate.hashCode();
-    }
-    
-    // put(Object, Object) already overridden
-    //@Override
-    //public Object put(Object key, Object value) {
-
-    // putAll(Map) already overridden
-    //@Override
-    //public void putAll(Map m) {
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigBrooklynPropertiesTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigBrooklynPropertiesTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigBrooklynPropertiesTest.java
deleted file mode 100644
index 39b444d..0000000
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigBrooklynPropertiesTest.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.camp.brooklyn;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-import org.apache.brooklyn.api.mgmt.ExecutionContext;
-import org.apache.brooklyn.camp.brooklyn.ExternalConfigYamlTest.MyExternalConfigSupplier;
-import org.apache.brooklyn.camp.brooklyn.ExternalConfigYamlTest.MyExternalConfigSupplierWithoutMapArg;
-import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.config.ConfigPredicates;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
-import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.location.jclouds.JcloudsLocation;
-import org.apache.brooklyn.test.Asserts;
-import org.apache.brooklyn.util.core.task.DeferredSupplier;
-import org.apache.brooklyn.util.core.task.Tasks;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableMap;
-
-@Test
-public class ExternalConfigBrooklynPropertiesTest extends AbstractYamlTest {
-
-    @Override
-    protected LocalManagementContext newTestManagementContext() {
-        BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
-        props.put("brooklyn.external.myprovider", MyExternalConfigSupplier.class.getName());
-        props.put("brooklyn.external.myprovider.mykey", "myval");
-        props.put("brooklyn.external.myprovider.mykey2", "myval2");
-        props.put("brooklyn.external.myproviderWithoutMapArg", MyExternalConfigSupplierWithoutMapArg.class.getName());
-        props.put("myproperty", "$brooklyn:external(\"myprovider\", \"mykey\")");
-
-        return LocalManagementContextForTests.builder(true)
-                .useProperties(props)
-                .build();
-    }
-
-    // Yaml parsing support is more generic than just external-config.
-    // Test other parsing here, even though it's not directly related to external-config.
-    @Test
-    public void testYamlLiteralFromPropertiesInLocation() throws Exception {
-        ((ManagementContextInternal)mgmt()).getBrooklynProperties().put(
-                ConfigKeys.newStringConfigKey("myDynamicProperty"), "$brooklyn:literal(\"myliteral\")");
-        
-        String val = mgmt().getConfig().getConfig(ConfigKeys.newStringConfigKey("myDynamicProperty"));
-        assertEquals(val, "myliteral");
-    }
-
-    @Test
-    public void testInvalidYamlExpression() throws Exception {
-        ((ManagementContextInternal)mgmt()).getBrooklynProperties().put(
-                ConfigKeys.newStringConfigKey("myInvalidExternal"), "$brooklyn:external");
-        
-        try {
-            String val = mgmt().getConfig().getConfig(ConfigKeys.newStringConfigKey("myInvalidExternal"));
-            Asserts.shouldHaveFailedPreviously("val="+val);
-        } catch (IllegalArgumentException e) {
-            Asserts.expectedFailureContains(e, "Error evaluating node");
-        }
-    }
-
-    @Test
-    public void testExternalisedConfigFromPropertiesInLocation() throws Exception {
-        BrooklynProperties props = ((ManagementContextInternal)mgmt()).getBrooklynProperties();
-        props.put("brooklyn.location.jclouds.aws-ec2.identity", "$brooklyn:external(\"myprovider\", \"mykey\")");
-        props.put("brooklyn.location.jclouds.aws-ec2.credential", "$brooklyn:external(\"myprovider\", \"mykey2\")");
-        
-        JcloudsLocation loc = (JcloudsLocation) mgmt().getLocationRegistry().resolve("jclouds:aws-ec2:us-east-1");
-        assertEquals(loc.getIdentity(), "myval");
-        assertEquals(loc.getCredential(), "myval2");
-    }
-
-    @Test
-    public void testExternalisedConfigInProperties() throws Exception {
-        runExternalisedConfigGetters("myproperty", "myval");
-    }
-    
-    @Test
-    public void testExternalisedConfigInAddedStringProperty() throws Exception {
-        ((ManagementContextInternal)mgmt()).getBrooklynProperties().put(
-                "myDynamicProperty", "$brooklyn:external(\"myprovider\", \"mykey\")");
-        runExternalisedConfigGetters("myDynamicProperty", "myval");
-    }
-    
-    @Test
-    public void testExternalisedConfigInAddedKeyProperty() throws Exception {
-        ((ManagementContextInternal)mgmt()).getBrooklynProperties().put(
-                ConfigKeys.newStringConfigKey("myDynamicProperty"), "$brooklyn:external(\"myprovider\", \"mykey\")");
-        runExternalisedConfigGetters("myDynamicProperty", "myval");
-    }
-    
-    @Test
-    public void testExternalisedConfigInAddedMapProperty() throws Exception {
-        ((ManagementContextInternal)mgmt()).getBrooklynProperties().addFromMap(
-                ImmutableMap.of("myDynamicProperty", "$brooklyn:external(\"myprovider\", \"mykey\")"));
-        runExternalisedConfigGetters("myDynamicProperty", "myval");
-    }
-
-    protected void runExternalisedConfigGetters(String property, String expectedVal) throws Exception {
-        runExternalisedConfigGetters(((ManagementContextInternal)mgmt()).getBrooklynProperties(), property, expectedVal, true);
-    }
-    
-    protected void runExternalisedConfigGetters(BrooklynProperties props, String property, String expectedVal, boolean testSubMap) throws Exception {
-        ExecutionContext exec = mgmt().getServerExecutionContext();
-
-        String val1 = props.getConfig(ConfigKeys.newStringConfigKey(property));
-        assertEquals(val1, expectedVal);
-        
-        DeferredSupplier<?> val2 = (DeferredSupplier<?>) props.getRawConfig(ConfigKeys.newStringConfigKey(property));
-        assertEquals(Tasks.resolveValue(val2, String.class, exec), expectedVal);
-        
-        DeferredSupplier<?> val3 = (DeferredSupplier<?>) props.getConfigRaw(ConfigKeys.newStringConfigKey(property), false).get();
-        assertEquals(Tasks.resolveValue(val3, String.class, exec), expectedVal);
-
-        DeferredSupplier<?> val4 = (DeferredSupplier<?>) props.getAllConfig().get(ConfigKeys.newStringConfigKey(property));
-        assertEquals(Tasks.resolveValue(val4, String.class, exec), expectedVal);
-        
-        String val5 = props.getFirst(property);
-        assertTrue(val5.startsWith("$brooklyn:external"), "val="+val5);
-        
-        if (testSubMap) {
-            BrooklynProperties submap = props.submap(ConfigPredicates.nameEqualTo(property));
-            runExternalisedConfigGetters(submap, property, expectedVal, false);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/GeoDnsServiceYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/GeoDnsServiceYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/GeoDnsServiceYamlTest.java
deleted file mode 100644
index 3f41e8d..0000000
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/GeoDnsServiceYamlTest.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.camp.brooklyn;
-
-import static org.testng.Assert.assertEquals;
-
-import org.apache.brooklyn.api.entity.Application;
-import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
-import org.apache.brooklyn.entity.dns.AbstractGeoDnsService;
-import org.apache.brooklyn.entity.dns.geoscaling.GeoscalingDnsService;
-import org.apache.brooklyn.entity.group.DynamicFabric;
-import org.apache.brooklyn.util.stream.Streams;
-import org.testng.annotations.Test;
-
-public class GeoDnsServiceYamlTest extends AbstractYamlTest {
-
-    @Test
-    public void testTargetGroupCanBeSetInYaml() throws Exception {
-        final String resourceName = "classpath:/" + getClass().getPackage().getName().replace('.', '/') + "/geodns.yaml";
-        final String blueprint = Streams.readFully(loadYaml(resourceName));
-        Application app = EntityManagementUtils.createUnstarted(mgmt(), blueprint);
-        GeoscalingDnsService geodns = Entities.descendants(app, GeoscalingDnsService.class).iterator().next();
-        DynamicFabric fabric = Entities.descendants(app, DynamicFabric.class).iterator().next();
-        assertEquals(geodns.config().get(AbstractGeoDnsService.ENTITY_PROVIDER), fabric);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/camp/src/test/resources/org/apache/brooklyn/camp/brooklyn/geodns.yaml
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/resources/org/apache/brooklyn/camp/brooklyn/geodns.yaml b/usage/camp/src/test/resources/org/apache/brooklyn/camp/brooklyn/geodns.yaml
deleted file mode 100644
index 3fdc7b7..0000000
--- a/usage/camp/src/test/resources/org/apache/brooklyn/camp/brooklyn/geodns.yaml
+++ /dev/null
@@ -1,42 +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.
-#
-services:
-
-- name: Web cluster
-  type: org.apache.brooklyn.entity.group.DynamicRegionsFabric
-  id: web-fabric
-
-  # Location required but test should not do any provisioning.
-  locations:
-  - localhost
-
-  memberSpec:
-    $brooklyn:entitySpec:
-      type: org.apache.brooklyn.entity.webapp.ControlledDynamicWebAppCluster
-      brooklyn.config:
-        initialSize: 0
-
-- name: Geo DNS
-  type: org.apache.brooklyn.entity.dns.geoscaling.GeoscalingDnsService
-  brooklyn.config:
-    provider: $brooklyn:component("web-fabric")
-    username: madeUp
-    password: madeUp
-    primaryDomainName: example.com
-    smartSubdomainName: test

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/qa/src/test/java/org/apache/brooklyn/qa/downstreamparent/DownstreamParentTest.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/java/org/apache/brooklyn/qa/downstreamparent/DownstreamParentTest.java b/usage/qa/src/test/java/org/apache/brooklyn/qa/downstreamparent/DownstreamParentTest.java
deleted file mode 100644
index 33c4c42..0000000
--- a/usage/qa/src/test/java/org/apache/brooklyn/qa/downstreamparent/DownstreamParentTest.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.qa.downstreamparent;
-
-import static org.testng.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.brooklyn.util.net.Networking;
-import org.apache.maven.it.Verifier;
-import org.apache.maven.shared.utils.io.FileUtils;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableMap;
-
-public class DownstreamParentTest {
-
-    private static final String PROJECTS_DIR = "src/test/projects";
-    private static final String WORK_DIR = "target/ut/";
-
-    /**
-     * Asserts that a trivial project using brooklyn-downstream-parent can be
-     * loaded into Brooklyn's catalogue and its entities deployed.
-     */
-    @Test(groups = "Integration")
-    public void testDownstreamProjectsCanBeLoadedIntoBrooklynCatalogByDefault() throws Exception {
-        int port = Networking.nextAvailablePort(57000);
-        File dir = getBasedir("downstream-parent-test");
-        Verifier verifier = new Verifier(dir.getAbsolutePath());
-        verifier.setMavenDebug(true);
-        verifier.executeGoal("post-integration-test", ImmutableMap.of(
-                "bindPort", String.valueOf(port)));
-        verifier.verifyErrorFreeLog();
-        verifier.verifyTextInLog("Hello from the init method of the HelloEntity");
-    }
-
-    /** Replicates the behaviour of getBasedir in JUnit's TestResources class */
-    public File getBasedir(String project) throws IOException {
-        File src = (new File(PROJECTS_DIR, project)).getCanonicalFile();
-        assertTrue(src.isDirectory(), "Test project directory does not exist: " + src.getPath());
-        File basedir = (new File(WORK_DIR, getClass().getSimpleName() + "_" + project)).getCanonicalFile();
-        FileUtils.deleteDirectory(basedir);
-        assertTrue(basedir.mkdirs(), "Test project working directory created");
-        FileUtils.copyDirectoryStructure(src, basedir);
-        return basedir;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/qa/src/test/projects/downstream-parent-test/README
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/projects/downstream-parent-test/README b/usage/qa/src/test/projects/downstream-parent-test/README
deleted file mode 100644
index 3f2f574..0000000
--- a/usage/qa/src/test/projects/downstream-parent-test/README
+++ /dev/null
@@ -1,5 +0,0 @@
-A successful build of this project (`mvn clean verify`) means that projects that
-use brooklyn-downstream-parent can be loaded into Brooklyn's catalogue by default.
-
-If the build fails there is almost certainly something wrong with the parent and
-the wider consumers of Brooklyn will probably face similar problems.

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/qa/src/test/projects/downstream-parent-test/pom.xml
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/projects/downstream-parent-test/pom.xml b/usage/qa/src/test/projects/downstream-parent-test/pom.xml
deleted file mode 100644
index 7e3c0e0..0000000
--- a/usage/qa/src/test/projects/downstream-parent-test/pom.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.apache.brooklyn.downstream-parent-test</groupId>
-    <artifactId>catalogue-load-test</artifactId>
-    <version>0.9.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
-    <packaging>jar</packaging>
-
-    <name>Downstream parent catalogue load test test</name>
-
-    <parent>
-        <groupId>org.apache.brooklyn</groupId>
-        <artifactId>brooklyn-downstream-parent</artifactId>
-        <version>0.9.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
-    </parent>
-
-    <repositories>
-        <repository>
-            <id>apache-snapshots</id>
-            <url>https://repository.apache.org/content/repositories/snapshots/</url>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-
-    <pluginRepositories>
-        <pluginRepository>
-            <id>sonatype-nexus-snapshots</id>
-            <name>Sonatype Nexus Snapshots</name>
-            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </pluginRepository>
-    </pluginRepositories>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.brooklyn</groupId>
-            <artifactId>brooklyn-all</artifactId>
-            <version>0.9.0-SNAPSHOT</version> <!-- BROOKLYN_VERSION -->
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>io.brooklyn.maven</groupId>
-                <artifactId>brooklyn-maven-plugin</artifactId>
-                <version>0.3.0-SNAPSHOT</version>
-                <executions>
-                    <execution>
-                        <id>Run and deploy Brooklyn</id>
-                        <goals>
-                            <goal>start-server</goal>
-                        </goals>
-                        <configuration>
-                            <bindPort>${bindPort}</bindPort>
-                            <!--
-                            Make sure that the test entities aren't already on the classpath.
-                            -->
-                            <outputDirOnClasspath>false</outputDirOnClasspath>
-                            <arguments>
-                                <argument>--catalogInitial</argument>
-                                <argument>${project.build.outputDirectory}/catalog.bom</argument>
-                            </arguments>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>Deploy entity from catalogue</id>
-                        <phase>integration-test</phase>
-                        <goals>
-                            <goal>deploy</goal>
-                        </goals>
-                        <configuration>
-                            <blueprint>${project.build.outputDirectory}/blueprint.yaml</blueprint>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>Stop Brooklyn</id>
-                        <goals>
-                            <goal>stop-server</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/qa/src/test/projects/downstream-parent-test/src/main/java/com/example/HelloEntity.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/projects/downstream-parent-test/src/main/java/com/example/HelloEntity.java b/usage/qa/src/test/projects/downstream-parent-test/src/main/java/com/example/HelloEntity.java
deleted file mode 100644
index 242708b..0000000
--- a/usage/qa/src/test/projects/downstream-parent-test/src/main/java/com/example/HelloEntity.java
+++ /dev/null
@@ -1,26 +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 com.example;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.ImplementedBy;
-
-@ImplementedBy(HelloEntityImpl.class)
-public interface HelloEntity extends Entity {
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/qa/src/test/projects/downstream-parent-test/src/main/java/com/example/HelloEntityImpl.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/projects/downstream-parent-test/src/main/java/com/example/HelloEntityImpl.java b/usage/qa/src/test/projects/downstream-parent-test/src/main/java/com/example/HelloEntityImpl.java
deleted file mode 100644
index 76d9ffd..0000000
--- a/usage/qa/src/test/projects/downstream-parent-test/src/main/java/com/example/HelloEntityImpl.java
+++ /dev/null
@@ -1,31 +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 com.example;
-
-import org.apache.brooklyn.core.entity.AbstractEntity;
-
-public class HelloEntityImpl extends AbstractEntity implements HelloEntity {
-
-    @Override
-    public void init() {
-        super.init();
-        System.out.println("Hello from the init method of the HelloEntity");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/qa/src/test/projects/downstream-parent-test/src/main/resources/blueprint.yaml
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/projects/downstream-parent-test/src/main/resources/blueprint.yaml b/usage/qa/src/test/projects/downstream-parent-test/src/main/resources/blueprint.yaml
deleted file mode 100644
index 76cc82e..0000000
--- a/usage/qa/src/test/projects/downstream-parent-test/src/main/resources/blueprint.yaml
+++ /dev/null
@@ -1,19 +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.
-#
-services:
-- type: downstream-project

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/usage/qa/src/test/projects/downstream-parent-test/src/main/resources/catalog.bom
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/projects/downstream-parent-test/src/main/resources/catalog.bom b/usage/qa/src/test/projects/downstream-parent-test/src/main/resources/catalog.bom
deleted file mode 100644
index c168c72..0000000
--- a/usage/qa/src/test/projects/downstream-parent-test/src/main/resources/catalog.bom
+++ /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.
-#
-brooklyn.catalog:
-  version: 1.0
-
-  brooklyn.libraries:
-  - "file://${project.build.directory}/${project.build.finalName}.${project.packaging}"
-
-  items:
-
-  - id: downstream-project
-    name: Downstream project
-    itemType: template
-    description: |
-      A downstream project
-    item:
-      services:
-      - type: com.example.HelloEntity

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/utils/common/src/main/java/org/apache/brooklyn/util/text/VersionComparator.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/text/VersionComparator.java b/utils/common/src/main/java/org/apache/brooklyn/util/text/VersionComparator.java
deleted file mode 100644
index 94553b0..0000000
--- a/utils/common/src/main/java/org/apache/brooklyn/util/text/VersionComparator.java
+++ /dev/null
@@ -1,199 +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.util.text;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-
-import org.apache.brooklyn.util.text.NaturalOrderComparator;
-import org.apache.brooklyn.util.text.Strings;
-
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * {@link Comparator} for version strings.
- * <p>
- * SNAPSHOT items always lowest rated, 
- * then splitting on dots,
- * using natural order comparator (so "9" < "10" and "4u8" < "4u20"),
- * and preferring segments without qualifiers ("4" > "4beta").
- * <p>
- * Impossible to follow semantics for all versioning schemes but 
- * does the obvious right thing for normal schemes
- * and pretty well in fringe cases.
- * <p>
- * See test case for lots of examples.
- */
-public class VersionComparator implements Comparator<String> {
-    
-    private static final String SNAPSHOT = "SNAPSHOT";
-
-    public static final VersionComparator INSTANCE = new VersionComparator();
-
-    public static VersionComparator getInstance() {
-        return INSTANCE;
-    }
-
-    @Override
-    public int compare(String v1, String v2) {
-        if (v1==null && v2==null) return 0;
-        if (v1==null) return -1;
-        if (v2==null) return 1;
-        
-        boolean isV1Snapshot = v1.toUpperCase().contains(SNAPSHOT);
-        boolean isV2Snapshot = v2.toUpperCase().contains(SNAPSHOT);
-        if (isV1Snapshot == isV2Snapshot) {
-            // if snapshot status is the same, look at dot-split parts first
-            return compareDotSplitParts(splitOnDot(v1), splitOnDot(v2));
-        } else {
-            // snapshot goes first
-            return isV1Snapshot ? -1 : 1;
-        }
-    }
-
-    @VisibleForTesting
-    static String[] splitOnDot(String v) {
-        return v.split("(?<=\\.)|(?=\\.)");
-    }
-    
-    private int compareDotSplitParts(String[] v1Parts, String[] v2Parts) {
-        for (int i = 0; ; i++) {
-            if (i >= v1Parts.length && i >= v2Parts.length) {
-                // end of both
-                return 0;
-            }
-            if (i == v1Parts.length) {
-                // sequence depends whether the extra part *starts with* a number
-                // ie
-                //                   2.0 < 2.0.0
-                // and
-                //   2.0.qualifier < 2.0 < 2.0.0qualifier < 2.0.0-qualifier < 2.0.0.qualifier < 2.0.0 < 2.0.9-qualifier
-                return isNumberInFirstCharPossiblyAfterADot(v2Parts, i) ? -1 : 1;
-            }
-            if (i == v2Parts.length) {
-                // as above but inverted
-                return isNumberInFirstCharPossiblyAfterADot(v1Parts, i) ? 1 : -1;
-            }
-            // not at end; compare this dot split part
-            
-            int result = compareDotSplitPart(v1Parts[i], v2Parts[i]);
-            if (result!=0) return result;
-        }
-    }
-    
-    private int compareDotSplitPart(String v1, String v2) {
-        String[] v1Parts = splitOnNonWordChar(v1);
-        String[] v2Parts = splitOnNonWordChar(v2);
-        
-        for (int i = 0; ; i++) {
-            if (i >= v1Parts.length && i >= v2Parts.length) {
-                // end of both
-                return 0;
-            }
-            if (i == v1Parts.length) {
-                // shorter set always wins here; i.e.
-                // 1-qualifier < 1
-                return 1;
-            }
-            if (i == v2Parts.length) {
-                // as above but inverted
-                return -1;
-            }
-            // not at end; compare this dot split part
-            
-            String v1p = v1Parts[i];
-            String v2p = v2Parts[i];
-            
-            if (v1p.equals(v2p)) continue;
-            
-            if (isNumberInFirstChar(v1p) || isNumberInFirstChar(v2p)) {
-                // something starting with a number is higher than something not
-                if (!isNumberInFirstChar(v1p)) return -1;
-                if (!isNumberInFirstChar(v2p)) return 1;
-                
-                // both start with numbers; can use natural order comparison *unless*
-                // one is purely a number AND the other *begins* with that number,
-                // followed by non-digit chars, in which case prefer the pure number
-                // ie:
-                //           1beta < 1
-                // but note
-                //            1 < 2beta < 11beta
-                if (isNumber(v1p) || isNumber(v2p)) {
-                    if (!isNumber(v1p)) {
-                        if (v1p.startsWith(v2p)) {
-                            if (!isNumberInFirstChar(Strings.removeFromStart(v1p, v2p))) {
-                                // v2 is a number, and v1 is the same followed by non-numbers
-                                return -1;
-                            }
-                        }
-                    }
-                    if (!isNumber(v2p)) {
-                        // as above but inverted
-                        if (v2p.startsWith(v1p)) {
-                            if (!isNumberInFirstChar(Strings.removeFromStart(v2p, v1p))) {
-                                return 1;
-                            }
-                        }
-                    }
-                    // both numbers, skip to natural order comparison
-                }
-            }
-            
-            // otherwise it is in-order
-            int result = NaturalOrderComparator.INSTANCE.compare(v1p, v2p);
-            if (result!=0) return result;
-        }
-    }
-
-    @VisibleForTesting
-    static String[] splitOnNonWordChar(String v) {
-        Collection<String> parts = new ArrayList<String>();
-        String remaining = v;
-        
-        // use lookahead to split on all non-letter non-numbers, putting them into their own buckets 
-        parts.addAll(Arrays.asList(remaining.split("(?<=[^0-9\\p{L}])|(?=[^0-9\\p{L}])")));
-        return parts.toArray(new String[parts.size()]);
-    }
-
-    @VisibleForTesting
-    static boolean isNumberInFirstCharPossiblyAfterADot(String[] parts, int i) {
-        if (parts==null || parts.length<=i) return false;
-        if (isNumberInFirstChar(parts[i])) return true;
-        if (".".equals(parts[i])) {
-            if (parts.length>i+1)
-                if (isNumberInFirstChar(parts[i+1])) 
-                    return true;
-        }
-        return false;
-    }
-
-    @VisibleForTesting
-    static boolean isNumberInFirstChar(String v) {
-        if (v==null || v.length()==0) return false;
-        return Character.isDigit(v.charAt(0));
-    }
-    
-    @VisibleForTesting
-    static boolean isNumber(String v) {
-        if (v==null || v.length()==0) return false;
-        return v.matches("[\\d]+");
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8a3c17b9/utils/common/src/test/java/org/apache/brooklyn/util/text/VersionComparatorTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/text/VersionComparatorTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/text/VersionComparatorTest.java
deleted file mode 100644
index 00fdb6e..0000000
--- a/utils/common/src/test/java/org/apache/brooklyn/util/text/VersionComparatorTest.java
+++ /dev/null
@@ -1,102 +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.util.text;
-
-import static org.testng.Assert.assertEquals;
-
-import java.util.List;
-
-import org.apache.brooklyn.util.collections.MutableList;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class VersionComparatorTest {
-
-    @Test
-    public void testStaticHelpers() {
-        Assert.assertEquals(VersionComparator.splitOnDot("a.b.cc"), new String[] { "a", ".", "b", ".", "cc" });
-        Assert.assertEquals(VersionComparator.splitOnDot("a..b-c"), new String[] { "a", ".", ".", "b-c" });
-
-        Assert.assertEquals(VersionComparator.splitOnNonWordChar("a1-b__cc9c"), new String[] { 
-            "a1", "-", "b", "_", "_", "cc9c" });
-
-        Assert.assertEquals(VersionComparator.isNumberInFirstChar("1a"), true);
-        Assert.assertEquals(VersionComparator.isNumberInFirstChar("a1"), false);
-        Assert.assertEquals(VersionComparator.isNumberInFirstChar(""), false);
-        Assert.assertEquals(VersionComparator.isNumberInFirstChar(null), false);
-        
-        Assert.assertEquals(VersionComparator.isNumber("1"), true);
-        Assert.assertEquals(VersionComparator.isNumber("1111"), true);
-        Assert.assertEquals(VersionComparator.isNumber("1a"), false);
-        Assert.assertEquals(VersionComparator.isNumber("a1"), false);
-        Assert.assertEquals(VersionComparator.isNumber(""), false);
-        Assert.assertEquals(VersionComparator.isNumber(null), false);
-    }
-    
-    @Test
-    public void testComparison() {
-        VersionComparator.INSTANCE.compare("B", "B-2");
-        
-        assertVersionOrder("0", "1");
-        assertVersionOrder("0", "0.0", "0.9", "0.10", "0.10.0", "1");
-        
-        assertVersionOrder("a", "b");
-        
-        assertVersionOrder("1beta", "1", "2beta", "11beta");
-        assertVersionOrder("beta", "0", "1beta", "1-alpha", "1", "11beta", "11-alpha", "11");
-        assertVersionOrder("1.0-a", "1.0-b", "1.0");
-        
-        assertVersionOrder("qualifier", "0qualifier", "0-qualifier", "0", "1-qualifier", "1");
-
-        assertVersionOrder("2.0.qualifier", "2.0", "2.0.0qualifier", "2.0.0-qualifier", "2.0.0.qualifier", "2.0.0");
-        assertVersionOrder("2.0.qualifier.0", "2.0", "2.0.0qualifier.0", "2.0.0-qualifier.0", "2.0.0.qualifier.0", "2.0.0", "2.0.0.0");
-        
-        assertVersionOrder("0", "0.0", "0.1", "0.1.0", "0.1.1", "0.2", "0.2.1", "1", "1.0", "2");
-        // case sensitive
-        assertVersionOrder("AA", "Aa", "aa");
-        // letters in order, ignoring case, and using natural order on numbers, splitting at word boundaries
-        assertVersionOrder("A", "B-2", "B-10", "B", "B0", "C", "b", "b1", "b9", "b10", "c", "0");
-        // and non-letter symbols are compared, in alpha order (e.g. - less than _) with dots even higher
-        assertVersionOrder("0-qual", "0", "0.1", "1-qualC", "1_qualB", "1.qualA", "1", "1.0");
-        
-        // numeric comparison works with qualifiers, preferring unqualified
-        assertVersionOrder("0--qual", "0-qual", "0-qualB", "0-qualB2", "0-qualB10", "0-qualC", "0.qualA", "0", "0.1.qual", "0.1", "1");
-        
-        // all snapshots rated lower
-        assertVersionOrder(
-            "0_SNAPSHOT", "0.1.SNAPSHOT", "1-SNAPSHOT-X-X", "1-SNAPSHOT-X", "1-SNAPSHOT-XX-X", "1-SNAPSHOT-XX", "1-SNAPSHOT", 
-            "1.0-SNAPSHOT-B", "1.0.SNAPSHOT-A", 
-            "1.2-SNAPSHOT", "1.10-SNAPSHOT",
-            "qualifer",
-            "0", "0.1", "1");
-    }
-    
-    private static void assertVersionOrder(String v1, String v2, String ...otherVersions) {
-        List<String> versions = MutableList.<String>of().append(v1, v2, otherVersions);
-        
-        for (int i=0; i<versions.size(); i++) {
-            for (int j=0; j<versions.size(); j++) {
-                assertEquals(VersionComparator.getInstance().compare(
-                        versions.get(i), versions.get(j)),
-                    new Integer(i).compareTo(j), "comparing "+versions.get(i)+" and "+versions.get(j));
-            }
-        }
-    }
-
-}