Search in sources :

Example 16 with Order

use of org.apache.tapestry5.ioc.annotations.Order in project tapestry-5 by apache.

the class BeanModelSourceImpl method create.

public <T> BeanModel<T> create(Class<T> beanClass, boolean filterReadOnlyProperties, Messages messages) {
    assert beanClass != null;
    assert messages != null;
    ClassPropertyAdapter adapter = propertyAccess.getAdapter(beanClass);
    BeanModel<T> model = new BeanModelImpl<T>(beanClass, propertyConduitSource, typeCoercer, messages, locator);
    for (final String propertyName : adapter.getPropertyNames()) {
        PropertyAdapter pa = adapter.getPropertyAdapter(propertyName);
        if (!pa.isRead()) {
            continue;
        }
        if (isStaticFieldProperty(pa)) {
            continue;
        }
        if (pa.getAnnotation(NonVisual.class) != null) {
            continue;
        }
        if (filterReadOnlyProperties && !pa.isUpdate()) {
            continue;
        }
        final String dataType = dataTypeAnalyzer.identifyDataType(pa);
        if (dataType == null) {
            continue;
        }
        model.add(propertyName).dataType(dataType);
    }
    // First, order the properties based on the location of the getter method
    // within the class.
    List<String> propertyNames = model.getPropertyNames();
    orderProperties(adapter, propertyNames);
    model.reorder(propertyNames.toArray(new String[propertyNames.size()]));
    // Next, check for an annotation with specific ordering information.
    ReorderProperties reorderAnnotation = beanClass.getAnnotation(ReorderProperties.class);
    if (reorderAnnotation != null) {
        BeanModelUtils.reorder(model, reorderAnnotation.value());
    }
    return model;
}
Also used : BeanModelImpl(org.apache.tapestry5.beanmodel.internal.beanmodel.BeanModelImpl) NonVisual(org.apache.tapestry5.beaneditor.NonVisual) ReorderProperties(org.apache.tapestry5.beaneditor.ReorderProperties) ClassPropertyAdapter(org.apache.tapestry5.commons.services.ClassPropertyAdapter) ClassPropertyAdapter(org.apache.tapestry5.commons.services.ClassPropertyAdapter) PropertyAdapter(org.apache.tapestry5.commons.services.PropertyAdapter)

Example 17 with Order

use of org.apache.tapestry5.ioc.annotations.Order in project tapestry-5 by apache.

the class MessagesSourceImpl method findBundleProperties.

/**
 * Assembles a set of properties appropriate for the bundle in question, and the desired locale. The properties
 * reflect the properties of the bundles' parent (if any) for the locale, overalyed with any properties defined for
 * this bundle and its locale.
 */
private Map<String, String> findBundleProperties(MessagesBundle bundle, ComponentResourceSelector selector) {
    if (bundle == null)
        return emptyMap;
    MultiKey key = new MultiKey(bundle.getId(), selector);
    Map<String, String> existing = cookedProperties.get(key);
    if (existing != null)
        return existing;
    // What would be cool is if we could maintain a cache of bundle id + locale -->
    // Resource. That would optimize quite a bit of this; may need to use an alternative to
    // LocalizedNameGenerator.
    Resource propertiesResource = bundle.getBaseResource().withExtension("properties");
    List<Resource> localizations = resourceLocator.locateMessageCatalog(propertiesResource, selector);
    // Localizations are now in least-specific to most-specific order.
    Map<String, String> previous = findBundleProperties(bundle.getParent(), selector);
    for (Resource localization : F.flow(localizations).reverse()) {
        Map<String, String> rawProperties = getRawProperties(localization);
        // Woould be nice to write into the cookedProperties cache here,
        // but we can't because we don't know the selector part of the MultiKey.
        previous = extend(previous, rawProperties);
    }
    cookedProperties.put(key, previous);
    return previous;
}
Also used : MultiKey(org.apache.tapestry5.commons.util.MultiKey) Resource(org.apache.tapestry5.commons.Resource)

Example 18 with Order

use of org.apache.tapestry5.ioc.annotations.Order in project tapestry-5 by apache.

the class LinkSourceImplTest method create_page_render_link_by_name.

@Test
public void create_page_render_link_by_name() {
    String pageName = "order/Edit";
    PageActivationContextCollector collector = mockPageActivationContextCollector();
    ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder();
    Link link = mockLink();
    ComponentClassResolver resolver = mockComponentClassResolver();
    RequestGlobals globals = mockRequestGlobals();
    expect(globals.getActivePageName()).andReturn("someOtherPage");
    train_canonicalizePageName(resolver, pageName, pageName);
    train_collectPageActivationContext(collector, pageName, 3);
    EventContext pageActivationContext = new ArrayEventContext(typeCoercer, 3);
    PageRenderRequestParameters parameters = new PageRenderRequestParameters(pageName, pageActivationContext, false);
    expect(linkEncoder.createPageRenderLink(parameters)).andReturn(link);
    replay();
    LinkSource source = new LinkSourceImpl(null, collector, typeCoercer, resolver, linkEncoder, globals, null, emptyConfiguration);
    Link actual = source.createPageRenderLink(pageName, false);
    // Make sure the same link is returned.
    assertEquals(actual, link);
    verify();
}
Also used : EventContext(org.apache.tapestry5.EventContext) PageRenderRequestParameters(org.apache.tapestry5.services.PageRenderRequestParameters) ComponentEventLinkEncoder(org.apache.tapestry5.services.ComponentEventLinkEncoder) ComponentClassResolver(org.apache.tapestry5.services.ComponentClassResolver) RequestGlobals(org.apache.tapestry5.http.services.RequestGlobals) Link(org.apache.tapestry5.http.Link) Test(org.testng.annotations.Test)

