package org.nocket.gen.page.element;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.model.IModel;
import org.jsoup.nodes.Element;
import org.nocket.gen.page.DMDWebGenPageContext;
import org.nocket.gen.page.visitor.PageElementVisitorI;
public class BodyElement extends AbstractNoDomainPageElement<Void> {
private static final String HEIGHT = "height";
private static final String WIDTH = "width";
private Map<String, Object> styleAttributes = new HashMap<String, Object>();
public BodyElement(DMDWebGenPageContext context, Element element) {
super(context, element);
parseStyle(element.attr("style"));
}
/**
* Zerlegt width: 400px; height: 200px
*
* @param attr
*/
private void parseStyle(String attr) {
String[] strings = StringUtils.split(attr, ";");
for (int i = 0; strings != null && i < strings.length; i++) {
// width: 400px
String keyValue = strings[i];
// key = width; value = 400px
String[] keyValuePair = StringUtils.split(keyValue, ":", 2);
String key = keyValuePair[0].trim().toLowerCase();
String value = keyValuePair.length > 1 ? keyValuePair[1] : "";
// tranformedValue = 400 as Long
Object tranformedValue = normalizeOrAssertValue(key, value);
styleAttributes.put(key, tranformedValue);
}
}
protected Object normalizeOrAssertValue(final String key, final String value) {
String tranformedValue = StringUtils.trim(value);
if ((WIDTH.equals(key) || HEIGHT.equals(key)) && StringUtils.isNotBlank(tranformedValue)) {
tranformedValue = StringUtils.lowerCase(tranformedValue);
tranformedValue = StringUtils.chomp(tranformedValue, "px");
try {
Integer intValue = Integer.parseInt(tranformedValue);
return intValue;
} catch (Exception e) {
throw new IllegalArgumentException("Expected a integer value for style attribute " + key
+ ", but found "
+ value);
}
}
return tranformedValue;
}
@Deprecated
@Override
public IModel<Void> getModel() {
throw new UnsupportedOperationException();
}
@Override
public void accept(PageElementVisitorI visitor) {
visitor.visitBody(this);
}
public Object getStyleAttributeValue(String attribute) {
return styleAttributes.get(attribute);
}
public Integer getWidth() {
return (Integer) styleAttributes.get(WIDTH);
}
public Integer getHeight() {
return (Integer) styleAttributes.get(HEIGHT);
}
}