Search in sources :

Example 1 with PropertySelector

use of com.codename1.rad.models.PropertySelector in project CodeRAD by shannah.

the class PropertySelectorTest method manualExampleTest.

private void manualExampleTest() throws Exception {
    String xml = "<?xml version=\"1.0\"?>\n" + "<catalog>\n" + "   <book id=\"bk101\">\n" + "      <author>Gambardella, Matthew</author>\n" + "      <title>XML Developer's Guide</title>\n" + "      <genre>Computer</genre>\n" + "      <price>44.95</price>\n" + "      <publish_date>2000-10-01</publish_date>\n" + "      <description>An in-depth look at creating applications \n" + "      with XML.</description>\n" + "   </book>\n" + "   <book id=\"bk102\">\n" + "      <author>Ralls, Kim</author>\n" + "      <title>Midnight Rain</title>\n" + "      <genre>Fantasy</genre>\n" + "      <price>5.95</price>\n" + "      <publish_date>2000-12-16</publish_date>\n" + "      <description>A former architect battles corporate zombies, \n" + "      an evil sorceress, and her own childhood to become queen \n" + "      of the world.</description>\n" + "   </book>\n" + "   <book id=\"bk103\">\n" + "      <author>Corets, Eva</author>\n" + "      <title>Maeve Ascendant</title>\n" + "      <genre>Fantasy</genre>\n" + "      <price>5.95</price>\n" + "      <publish_date>2000-11-17</publish_date>\n" + "      <description>After the collapse of a nanotechnology \n" + "      society in England, the young survivors lay the \n" + "      foundation for a new society.</description>\n" + "   </book>\n" + "   <book id=\"bk104\">\n" + "      <author>Corets, Eva</author>\n" + "      <title>Oberon's Legacy</title>\n" + "      <genre>Fantasy</genre>\n" + "      <price>5.95</price>\n" + "      <publish_date>2001-03-10</publish_date>\n" + "      <description>In post-apocalypse England, the mysterious \n" + "      agent known only as Oberon helps to create a new life \n" + "      for the inhabitants of London. Sequel to Maeve \n" + "      Ascendant.</description>\n" + "   </book>\n" + "   <book id=\"bk105\">\n" + "      <author>Corets, Eva</author>\n" + "      <title>The Sundered Grail</title>\n" + "      <genre>Fantasy</genre>\n" + "      <price>5.95</price>\n" + "      <publish_date>2001-09-10</publish_date>\n" + "      <description>The two daughters of Maeve, half-sisters, \n" + "      battle one another for control of England. Sequel to \n" + "      Oberon's Legacy.</description>\n" + "   </book>\n" + "   <book id=\"bk106\">\n" + "      <author>Randall, Cynthia</author>\n" + "      <title>Lover Birds</title>\n" + "      <genre>Romance</genre>\n" + "      <price>4.95</price>\n" + "      <publish_date>2000-09-02</publish_date>\n" + "      <description>When Carla meets Paul at an ornithology \n" + "      conference, tempers fly as feathers get ruffled.</description>\n" + "   </book>\n" + "   <book id=\"bk107\">\n" + "      <author>Thurman, Paula</author>\n" + "      <title>Splish Splash</title>\n" + "      <genre>Romance</genre>\n" + "      <price>4.95</price>\n" + "      <publish_date>2000-11-02</publish_date>\n" + "      <description>A deep sea diver finds true love twenty \n" + "      thousand leagues beneath the sea.</description>\n" + "   </book>\n" + "   <book id=\"bk108\">\n" + "      <author>Knorr, Stefan</author>\n" + "      <title>Creepy Crawlies</title>\n" + "      <genre>Horror</genre>\n" + "      <price>4.95</price>\n" + "      <publish_date>2000-12-06</publish_date>\n" + "      <description>An anthology of horror stories about roaches,\n" + "      centipedes, scorpions  and other insects.</description>\n" + "   </book>\n" + "   <book id=\"bk109\">\n" + "      <author>Kress, Peter</author>\n" + "      <title>Paradox Lost</title>\n" + "      <genre>Science Fiction</genre>\n" + "      <price>6.95</price>\n" + "      <publish_date>2000-11-02</publish_date>\n" + "      <description>After an inadvertant trip through a Heisenberg\n" + "      Uncertainty Device, James Salway discovers the problems \n" + "      of being quantum.</description>\n" + "   </book>\n" + "   <book id=\"bk110\">\n" + "      <author>O'Brien, Tim</author>\n" + "      <title>Microsoft .NET: The Programming Bible</title>\n" + "      <genre>Computer</genre>\n" + "      <price>36.95</price>\n" + "      <publish_date>2000-12-09</publish_date>\n" + "      <description>Microsoft's .NET initiative is explored in \n" + "      detail in this deep programmer's reference.</description>\n" + "   </book>\n" + "   <book id=\"bk111\">\n" + "      <author>O'Brien, Tim</author>\n" + "      <title>MSXML3: A Comprehensive Guide</title>\n" + "      <genre>Computer</genre>\n" + "      <price>36.95</price>\n" + "      <publish_date>2000-12-01</publish_date>\n" + "      <description>The Microsoft MSXML3 parser is covered in \n" + "      detail, with attention to XML DOM interfaces, XSLT processing, \n" + "      SAX and more.</description>\n" + "   </book>\n" + "   <book id=\"bk112\">\n" + "      <author>Galos, Mike</author>\n" + "      <title>Visual Studio 7: A Comprehensive Guide</title>\n" + "      <genre>Computer</genre>\n" + "      <price>49.95</price>\n" + "      <publish_date>2001-04-16</publish_date>\n" + "      <description>Microsoft Visual Studio 7 is explored in depth,\n" + "      looking at how Visual Basic, Visual C++, C#, and ASP+ are \n" + "      integrated into a comprehensive development \n" + "      environment.</description>\n" + "   </book>\n" + "</catalog>";
    EntityType bookType = new EntityTypeBuilder().string(Thing.identifier).string(Thing.name).string(Thing.description).build();
    class Book extends BaseEntity {
    }
    EntityType.register(Book.class, bookType, cls -> {
        return new Book();
    });
    class Books extends EntityList<Book> {
    }
    EntityType.registerList(Books.class, Book.class, cls -> {
        return new Books();
    });
    Tag BOOKS = new Tag("Books");
    EntityType catalogType = new EntityTypeBuilder().list(Books.class, BOOKS).build();
    class Catalog extends BaseEntity {

        {
            setEntityType(catalogType);
        }
    }
    EntityType.register(Catalog.class, cls -> {
        return new Catalog();
    });
    ResultParser parser = new ResultParser(catalogType).property("./book", BOOKS).entityType(bookType).property("@id", Thing.identifier).property("title", Thing.name).property("description", Thing.description);
    Catalog catalog = (Catalog) parser.parseXML(xml, new Catalog());
    Books books = (Books) catalog.get(BOOKS);
    assertEqual("bk101", books.get(0).get(Thing.identifier));
    assertEqual("bk112", books.get(books.size() - 1).get(Thing.identifier));
    assertEqual("XML Developer's Guide", books.get(0).get(Thing.name));
    PropertySelector id1 = new PropertySelector(catalog, BOOKS).child(0, Thing.identifier);
    PropertySelector name1 = new PropertySelector(catalog, BOOKS).child(0, Thing.name);
    assertEqual("bk101", id1.getText(null));
    assertEqual("XML Developer's Guide", name1.getText(null));
    assertNull(propertySelector(catalog, BOOKS).child(Thing.name).getText(null));
    class Stats {

        int counter;
    }
    Stats stats = new Stats();
    name1.addPropertyChangeListener(evt -> {
        stats.counter++;
    });
    assertEqual(0, stats.counter);
    boolean res = name1.setText("Foo");
    assertTrue(res);
    assertEqual("Foo", name1.getText(null));
    assertEqual(1, stats.counter);
    Books newBooks = new Books();
    catalog.set(BOOKS, newBooks);
    assertEqual(2, stats.counter);
    assertNull(name1.getText(null));
    Book newBook = new Book();
    newBook.setText(Thing.name, "Bar");
    newBooks.add(newBook);
    assertEqual("Bar", name1.getText(null));
    assertEqual(3, stats.counter);
    newBook.setText(Thing.name, "Bar2");
    assertEqual(4, stats.counter);
    assertEqual("Bar2", name1.getText(null));
    name1.setText("Bar3");
    assertEqual("Bar3", newBook.getText(Thing.name));
    assertEqual("Bar3", name1.getText(null));
    assertEqual(5, stats.counter);
    books.get(0).set(Thing.name, "Changed again");
    assertEqual("Bar3", name1.getText(null));
    assertEqual("Changed again", books.get(0).getText(Thing.name));
    assertEqual(5, stats.counter);
    Book newBook2 = new Book();
    newBook2.setText(Thing.name, "newBook2");
    newBooks.add(newBook2);
    assertEqual(5, stats.counter);
    assertEqual("Bar3", name1.getText(null));
    newBooks.remove(newBook);
    assertEqual(6, stats.counter);
    assertEqual("newBook2", name1.getText(null));
}
Also used : ResultParser(com.codename1.rad.io.ResultParser)