Example 19 with Order

use of org.apache.tapestry5.ioc.annotations.Order in project tapestry-5 by apache.

the class LinkSourceImplTest method component_event_from_other_page.

@Test
public void component_event_from_other_page() {
    String primaryPageName = "blocks/AppDisplay";
    Page primaryPage = mockPage();
    Page activePage = mockPage();
    PageRenderQueue queue = mockPageRenderQueue();
    PageActivationContextCollector collector = mockPageActivationContextCollector();
    ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder();
    Link link = mockLink();
    train_getRenderingPage(queue, activePage);
    train_getName(activePage, "order/View");
    train_getName(primaryPage, primaryPageName);
    train_collectPageActivationContext(collector, "order/View", "x", "y");
    EventContext pageActivationContext = new ArrayEventContext(typeCoercer, "x", "y");
    EventContext eventContext = new ArrayEventContext(typeCoercer, 3, 5, 9);
    ComponentEventRequestParameters parameters = new ComponentEventRequestParameters("order/View", primaryPageName, "gnip.gnop", "myevent", pageActivationContext, eventContext);
    expect(linkEncoder.createComponentEventLink(parameters, true)).andReturn(link);
    replay();
    LinkSource source = new LinkSourceImpl(queue, collector, typeCoercer, null, linkEncoder, null, null, emptyConfiguration);
    assertSame(source.createComponentEventLink(primaryPage, "gnip.gnop", "myevent", true, 3, 5, 9), link);
    verify();
}
Also used : EventContext(org.apache.tapestry5.EventContext) ComponentEventLinkEncoder(org.apache.tapestry5.services.ComponentEventLinkEncoder) ComponentEventRequestParameters(org.apache.tapestry5.services.ComponentEventRequestParameters) Page(org.apache.tapestry5.internal.structure.Page) Link(org.apache.tapestry5.http.Link) Test(org.testng.annotations.Test)

Example 20 with Order

use of org.apache.tapestry5.ioc.annotations.Order in project tapestry-5 by apache.

the class AbstractBeanModelSourceImplTest method default_model_for_bean.

/**
 * Tests defaults for property names, labels and conduits.
 */
@Test
public void default_model_for_bean() {
    Messages messages = mockMessages();
    stub_contains(messages, false);
    replay();
    BeanModel model = source.create(SimpleBean.class, true, messages);
    assertSame(model.getBeanType(), SimpleBean.class);
    // Based on order of the getter methods (no longer alphabetical)
    assertEquals(model.getPropertyNames(), Arrays.asList("firstName", "lastName", "age"));
    assertEquals(model.toString(), "BeanModel[org.apache.tapestry5.genericsresolverguava.internal.SimpleBean properties:firstName, lastName, age]");
    PropertyModel age = model.get("age");
    assertEquals(age.getLabel(), "Age");
    assertSame(age.getPropertyType(), int.class);
    assertEquals(age.getDataType(), "number");
    PropertyModel firstName = model.get("firstName");
    assertEquals(firstName.getLabel(), "First Name");
    assertEquals(firstName.getPropertyType(), String.class);
    assertEquals(firstName.getDataType(), "text");
    assertEquals(model.get("lastName").getLabel(), "Last Name");
    PropertyConduit conduit = model.get("lastName").getConduit();
    SimpleBean instance = new SimpleBean();
    instance.setLastName("Lewis Ship");
    assertEquals(conduit.get(instance), "Lewis Ship");
    conduit.set(instance, "TapestryDude");
    assertEquals(instance.getLastName(), "TapestryDude");
    // Now, one with some type coercion.
    age.getConduit().set(instance, "40");
    assertEquals(instance.getAge(), 40);
    verify();
}
Also used : Messages(org.apache.tapestry5.commons.Messages) BeanModel(org.apache.tapestry5.beanmodel.BeanModel) PropertyModel(org.apache.tapestry5.beanmodel.PropertyModel) PropertyConduit(org.apache.tapestry5.beanmodel.PropertyConduit) Test(org.testng.annotations.Test)

Aggregations

Test (org.testng.annotations.Test)10 BeanModel (org.apache.tapestry5.beanmodel.BeanModel)6 Messages (org.apache.tapestry5.commons.Messages)6 PropertyModel (org.apache.tapestry5.beanmodel.PropertyModel)3 ToDoItem (org.apache.tapestry5.integration.app1.data.ToDoItem)3 Method (java.lang.reflect.Method)2 EventContext (org.apache.tapestry5.EventContext)2 PropertyConduit (org.apache.tapestry5.beanmodel.PropertyConduit)2 Location (org.apache.tapestry5.commons.Location)2 ClassPropertyAdapter (org.apache.tapestry5.commons.services.ClassPropertyAdapter)2 PropertyAdapter (org.apache.tapestry5.commons.services.PropertyAdapter)2 Link (org.apache.tapestry5.http.Link)2 ComponentEventLinkEncoder (org.apache.tapestry5.services.ComponentEventLinkEncoder)2 ObjectStreamException (java.io.ObjectStreamException)1 Constructor (java.lang.reflect.Constructor)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1