WrapUnwarpTools.java
package eu.javaexperience.interfaces.simple;
import eu.javaexperience.text.StringTools;
public class WrapUnwarpTools
{
public static WrapUnwrap<String, String> noWrap = new WrapUnwrap<String, String>()
{
public String wrap(String b)
{
return b;
}
@Override
public String unwrap(String w)
{
return w;
}
};
public static WrapUnwrap<String, String> withPrefix(final String prefix)
{
return new WrapUnwrap<String, String>()
{
@Override
public String wrap(String b)
{
return prefix+b;
}
@Override
public String unwrap(String w)
{
if(!w.startsWith(prefix))
{
return null;
}
return StringTools.getSubstringAfterFirstString(w, prefix, null);
}
};
}
public static <F, T> WrapUnwrap<T, F> inverse(WrapUnwrap<F, T> wu)
{
return new WrapUnwrap<T, F>()
{
@Override
public T wrap(F b)
{
return wu.unwrap(b);
}
@Override
public F unwrap(T w)
{
return wu.wrap(w);
}
};
}
public static <F, I ,T> WrapUnwrap<T, F> chain
(
WrapUnwrap<I, F> first,
WrapUnwrap<T, I> last
)
{
return new WrapUnwrap<T, F>()
{
@Override
public T wrap(F b)
{
return last.wrap(first.wrap(b));
}
@Override
public F unwrap(T w)
{
return first.unwrap(last.unwrap(w));
}
};
}
public static void main(String[] args)
{
String url = "https://site.tld/dir/file.ext";
String ret = "/home/user/download/dir/file.ext";
WrapUnwrap<String, String> c = chain
(
inverse(withPrefix("https://site.tld")),
withPrefix("/home/user/download")
);
System.out.println(c.wrap(url));
}
}