/* 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
{
public static void main
(String[] args
){ new Ideone();
}
public Ideone(){
Street s = new Street();
s.name = "Foo";
Building b = new Building();
b.number = "1";
b.floors = "1";
s.buildings.add(b);
b = new Building();
b.number = "2";
b.floors = "2";
s.buildings.add(b);
b = new Building();
b.number = "3";
b.floors = "1";
s.buildings.add(b);
for(Building bu : s.buildings){
for(int i
= 0; i
< Integer.
parseInt(bu.
floors) * 2; ++i
){ //2 apartmen per floor bu.apartments.add(new Apartment());
}
}
try {
init(s, "buildings.1/floors#3");
init(s, "buildings.2/apartments.1/owner#John");
ex.printStackTrace();
}
}
String[] array
= pattern.
split("/"); if(s.contains("#")){
String[] param
= s.
split("\\#"); setValue(o, param[0], param[1]);
} else {
String[] list
= s.
split("\\."); o
= getListItem
(o, list
[0],
Integer.
parseInt(list
[1])); }
}
}
return ((List)o.
getClass().
getDeclaredField(name
).
get(o
)).
get(index
); }
o.getClass().getDeclaredField(name).set(o, value);
}
}
class Street {
List<Building> buildings;
Street(){ buildings = new ArrayList<Building>(); }
@Override
return "[Street] " + name + " " + buildings;
}
}
class Building {
List<Apartment> apartments;
Building(){ apartments = new ArrayList<Apartment>(); }
@Override
return "\n\t[Building] " + number + " " + floors + apartments;
}
}
class Apartment {
@Override
return "[Apartment] " + owner;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpewogICAgICAgIG5ldyBJZGVvbmUoKTsKICAgIH0KCiAgICBwdWJsaWMgSWRlb25lKCl7CiAgICAgICAgU3RyZWV0IHMgPSBuZXcgU3RyZWV0KCk7CiAgICAgICAgcy5uYW1lID0gIkZvbyI7CgogICAgICAgIEJ1aWxkaW5nIGIgPSBuZXcgQnVpbGRpbmcoKTsKICAgICAgICBiLm51bWJlciA9ICIxIjsKICAgICAgICBiLmZsb29ycyA9ICIxIjsKCiAgICAgICAgcy5idWlsZGluZ3MuYWRkKGIpOwoKICAgICAgICBiID0gbmV3IEJ1aWxkaW5nKCk7CiAgICAgICAgYi5udW1iZXIgPSAiMiI7CiAgICAgICAgYi5mbG9vcnMgPSAiMiI7CgogICAgICAgIHMuYnVpbGRpbmdzLmFkZChiKTsKCiAgICAgICAgYiA9IG5ldyBCdWlsZGluZygpOwogICAgICAgIGIubnVtYmVyID0gIjMiOwogICAgICAgIGIuZmxvb3JzID0gIjEiOwoKICAgICAgICBzLmJ1aWxkaW5ncy5hZGQoYik7CgogICAgICAgIGZvcihCdWlsZGluZyBidSA6IHMuYnVpbGRpbmdzKXsKICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IEludGVnZXIucGFyc2VJbnQoYnUuZmxvb3JzKSAqIDI7ICsraSl7IC8vMiBhcGFydG1lbiBwZXIgZmxvb3IKICAgICAgICAgICAgICAgIGJ1LmFwYXJ0bWVudHMuYWRkKG5ldyBBcGFydG1lbnQoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHMpOwogICAgICAgICAgICBpbml0KHMsICJidWlsZGluZ3MuMS9mbG9vcnMjMyIpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7CiAgICAgICAgICAgIGluaXQocywgImJ1aWxkaW5ncy4yL2FwYXJ0bWVudHMuMS9vd25lciNKb2huIik7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyB2b2lkIGluaXQoT2JqZWN0IG8sIFN0cmluZyBwYXR0ZXJuKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgIFN0cmluZ1tdIGFycmF5ID0gcGF0dGVybi5zcGxpdCgiLyIpOwogICAgICAgIGZvcihTdHJpbmcgcyA6IGFycmF5KXsKICAgICAgICAgICAgaWYocy5jb250YWlucygiIyIpKXsKICAgICAgICAgICAgICAgIFN0cmluZ1tdIHBhcmFtID0gcy5zcGxpdCgiXFwjIik7CiAgICAgICAgICAgICAgICBzZXRWYWx1ZShvLCBwYXJhbVswXSwgcGFyYW1bMV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgU3RyaW5nW10gbGlzdCA9IHMuc3BsaXQoIlxcLiIpOwogICAgICAgICAgICAgICAgbyA9IGdldExpc3RJdGVtKG8sIGxpc3RbMF0sIEludGVnZXIucGFyc2VJbnQobGlzdFsxXSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBPYmplY3QgZ2V0TGlzdEl0ZW0oT2JqZWN0IG8sIFN0cmluZyBuYW1lLCBpbnQgaW5kZXgpIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgcmV0dXJuICgoTGlzdClvLmdldENsYXNzKCkuZ2V0RGVjbGFyZWRGaWVsZChuYW1lKS5nZXQobykpLmdldChpbmRleCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0VmFsdWUoT2JqZWN0IG8sIFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgby5nZXRDbGFzcygpLmdldERlY2xhcmVkRmllbGQobmFtZSkuc2V0KG8sIHZhbHVlKTsKICAgIH0KfQoKY2xhc3MgU3RyZWV0IHsKICAgIFN0cmluZyBuYW1lOwogICAgTGlzdDxCdWlsZGluZz4gYnVpbGRpbmdzOwoKICAgIFN0cmVldCgpeyBidWlsZGluZ3MgPSBuZXcgQXJyYXlMaXN0PEJ1aWxkaW5nPigpOyB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiAiW1N0cmVldF0gIiArIG5hbWUgKyAiICIgKyBidWlsZGluZ3M7CiAgICB9Cn0KCmNsYXNzIEJ1aWxkaW5nIHsKICAgIFN0cmluZyBudW1iZXI7CiAgICBTdHJpbmcgZmxvb3JzOwogICAgTGlzdDxBcGFydG1lbnQ+IGFwYXJ0bWVudHM7CgogICAgQnVpbGRpbmcoKXsgYXBhcnRtZW50cyA9IG5ldyBBcnJheUxpc3Q8QXBhcnRtZW50PigpOyB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiAiXG5cdFtCdWlsZGluZ10gIiArIG51bWJlciArICIgIiArIGZsb29ycyArIGFwYXJ0bWVudHM7CiAgICB9Cn0KCmNsYXNzIEFwYXJ0bWVudCB7CiAgICBTdHJpbmcgb3duZXI7CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiAiW0FwYXJ0bWVudF0gIiArIG93bmVyOwogICAgfQp9
[Street] Foo [
[Building] 1 1[[Apartment] null, [Apartment] null],
[Building] 2 2[[Apartment] null, [Apartment] null, [Apartment] null, [Apartment] null],
[Building] 3 1[[Apartment] null, [Apartment] null]]
[Street] Foo [
[Building] 1 1[[Apartment] null, [Apartment] null],
[Building] 2 3[[Apartment] null, [Apartment] null, [Apartment] null, [Apartment] null],
[Building] 3 1[[Apartment] null, [Apartment] null]]
[Street] Foo [
[Building] 1 1[[Apartment] null, [Apartment] null],
[Building] 2 3[[Apartment] null, [Apartment] null, [Apartment] null, [Apartment] null],
[Building] 3 1[[Apartment] null, [Apartment] John]]