use of org.develnext.jphp.swing.loader.support.BaseTag in project jphp by jphp-compiler.
the class SwingExtension method registerReaderTag.
public void registerReaderTag(BaseTag tag) {
Tag name = tag.getClass().getAnnotation(Tag.class);
if (name == null)
throw new IllegalArgumentException("Invalid tag object without @Tag annotation");
readerTags.put(name.value(), tag);
}
use of org.develnext.jphp.swing.loader.support.BaseTag in project jphp by jphp-compiler.
the class UIReader method readElement.
@SuppressWarnings("unchecked")
protected Component readElement(Node element) {
String name = element.getNodeName();
BaseTag tag = tags.get(name);
if (tag != null) {
java.util.List<Object[]> postRead = new ArrayList<Object[]>();
Component component = tag.create(new ElementItem(element), this);
if (tag.isNeedRegister())
SwingExtension.registerComponent(component);
ElementItem item = new ElementItem(element);
tag.read(item, component, element, this);
NamedNodeMap attrs = element.getAttributes();
String var = null;
Map<String, Value> attributes = new LinkedHashMap<String, Value>();
for (int i = 0; i < attrs.getLength(); i++) {
Node attr = attrs.item(i);
if (attr.getNodeName().equalsIgnoreCase("var")) {
var = attr.getNodeValue();
continue;
}
Value value = new Value(attr.getNodeValue());
if (attr.getNodeName().equalsIgnoreCase("style")) {
for (String styleName : value.asArray(true)) {
Style style = styles.get(styleName.toLowerCase());
if (style != null) {
attributes.putAll(style.getAttributes());
}
}
continue;
}
attributes.put(attr.getNodeName().toLowerCase(), value);
}
for (Map.Entry<String, Value> attr : attributes.entrySet()) {
PropertyReader reader = null;
Class cls = component.getClass();
tag.onReadAttribute(item, attr.getKey(), attr.getValue(), component, this);
do {
PropertyReaders readers = this.readers.get(cls);
if (readers != null) {
reader = readers.getReader(attr.getKey());
}
if (cls == Component.class)
break;
if (reader != null)
break;
cls = cls.getSuperclass();
} while (true);
if (reader != null) {
Value value = attr.getValue();
if (reader.isTranslatable() && translateHandler != null) {
if (reader.isArrayed()) {
StringBuilder sb = new StringBuilder();
int x = 0;
for (String el : value.asArray(reader.isTrimArrayed())) {
if (x != 0)
sb.append(",");
sb.append(translateHandler.onTranslate(component, new Value(el)).asString());
x++;
}
value = new Value(sb.toString());
} else
value = translateHandler.onTranslate(component, value);
}
if (reader.isPostRead())
postRead.add(new Object[] { reader, attr.getKey(), value });
else {
reader.read(tag.applyProperty(attr.getKey(), component), value);
}
}
}
tag.afterRead(item, component, element, this);
if (readHandler != null && var != null) {
readHandler.onRead(component, var);
}
if (tag.isAllowsChildren() && component instanceof Container) {
NodeList list = element.getChildNodes();
if (list != null)
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
Component el = readElement(node);
if (el != null) {
BaseTag childTag = tags.get(node.getNodeName());
tag.addChildren(component, childTag.getContentPane(el));
} else {
tag.addUnknown(component, node, this);
}
}
}
for (Object[] el : postRead) {
PropertyReader reader = (PropertyReader) el[0];
String property = (String) el[1];
Value value = (Value) el[2];
reader.read(tag.applyProperty(property, component), value);
}
return component;
}
return null;
}
Aggregations