use of com.servoy.j2db.persistence.LayoutContainer in project servoy-client by Servoy.
the class JSBaseContainer method getLayoutContainers.
/**
* Returns all JSLayoutContainers objects of this container
*
* @sample
* var frm = solutionModel.getForm("myForm");
* var containers = frm.getLayoutContainers();
* for (var c in containers)
* {
* var fname = containers[c].name;
* application.output(fname);
* }
*
* @param returnInheritedElements boolean true to also return the elements from parent form
* @return all JSLayoutContainers objects of this container
*/
@ServoyClientSupport(mc = false, ng = true, wc = false, sc = false)
@JSFunction
public JSLayoutContainer[] getLayoutContainers(boolean returnInheritedElements) {
List<JSLayoutContainer> containers = new ArrayList<JSLayoutContainer>();
AbstractContainer container = returnInheritedElements ? getFlattenedContainer() : getContainer();
Iterator<LayoutContainer> iterator = container.getLayoutContainers();
while (iterator.hasNext()) {
containers.add(application.getScriptEngine().getSolutionModifier().createLayoutContainer(this, iterator.next()));
}
return containers.toArray(new JSLayoutContainer[containers.size()]);
}
use of com.servoy.j2db.persistence.LayoutContainer in project servoy-client by Servoy.
the class DesignFormLayoutStructureGenerator method generateLayoutContainer.
public static void generateLayoutContainer(LayoutContainer container, Form form, FlattenedSolution fs, PrintWriter writer, int nested) {
WebLayoutSpecification spec = null;
if (container.getPackageName() != null) {
PackageSpecification<WebLayoutSpecification> pkg = WebComponentSpecProvider.getSpecProviderState().getLayoutSpecifications().get(container.getPackageName());
if (pkg != null) {
spec = pkg.getSpecification(container.getSpecName());
}
}
writer.print("<");
writer.print(container.getTagType());
if (container.getName() != null) {
writer.print(" svy-name='");
writer.print(container.getName());
writer.print("' ");
}
if (container.getElementId() != null) {
writer.print(" id='");
writer.print(container.getElementId());
writer.print("' ");
}
Map<String, String> attributes = new HashMap<String, String>(container.getMergedAttributes());
if (spec != null) {
for (String propertyName : spec.getAllPropertiesNames()) {
PropertyDescription pd = spec.getProperty(propertyName);
if (pd.getDefaultValue() != null && !attributes.containsKey(propertyName)) {
attributes.put(propertyName, pd.getDefaultValue().toString());
}
}
}
for (Entry<String, String> entry : attributes.entrySet()) {
writer.print(" ");
try {
StringEscapeUtils.ESCAPE_ECMASCRIPT.translate(entry.getKey(), writer);
if (entry.getValue() != null && entry.getValue().length() > 0) {
writer.print("=\"");
StringEscapeUtils.ESCAPE_ECMASCRIPT.translate(entry.getValue(), writer);
writer.print("\"");
}
} catch (IOException e) {
Debug.error(e);
}
}
writer.print(" svy-id='");
writer.print(container.getID());
writer.print("'");
writer.print(">\n");
Iterator<IPersist> components = container.getAllObjects(PositionComparator.XY_PERSIST_COMPARATOR);
while (components.hasNext()) {
int count = 0;
while (count++ < nested) {
writer.print('\t');
}
IPersist component = components.next();
if (component instanceof LayoutContainer) {
generateLayoutContainer((LayoutContainer) component, form, fs, writer, nested + 1);
} else if (component instanceof IFormElement) {
generateFormElement(writer, (IFormElement) component, form, fs);
}
}
int count = 1;
while (count++ < nested) {
writer.print('\t');
}
writer.print("</");
writer.print(container.getTagType());
writer.print(">\n");
}
use of com.servoy.j2db.persistence.LayoutContainer in project servoy-client by Servoy.
the class FormLayoutStructureGenerator method generateLayout.
public static void generateLayout(Form form, String realFormName, FlattenedSolution fs, PrintWriter writer, DesignProperties design) {
try {
FormLayoutGenerator.generateFormStartTag(writer, form, realFormName, false, design != null);
Iterator<IPersist> components = form.getAllObjects(PositionComparator.XY_PERSIST_COMPARATOR);
while (components.hasNext()) {
IPersist component = components.next();
if (component instanceof LayoutContainer) {
generateLayoutContainer((LayoutContainer) component, form, fs, writer, design, FormElementHelper.INSTANCE);
} else if (component instanceof IFormElement) {
FormLayoutGenerator.generateFormElement(writer, FormElementHelper.INSTANCE.getFormElement((IFormElement) component, fs, null, false), form);
}
}
FormLayoutGenerator.generateFormEndTag(writer, design != null);
} catch (Exception e) {
Debug.error(e);
}
}
use of com.servoy.j2db.persistence.LayoutContainer in project servoy-client by Servoy.
the class ChildrenJSONGenerator method visit.
@SuppressWarnings("nls")
@Override
public Object visit(IPersist o) {
if (o == skip)
return IPersistVisitor.CONTINUE_TRAVERSAL;
if (!isSecurityVisible(o))
return IPersistVisitor.CONTINUE_TRAVERSAL;
if (o instanceof IFormElement) {
FormElement fe = null;
if (part != null) {
int startPos = form.getPartStartYPos(part.getID());
int endPos = part.getHeight();
Point location = CSSPositionUtils.getLocation((IFormElement) o);
if (location != null && (startPos > location.y || endPos <= location.y)) {
return IPersistVisitor.CONTINUE_TRAVERSAL;
}
}
if (cache != null) {
// this is for form component elements finding
fe = cache.getFormElement((IFormElement) o, this.context.getSolution(), null, designer);
}
if (fe == null && formUI != null) {
List<FormElement> cachedFormElements = formUI.getFormElements();
for (FormElement cachedFE : cachedFormElements) {
if (Utils.equalObjects(cachedFE.getPersistIfAvailable(), o)) {
fe = cachedFE;
break;
}
}
}
fe = fe != null ? fe : FormElementHelper.INSTANCE.getFormElement((IFormElement) o, this.context.getSolution(), null, designer);
writer.object();
writeFormElement(writer, o, form, fe, formUI, context, designer);
if (o instanceof WebComponent) {
WebObjectSpecification spec = fe.getWebComponentSpec();
if (spec != null) {
Collection<PropertyDescription> properties = spec.getProperties(FormComponentPropertyType.INSTANCE);
if (properties.size() > 0) {
boolean isResponsive = false;
List<String> children = new ArrayList<>();
for (PropertyDescription pd : properties) {
Object propertyValue = fe.getPropertyValue(pd.getName());
Form frm = FormComponentPropertyType.INSTANCE.getForm(propertyValue, context.getSolution());
if (frm == null)
continue;
isResponsive = frm.isResponsiveLayout();
// listformcomponents that are responsive must be also send over here (the components are also send over in the FormComponentSabloValue)
// this will result in duplicate component data, but we need the structure (and the component names in the right place)
// if (!isResponsive && pd.getConfig() instanceof ComponentTypeConfig && ((ComponentTypeConfig)pd.getConfig()).forFoundset != null)
// continue;
children.add("children_" + pd.getName());
writer.key("children_" + pd.getName());
writer.array();
FormComponentCache fccc = FormElementHelper.INSTANCE.getFormComponentCache(fe, pd, (JSONObject) propertyValue, frm, context.getSolution());
if (isResponsive) {
// layout containers are not in the cache we need to generate manually the model
frm.acceptVisitor(new ChildrenJSONGenerator(writer, context, frm, new IFormElementCache() {
@Override
public FormElement getFormElement(IFormElement component, FlattenedSolution flattendSol, PropertyPath path, boolean design) {
for (FormElement formElement : fccc.getFormComponentElements()) {
if (component.getID() == formElement.getPersistIfAvailable().getID()) {
return formElement;
}
}
return FormElementHelper.INSTANCE.getFormElement(component, flattendSol, path, design);
}
}, null, this.form, false, designer), PositionComparator.XY_PERSIST_COMPARATOR);
} else {
for (FormElement element : fccc.getFormComponentElements()) {
IFormElement persistOfElement = (IFormElement) element.getPersistIfAvailable();
persistOfElement.acceptVisitor(new ChildrenJSONGenerator(writer, context, null, null, null, this.form, false, designer), FORM_INDEX_WITH_HIERARCHY_COMPARATOR);
}
}
writer.endArray();
}
writer.key("formComponent");
writer.array();
children.stream().forEach((child) -> writer.value(child));
writer.endArray();
}
}
}
writer.endObject();
} else if (o instanceof LayoutContainer) {
writer.object();
LayoutContainer layoutContainer = (LayoutContainer) o;
writeLayoutContainer(writer, layoutContainer, formUI, designer);
writer.key("children");
writer.array();
o.acceptVisitor(new ChildrenJSONGenerator(writer, context, o, cache, null, this.form, false, designer), PositionComparator.XY_PERSIST_COMPARATOR);
writer.endArray();
writer.endObject();
return IPersistVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
}
return IPersistVisitor.CONTINUE_TRAVERSAL;
}
Aggregations