Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package brooklyn.location.jclouds;
 
public class CloudMachineNamer {
    private ConfigBag setup;
    public CloudMachineNamer(ConfigBag setup) {
        this. = setup;
    }
    
    public String generateNewGroupId() {
        Object context = .peek(.);
        Entity entity = null;
        if (context instanceof Entityentity = (Entitycontext;
        
        StringShortener shortener = Strings.shortener().separator("-");
        shortener.append("system""brooklyn");
        
        // randId often not necessary, as an 8-char hex identifier is added later (in jclouds? can we override?)
        // however it can be useful to have this early in the string, to prevent collisions in places where it is abbreviated 
        shortener.
            append("randId", Identifiers.makeRandomId(4));
        
        String user = System.getProperty("user.name");
        if (!"brooklyn".equals(user))
            // include user; unless the user is 'brooklyn', as 'brooklyn-brooklyn-' is just silly!
            shortener.append("user"user);
        
        if (entity!=null) {
            Application app = entity.getApplication();
            if (app!=null) {
                shortener.
                    append("app"shortName(app)).
                    append("appId"app.getId());
            }
            shortener.append("entity"shortName(entity)).
                append("entityId"entity.getId());
        } else if (context!=null) {
            shortener.append("context"context.toString());
        }
        
        shortener.
            truncate("user", 12).
            truncate("app", 16).
            truncate("entity", 16).
            truncate("appId", 4).
            truncate("entityId", 4).
            truncate("context", 12);
        
        shortener.
            canTruncate("user", 8).
            canTruncate("app", 5).
            canTruncate("entity", 5).
            canTruncate("system", 2).
            canTruncate("app", 3).
            canTruncate("entity", 3).
            canRemove("app").
            canTruncate("user", 4).
            canRemove("entity").
            canTruncate("context", 4).
            canTruncate("randId", 2).
            canRemove("user").
            canTruncate("appId", 2).
            canRemove("appId");
        
        int len = 52;  // allows for 9 chars (dash plus 8 for hex id) added by jclouds, without hitting common 64 boundary
        if ("vcloud".equals.peek(.) )) len = 15;
        // TODO other cloud max length rules
        
        String s = shortener.getStringOfMaxLength(len);
        return sanitize(s).toLowerCase();
    }
    private String shortName(Object x) {
        if (x instanceof HasShortName) {
            return ((HasShortName)x).getShortName();
        }
        if (x instanceof Entity) {
            return ((Entity)x).getDisplayName();
        }
        return x.toString();
    }
    public static String sanitize(String s) {
        return s.replaceAll("[^_A-Za-z0-9]+""-");
    }
New to GrepCode? Check out our FAQ X