use of org.eclipse.scout.rt.platform.holders.Holder in project scout.rt by eclipse.
the class AbstractForm method storeToXml.
@Override
public void storeToXml(Element root) {
root.setAttribute("formId", getFormId());
root.setAttribute("formQname", getClass().getName());
// add custom properties
Element xProps = root.getOwnerDocument().createElement("properties");
root.appendChild(xProps);
IPropertyFilter filter = new IPropertyFilter() {
@Override
public boolean accept(FastPropertyDescriptor descriptor) {
if (descriptor.getPropertyType().isInstance(IFormField.class)) {
return false;
}
if (!descriptor.getPropertyType().isPrimitive() && !Serializable.class.isAssignableFrom(descriptor.getPropertyType())) {
return false;
}
if (descriptor.getReadMethod() == null || descriptor.getWriteMethod() == null) {
return false;
}
return true;
}
};
Map<String, Object> props = BeanUtility.getProperties(this, AbstractForm.class, filter);
storePropertiesToXml(xProps, props);
// add extension properties
for (IExtension<?> ex : getAllExtensions()) {
Map<String, Object> extensionProps = BeanUtility.getProperties(ex, AbstractFormExtension.class, filter);
if (extensionProps.isEmpty()) {
continue;
}
Element xExtension = root.getOwnerDocument().createElement("extension");
xProps.appendChild(xExtension);
xExtension.setAttribute("extensionId", ex.getClass().getSimpleName());
xExtension.setAttribute("extensionQname", ex.getClass().getName());
storePropertiesToXml(xExtension, extensionProps);
}
// add fields
final Element xFields = root.getOwnerDocument().createElement("fields");
root.appendChild(xFields);
final Holder<RuntimeException> exceptionHolder = new Holder<>(RuntimeException.class);
final Holder<PlatformError> errorHolder = new Holder<>(PlatformError.class);
P_AbstractCollectingFieldVisitor v = new P_AbstractCollectingFieldVisitor() {
@Override
public boolean visitField(IFormField field, int level, int fieldIndex) {
if (field.getForm() != AbstractForm.this) {
// field is part of a wrapped form and is handled by the AbstractWrappedFormField
return true;
}
Element xField = xFields.getOwnerDocument().createElement("field");
try {
field.storeToXml(xField);
xFields.appendChild(xField);
} catch (RuntimeException e) {
exceptionHolder.setValue(e);
return false;
} catch (PlatformError e) {
errorHolder.setValue(e);
return false;
}
return true;
}
};
visitFields(v);
if (exceptionHolder.getValue() != null) {
throw exceptionHolder.getValue();
} else if (errorHolder.getValue() != null) {
throw errorHolder.getValue();
}
}
use of org.eclipse.scout.rt.platform.holders.Holder in project scout.rt by eclipse.
the class SelectInputBindTest method testBatchUpdateFromListInHolder.
/**
* Batch update from a list in an holder.
*/
@Test
public void testBatchUpdateFromListInHolder() throws Exception {
SqlServiceMock sql = createSqlServiceMock();
Long person = 9L;
List<Long> roles = Arrays.asList(5L, 6L);
Holder<List> holder = new Holder<List>(List.class, roles);
sql.update("UDPATE this_table SET v = :value where r = :{roles} and p = :personNr", new NVPair("personNr", person), new NVPair("roles", holder), new NVPair("value", "lorem"));
assertExpectedProtocol2(sql);
}
use of org.eclipse.scout.rt.platform.holders.Holder in project scout.rt by eclipse.
the class FormFieldVisibilityTest method testVisitParents.
@Test
public void testVisitParents() {
ICompositeField root = createFixture();
final AtomicInteger counter01 = new AtomicInteger(0);
root.getFieldByClass(P_Seq.class).visitParents(new IFormFieldVisitor() {
@Override
public boolean visitField(IFormField f, int level, int fieldIndex) {
counter01.incrementAndGet();
return true;
}
});
Assert.assertEquals(4, counter01.intValue());
final AtomicInteger counter02 = new AtomicInteger(0);
root.getFieldByClass(P_Button2.class).visitParents(new IFormFieldVisitor() {
@Override
public boolean visitField(IFormField f, int level, int fieldIndex) {
counter02.incrementAndGet();
return true;
}
});
Assert.assertEquals(2, counter02.intValue());
final AtomicInteger counter03 = new AtomicInteger(0);
root.visitParents(new IFormFieldVisitor() {
@Override
public boolean visitField(IFormField f, int level, int fieldIndex) {
counter03.incrementAndGet();
return true;
}
});
Assert.assertEquals(0, counter03.intValue());
final AtomicInteger counter04 = new AtomicInteger(0);
final Holder<Object> lastVisited = new Holder<>(Object.class);
root.getFieldByClass(P_Seq.class).visitParents(new IFormFieldVisitor() {
@Override
public boolean visitField(IFormField f, int level, int fieldIndex) {
counter04.incrementAndGet();
lastVisited.setValue(f);
return counter04.intValue() <= 1;
}
});
Assert.assertEquals(2, counter04.intValue());
Assert.assertSame(lastVisited.getValue(), root.getFieldByClass(Tab1.class));
}
use of org.eclipse.scout.rt.platform.holders.Holder in project scout.rt by eclipse.
the class AbstractDesktopTest method testDataChangedChanging.
@Test
public void testDataChangedChanging() {
TestEnvironmentDesktop desktop = (TestEnvironmentDesktop) IDesktop.CURRENT.get();
final Holder<Object[]> resultHolder = new Holder<Object[]>(Object[].class);
desktop.addDataChangeListener(new DataChangeListener() {
@Override
public void dataChanged(Object... dataTypes) {
resultHolder.setValue(dataTypes);
}
}, TEST_DATA_TYPE_1, TEST_DATA_TYPE_2);
desktop.setDataChanging(true);
desktop.dataChanged(TEST_DATA_TYPE_1);
desktop.dataChanged(TEST_DATA_TYPE_1, TEST_DATA_TYPE_1, TEST_DATA_TYPE_1);
desktop.dataChanged(TEST_DATA_TYPE_2, TEST_DATA_TYPE_2);
desktop.dataChanged(TEST_DATA_TYPE_1, TEST_DATA_TYPE_2);
desktop.dataChanged(TEST_DATA_TYPE_1);
desktop.dataChanged(TEST_DATA_TYPE_2);
desktop.setDataChanging(false);
verifyDataChanged(resultHolder);
}
use of org.eclipse.scout.rt.platform.holders.Holder in project scout.rt by eclipse.
the class WhenDoneTest method testSuccess.
@Test
public void testSuccess() throws InterruptedException {
// synchronized because modified/read by different threads.
final List<String> protocol = Collections.synchronizedList(new ArrayList<String>());
final Holder<DoneEvent<String>> eventHolder = new Holder<>();
final IFuture<String> future = Jobs.schedule(new Callable<String>() {
@Override
public String call() throws Exception {
protocol.add("1");
return "result";
}
}, Jobs.newInput().withRunContext(RunContexts.copyCurrent()).withExecutionTrigger(Jobs.newExecutionTrigger().withStartIn(1, TimeUnit.SECONDS)));
final BlockingCountDownLatch verifyLatch = new BlockingCountDownLatch(1);
future.whenDone(new IDoneHandler<String>() {
@Override
public void onDone(DoneEvent<String> event) {
protocol.add("2");
if (future.isDone()) {
protocol.add("done");
}
if (future.isCancelled()) {
protocol.add("cancelled");
}
eventHolder.setValue(event);
verifyLatch.countDown();
}
}, RunContexts.copyCurrent());
assertTrue(verifyLatch.await());
assertEquals(CollectionUtility.arrayList("1", "2", "done"), protocol);
assertNull(eventHolder.getValue().getException());
assertEquals("result", eventHolder.getValue().getResult());
assertFalse(eventHolder.getValue().isCancelled());
assertFalse(eventHolder.getValue().isFailed());
}
Aggregations