package com.intrbiz.bergamot.config.resolver.stratergy;
import java.util.LinkedHashSet;
import java.util.Set;
import com.intrbiz.bergamot.config.resolver.ObjectResolver;
public class SmartMergeSet implements ObjectResolver<Set<String>>
{
public Set<String> finish(Set<String> resolved)
{
if (resolved == null || resolved.isEmpty()) return resolved;
// stip off any merge prefixes
Set<String> finished = new LinkedHashSet<String>();
for (String item : resolved)
{
if (item != null && item.length() > 0)
{
if (item.startsWith("-") || item.startsWith("+"))
{
finished.add(item.substring(1));
}
else
{
finished.add(item);
}
}
}
return finished;
}
public Set<String> resolve(Set<String> m, Set<String> l)
{
Set<String> r = new LinkedHashSet<String>();
if (l != null)
{
for (String e : l)
{
this.merge(e, r);
}
}
if (m != null)
{
for (String e : m)
{
this.merge(e, r);
}
}
return r;
}
private void merge(String e, Set<String> c)
{
if (e != null && e.length() > 0)
{
if (e.startsWith("-"))
{
c.remove(e.substring(1));
}
else if (e.startsWith("+"))
{
String s = e.substring(1);
c.add(s);
}
else
{
c.add(e);
}
}
}
}