de.mhus.lib.vaadin.layouter.LayUtil Maven / Gradle / Ivy
package de.mhus.lib.vaadin.layouter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractSplitPanel;
import com.vaadin.ui.Layout;
import de.mhus.lib.core.directory.ResourceNode;
import de.mhus.lib.errors.MException;
public class LayUtil {
private static final Pattern sizePattern = Pattern
.compile("^(-?\\d+(\\.\\d+)?)(%|px|em|ex|in|cm|mm|pt|pc)?$");
public static void configure(AbstractComponent layout, ResourceNode config) throws MException {
if (config.getBoolean(LayoutBuilder.FULL_SIZE, false))
layout.setSizeFull();
else {
String width = config.getString(LayoutBuilder.WIDTH, null);
if (width != null) layout.setWidth(width);
String height = config.getString(LayoutBuilder.HEIGHT, null);
if (height != null) layout.setHeight(height);
}
// margin
//TODO if (layout instanceof Layout && config.isProperty(LayoutBuilder.MARGIN))
// ((Layout)layout).setMargin(config.getBoolean(LayoutBuilder.MARGIN, false));
// spacing
if (layout instanceof Layout.SpacingHandler && config.isProperty(LayoutBuilder.SPACING))
((Layout.SpacingHandler)layout).setSpacing(config.getBoolean(LayoutBuilder.SPACING, false));
// styles
if (config.isProperty(LayoutBuilder.STYLE)) {
layout.setStyleName(config.getExtracted(LayoutBuilder.STYLE));
}
// hidden
if (config.getBoolean(LayoutBuilder.HIDDEN, false))
layout.setVisible(false);
// split
if (layout instanceof AbstractSplitPanel) {
String a = config.getString(LayoutBuilder.SPLIT_MIN,null);
if (a != null) {
float[] s = parseStringSize(a);
if (s[0] >=0)
((AbstractSplitPanel)layout).setMinSplitPosition(s[0],(int)s[1]);
}
a = config.getString(LayoutBuilder.SPLIT_MAX,null);
if (a != null) {
float[] s = parseStringSize(a);
if (s[0] >=0)
((AbstractSplitPanel)layout).setMaxSplitPosition(s[0],(int)s[1]);
}
a = config.getString(LayoutBuilder.SPLIT_POS,null);
if (a != null) {
float[] s = parseStringSize(a);
if (s[0] >=0)
((AbstractSplitPanel)layout).setSplitPosition(s[0],(int)s[1]);
}
}
}
/*
* Taken from com.vaadin.ui.AbstractComponent:
*
* Copyright 2011 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
* Returns array with size in index 0 unit in index 1. Null or empty string
* will produce {-1,UNITS_PIXELS}
*/
public static float[] parseStringSize(String s) {
float[] values = { -1, Sizeable.UNITS_PIXELS };
if (s == null) {
return values;
}
s = s.trim();
if ("".equals(s)) {
return values;
}
Matcher matcher = sizePattern.matcher(s);
if (matcher.find()) {
values[0] = Float.parseFloat(matcher.group(1));
if (values[0] < 0) {
values[0] = -1;
} else {
String unit = matcher.group(3);
if (unit == null) {
values[1] = Sizeable.UNITS_PIXELS;
} else if (unit.equals("px")) {
values[1] = Sizeable.UNITS_PIXELS;
} else if (unit.equals("%")) {
values[1] = Sizeable.UNITS_PERCENTAGE;
} else if (unit.equals("em")) {
values[1] = Sizeable.UNITS_EM;
} else if (unit.equals("ex")) {
values[1] = Sizeable.UNITS_EX;
} else if (unit.equals("in")) {
values[1] = Sizeable.UNITS_INCH;
} else if (unit.equals("cm")) {
values[1] = Sizeable.UNITS_CM;
} else if (unit.equals("mm")) {
values[1] = Sizeable.UNITS_MM;
} else if (unit.equals("pt")) {
values[1] = Sizeable.UNITS_POINTS;
} else if (unit.equals("pc")) {
values[1] = Sizeable.UNITS_PICAS;
}
}
} else {
throw new IllegalArgumentException("Invalid size argument: \"" + s
+ "\" (should match " + sizePattern.pattern() + ")");
}
return values;
}
}