Example 2 with PropertySelector

use of com.codename1.rad.models.PropertySelector in project CodeRAD by shannah.

the class ComponentBinder method bindFocus.

public static void bindFocus(Bindable bindable, PropertySelector property, Component cmp) {
    cmp.addFocusListener(new FocusListener() {

        @Override
        public void focusGained(Component cmp) {
            if (property.isFalsey()) {
                property.setBoolean(true);
            }
        }

        @Override
        public void focusLost(Component cmp) {
            if (!property.isFalsey()) {
                property.setBoolean(false);
            }
        }
    });
    ActionListener<PropertyChangeEvent> pcl = evt -> {
        boolean isFocused = !property.isFalsey();
        if (isFocused && !cmp.hasFocus()) {
            cmp.requestFocus();
        }
    };
    bindable.addBindListener(() -> {
        property.addPropertyChangeListener(pcl);
    });
    bindable.addUnbindListener(() -> {
        property.removePropertyChangeListener(pcl);
    });
}
Also used : FocusListener(com.codename1.ui.events.FocusListener) PropertyChangeEvent(com.codename1.rad.models.PropertyChangeEvent) Component(com.codename1.ui.Component) Bindable(com.codename1.rad.models.Bindable) ActionListener(com.codename1.ui.events.ActionListener) PropertySelector(com.codename1.rad.models.PropertySelector) PropertyChangeEvent(com.codename1.rad.models.PropertyChangeEvent) Component(com.codename1.ui.Component) FocusListener(com.codename1.ui.events.FocusListener)

