/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
// your code goes here
}
}
class MyObject {
}
class BigObject extends MyObject {}
class SmallObject extends MyObject {}
interface MyObjectHandler<V extends MyObject>{
List<V> handle(List<V> objects);
}
interface BigObjectHandler extends MyObjectHandler<BigObject>{}
interface SmallObjectHandler extends MyObjectHandler<SmallObject>{}
abstract class HandlerChain<V extends MyObject> {
private List<MyObjectHandler<V>> handlers;
public List<V> doChain(List<V> objects) {
for (MyObjectHandler<V> handler : handlers) {
objects = handler.handle(objects);
}
return objects;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCX0KfQoKY2xhc3MgTXlPYmplY3Qgewp9CgpjbGFzcyBCaWdPYmplY3QgZXh0ZW5kcyBNeU9iamVjdCB7fQpjbGFzcyBTbWFsbE9iamVjdCBleHRlbmRzIE15T2JqZWN0IHt9CgppbnRlcmZhY2UgTXlPYmplY3RIYW5kbGVyPFYgZXh0ZW5kcyBNeU9iamVjdD57CiAgICAgTGlzdDxWPiBoYW5kbGUoTGlzdDxWPiBvYmplY3RzKTsKfQoKaW50ZXJmYWNlIEJpZ09iamVjdEhhbmRsZXIgZXh0ZW5kcyBNeU9iamVjdEhhbmRsZXI8QmlnT2JqZWN0Pnt9CmludGVyZmFjZSBTbWFsbE9iamVjdEhhbmRsZXIgZXh0ZW5kcyBNeU9iamVjdEhhbmRsZXI8U21hbGxPYmplY3Q+e30KCmFic3RyYWN0IGNsYXNzIEhhbmRsZXJDaGFpbjxWIGV4dGVuZHMgTXlPYmplY3Q+IHsKCiAgICBwcml2YXRlIExpc3Q8TXlPYmplY3RIYW5kbGVyPFY+PiBoYW5kbGVyczsKICAgIAogICAgcHVibGljIExpc3Q8Vj4gZG9DaGFpbihMaXN0PFY+IG9iamVjdHMpIHsKICAgICAgICBmb3IgKE15T2JqZWN0SGFuZGxlcjxWPiBoYW5kbGVyIDogaGFuZGxlcnMpIHsKICAgICAgICAgICAgb2JqZWN0cyA9IGhhbmRsZXIuaGFuZGxlKG9iamVjdHMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0czsKICAgIH0KICAgIAp9