Example 3 with PropertySelector

use of com.codename1.rad.models.PropertySelector in project CodeRAD by shannah.

the class FieldNode method getPropertySelector.

/**
 * Gets a property selector for this field node.  If the field contained
 * a PropertyNode or a Tags node, then it will construct a selector from those.
 *
 * Otherwise it will check for a {@link ProeprtySelectorAttribute}, and return
 * a selector constructed form that, with the provided entity root.
 * @param context
 * @return A property selector, or null if no property or tag is set, and no property selector is set.
 */
public PropertySelector getPropertySelector(Entity context) {
    if (context == null) {
        return null;
    }
    Property prop = getProperty(context.getEntity().getEntityType());
    if (prop != null) {
        return new PropertySelector(context, prop);
    }
    Tags tags = getTags();
    if (tags != null) {
        return new PropertySelector(context, tags.toArray());
    }
    PropertySelectorAttribute selectorProvider = (PropertySelectorAttribute) findAttribute(PropertySelectorAttribute.class);
    if (selectorProvider != null) {
        return selectorProvider.getValue(context);
    }
    return null;
}
Also used : PropertySelector(com.codename1.rad.models.PropertySelector) PropertySelectorAttribute(com.codename1.rad.attributes.PropertySelectorAttribute) Property(com.codename1.rad.models.Property) Tags(com.codename1.rad.models.Tags)

Example 4 with PropertySelector

use of com.codename1.rad.models.PropertySelector in project CodeRAD by shannah.

the class Node method createPropertySelector.

/**
 * Creates a property selector on the given entity using (in order of decreasing precedence):
 *
 * 1. A {@link PropertyNode} attribute on the node.
 * 2. A {@link Tags} attribute on the node.
 * 3. A {@link PropertySelectorAttribute} on the node.
 *
 * @param entity The entity on which the property selector should be created.
 * @return The property selector.
 */
public PropertySelector createPropertySelector(Entity entity) {
    PropertyNode prop = findAttribute(PropertyNode.class);
    if (prop != null) {
        return new PropertySelector(entity, prop.getValue());
    }
    Tags tags = findAttribute(Tags.class);
    if (tags != null) {
        return new PropertySelector(entity, tags.toArray());
    }
    PropertySelectorAttribute att = (PropertySelectorAttribute) findAttribute(PropertySelectorAttribute.class);
    if (att != null) {
        return att.getValue(entity);
    }
    return null;
}
Also used : PropertySelectorAttribute(com.codename1.rad.attributes.PropertySelectorAttribute)

Example 5 with PropertySelector

use of com.codename1.rad.models.PropertySelector in project CodeRAD by shannah.

the class ImageContainer method createToFileSystem.

public static ImageContainer createToFileSystem(Entity entity, Property property, String filePath) {
    ImageContainer out = new ImageContainer();
    out.filePath = filePath;
    out.useFileSystem = true;
    out.property = new PropertySelector(entity, property);
    return out;
}
Also used : PropertySelector(com.codename1.rad.models.PropertySelector)

Aggregations

PropertySelector (com.codename1.rad.models.PropertySelector)6 PropertySelectorAttribute (com.codename1.rad.attributes.PropertySelectorAttribute)2 ResultParser (com.codename1.rad.io.ResultParser)1 Bindable (com.codename1.rad.models.Bindable)1 Entity (com.codename1.rad.models.Entity)1 EntityList (com.codename1.rad.models.EntityList)1 Property (com.codename1.rad.models.Property)1 PropertyChangeEvent (com.codename1.rad.models.PropertyChangeEvent)1 Tags (com.codename1.rad.models.Tags)1 EntityViewFactory (com.codename1.rad.ui.EntityViewFactory)1 Component (com.codename1.ui.Component)1 ActionListener (com.codename1.ui.events.ActionListener)1 FocusListener (com.codename1.ui.events.FocusListener)1