Example usage for org.apache.wicket.markup.repeater.data IDataProvider IDataProvider

List of usage examples for org.apache.wicket.markup.repeater.data IDataProvider IDataProvider

Introduction

In this page you can find the example usage for org.apache.wicket.markup.repeater.data IDataProvider IDataProvider.

Prototype

IDataProvider

Source Link

Usage

From source file:de.inren.frontend.health.BmiDefinitionPanel.java

License:Apache License

private IDataProvider<BmiMeaning> getDataProvider() {
    return new IDataProvider<BmiMeaning>() {

        @Override/* w  ww  . j  a  v a 2 s. c  o m*/
        public void detach() {
        }

        @Override
        public Iterator<? extends BmiMeaning> iterator(long first, long count) {
            List<BmiMeaning> l = Arrays.asList(BmiMeaning.values()).subList((int) first, (int) (first + count));
            Collections.reverse(l);
            return l.iterator();
        }

        @Override
        public long size() {
            return BmiMeaning.values().length;
        }

        @Override
        public IModel<BmiMeaning> model(BmiMeaning object) {
            return new Model<BmiMeaning>(object);
        }

    };
}

From source file:eu.uqasar.web.pages.admin.meta.MetaDataEditPanel.java

License:Apache License

private IDataProvider<T> getMetaDataProvider(final Class<T> clazz) {
    return new IDataProvider<T>() {

        @Override/*ww  w  .  j  a  va  2  s . c  om*/
        public Iterator<T> iterator(long first, long count) {
            return service.getAllAscendingByName(clazz, first, count).iterator();
        }

        @Override
        public long size() {
            return service.countAll(clazz);
        }

        @Override
        public IModel<T> model(T object) {
            return Model.of(object);
        }

        @Override
        public void detach() {

        }
    };
}

From source file:eu.uqasar.web.pages.admin.teams.panels.EditTeamPanel.java

License:Apache License

private IDataProvider<TeamMembership> getMembershipProvider(final Team team) {
    return new IDataProvider<TeamMembership>() {

        @Override/* w w  w  .  j  a  va2s .c  o m*/
        public Iterator<? extends TeamMembership> iterator(long first, long count) {
            return team.getMembers().iterator();
        }

        @Override
        public long size() {
            return team.getMembers().size();
        }

        @Override
        public IModel<TeamMembership> model(TeamMembership object) {
            return Model.of(object);
        }

        @Override
        public void detach() {

        }
    };
}

From source file:eu.uqasar.web.pages.admin.teams.TeamEditPage.java

License:Apache License

private IDataProvider<TeamMembership> getMembershipProvider(final Team team) {
    return new IDataProvider<TeamMembership>() {

        @Override//from  ww w .  j  a va 2  s  . c  o  m
        public Iterator<? extends TeamMembership> iterator(long first, long count) {
            // TODO take into account first and count
            return team.getMembers().iterator();
        }

        @Override
        public long size() {
            return team.getMembers().size();
        }

        @Override
        public IModel<TeamMembership> model(TeamMembership object) {
            return Model.of(object);
        }

        @Override
        public void detach() {

        }
    };
}

From source file:net.databinder.components.hib.QueryPanel.java

License:Open Source License

/**
 * Creates a result table for the current query.
 * @return a result table, or an empty label if there is no current query
 *//*  w  w  w.j a v a2 s . c  o  m*/
private Component getResultsTable() {
    if (Strings.isEmpty(query.getQuery())) {
        return new Label("results", "");
    } else {
        IDataProvider dataProvider = new IDataProvider() {
            private static final long serialVersionUID = 1L;

            public void detach() {
            }

            public int size() {
                Session sess = Databinder.getHibernateSession();
                Query query = sess.createQuery(getQuery());
                return query.list().size();
            }

            public String getQuery() {
                return QueryPanel.this.query.getQuery();
            }

            public IModel model(Object object) {
                return new BoundCompoundPropertyModel(new HibernateObjectModel(object));
            }

            public Iterator iterator(int first, int count) {
                Session sess = Databinder.getHibernateSession();
                long start = System.nanoTime();
                try {
                    Query q = sess.createQuery(getQuery());
                    q.setFirstResult(first);
                    q.setMaxResults(count);
                    return q.iterate();
                } finally {
                    float nanoTime = ((System.nanoTime() - start) / 1000) / 1000.0f;
                    setExecutionInfo("query executed in " + nanoTime + " ms: " + getQuery());
                }
            }
        };
        IColumn[] columns;
        Session sess = Databinder.getHibernateSession();
        Query q = sess.createQuery(query.getQuery());
        String[] aliases;
        Type[] returnTypes;
        try {
            aliases = q.getReturnAliases();
            returnTypes = q.getReturnTypes();
        } catch (NullPointerException e) { // thrown on updates
            return new Label("results", "");
        }

        if (returnTypes.length != 1) {
            columns = new IColumn[returnTypes.length];
            for (int i = 0; i < returnTypes.length; i++) {
                String alias = aliases == null || aliases.length <= i ? returnTypes[i].getName() : aliases[i];
                final int index = i;
                columns[i] = new AbstractColumn(new Model(alias)) {
                    private static final long serialVersionUID = 1L;

                    public void populateItem(Item cellItem, String componentId, IModel rowModel) {
                        Object[] objects = (Object[]) rowModel.getObject();
                        cellItem.add(new Label(componentId,
                                new Model(objects[index] == null ? "" : objects[index].toString())));
                    }
                };
            }
        } else {
            Type returnType = returnTypes[0];
            if (returnType.isEntityType()) {
                Class clss = returnType.getReturnedClass();
                ClassMetadata metadata = Databinder.getHibernateSessionFactory().getClassMetadata(clss);
                List<IColumn> cols = new ArrayList<IColumn>();
                String idProp = metadata.getIdentifierPropertyName();
                cols.add(new PropertyColumn(new Model(idProp), idProp));
                String[] properties = metadata.getPropertyNames();
                for (String prop : properties) {
                    Type type = metadata.getPropertyType(prop);
                    if (type.isCollectionType()) {
                        // TODO: see if we could provide a link to the collection value
                    } else {
                        cols.add(new PropertyColumn(new Model(prop), prop));
                    }
                }
                columns = (IColumn[]) cols.toArray(new IColumn[cols.size()]);
            } else {
                String alias = aliases == null || aliases.length == 0 ? returnType.getName() : aliases[0];
                columns = new IColumn[] { new AbstractColumn(new Model(alias)) {
                    private static final long serialVersionUID = 1L;

                    public void populateItem(Item cellItem, String componentId, IModel rowModel) {
                        cellItem.add(new Label(componentId, rowModel));
                    }
                } };
            }
        }
        DataTable dataTable = new DataTable("results", columns, dataProvider, 10);

        dataTable.addTopToolbar(new HeadersToolbar(dataTable, null));
        dataTable.addBottomToolbar(new NavigationToolbar(dataTable));
        dataTable.setOutputMarkupId(true);
        return dataTable;
    }
}

From source file:org.apache.openmeetings.web.user.profile.MessagesContactsPanel.java

License:Apache License

public MessagesContactsPanel(String id) {
    super(id);/*from w w  w . j  a v  a  2  s. co m*/
    NOT_MOVE_FOLDER.setId(MOVE_CHOOSE);
    NOT_MOVE_FOLDER.setFolderName(Application.getString(1243));
    foldersModel.setObject(getBean(PrivateMessageFolderDao.class).get(0, Integer.MAX_VALUE));
    updateMoveModel();

    final AddFolderDialog addFolder = new AddFolderDialog("addFolder") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit(AjaxRequestTarget target) {
            super.onSubmit(target);
            PrivateMessageFolderDao fDao = getBean(PrivateMessageFolderDao.class);
            fDao.addPrivateMessageFolder(getModelObject(), getUserId());
            foldersModel.setObject(fDao.get(0, Integer.MAX_VALUE));
            updateMoveModel();
            target.add(folders, moveDropDown);
        }
    };
    add(addFolder);
    add(new JQueryBehavior(".email.new", "button"));
    folders.add(inbox.add(new AjaxEventBehavior("click") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            selectFolder(inbox, INBOX_FOLDER_ID, target);
        }
    }));
    folders.add(sent.add(new AjaxEventBehavior("click") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            selectFolder(sent, SENT_FOLDER_ID, target);
        }
    }));
    folders.add(trash.add(new AjaxEventBehavior("click") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            selectFolder(trash, TRASH_FOLDER_ID, target);
        }
    }));
    folders.add(new WebMarkupContainer("newdir").add(new AjaxEventBehavior("click") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            addFolder.open(target);
        }
    }).add(new JQueryBehavior(".email.newdir", "button")));
    add(folders.add(new ListView<PrivateMessageFolder>("folder", foldersModel) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final ListItem<PrivateMessageFolder> item) {
            item.add(new Label("name", item.getModelObject().getFolderName()));
            item.add(new ConfirmableAjaxBorder("delete", getString("80"), getString("833")) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
                    attributes.setEventPropagation(EventPropagation.STOP_IMMEDIATE);
                }

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    PrivateMessageFolderDao fDao = getBean(PrivateMessageFolderDao.class);
                    fDao.delete(item.getModelObject(), getUserId());
                    foldersModel.setObject(fDao.get(0, Integer.MAX_VALUE));
                    updateMoveModel();
                    target.add(folders, moveDropDown);
                }
            });
            item.add(new AjaxEventBehavior("click") {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onEvent(AjaxRequestTarget target) {
                    selectFolder(item, item.getModelObject().getId(), target);
                }
            });
            setFolderClass(item);
        }
    }).setOutputMarkupId(true));

    SearchableDataProvider<PrivateMessage> sdp = new SearchableDataProvider<PrivateMessage>(
            PrivateMessageDao.class) {
        private static final long serialVersionUID = 1L;

        @Override
        protected PrivateMessageDao getDao() {
            return (PrivateMessageDao) super.getDao();
        }

        @Override
        public Iterator<? extends PrivateMessage> iterator(long first, long count) {
            allMessages.clear();
            readMessages.clear();
            unreadMessages.clear();
            String sort = getSort() == null ? "" : "m." + getSort().getProperty();
            boolean isAsc = getSort() == null ? true : getSort().isAscending();
            return getDao().get(getUserId(), selectedFolderModel.getObject(), search, sort, isAsc, (int) first,
                    (int) count).iterator();
        }

        @Override
        public long size() {
            return getDao().count(getUserId(), selectedFolderModel.getObject(), search);
        }
    };
    final SearchableDataView<PrivateMessage> dv = new SearchableDataView<PrivateMessage>("messages", sdp) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(Item<PrivateMessage> item) {
            PrivateMessage m = item.getModelObject();
            final Long id = m.getId();
            allMessages.add(id);
            if (m.getIsRead()) {
                readMessages.add(id);
            } else {
                unreadMessages.add(id);
            }
            item.add(new Label("id", id));
            item.add(new Label("from", getDisplayName(m.getFrom())));
            item.add(new Label("subject", m.getSubject()));
            item.add(new Label("send", getDateFormat().format(m.getInserted())));
            item.add(new AjaxEventBehavior("click") {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onEvent(AjaxRequestTarget target) {
                    long selected = id;
                    if (selectedMessages.contains(id)) {
                        selectedMessages.remove(id);
                        selected = selectedMessages.isEmpty() ? -1 : selectedMessages.iterator().next();
                    } else {
                        selectedMessages.add(id);
                    }
                    selectMessage(selected, target);
                    target.add(container);
                }
            });
            StringBuilder cssClass = new StringBuilder(m.getIsRead() ? "" : "unread");
            if (selectedMessages.contains(id)) {
                if (cssClass.length() > 0) {
                    cssClass.append(" ");
                }
                cssClass.append("ui-state-active");
            }
            item.add(AttributeModifier.replace("class", cssClass.toString()));
        }
    };
    PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dv) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            emptySelection(target);
            target.add(container);
        }
    };
    dataContainer = new DataViewContainer<PrivateMessage>(container, dv, navigator);
    dataContainer.addLink(new OmOrderByBorder<PrivateMessage>("orderById", "id", dataContainer))
            .addLink(new OmOrderByBorder<PrivateMessage>("orderByFrom", "from.lastname", dataContainer))
            .addLink(new OmOrderByBorder<PrivateMessage>("orderBySubject", "subject", dataContainer))
            .addLink(new OmOrderByBorder<PrivateMessage>("orderBySend", "inserted", dataContainer));
    add(dataContainer.getLinks());
    add(navigator);

    add(unread.setOutputMarkupId(true));

    add(buttons.setOutputMarkupId(true));
    buttons.add(toInboxBtn.add(new AjaxEventBehavior("click") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            getBean(PrivateMessageDao.class).moveMailsToFolder(selectedMessages, INBOX_FOLDER_ID);
            selectFolder(selectedFolder, selectedFolderModel.getObject(), target);
        }
    }));
    buttons.add(deleteBtn.add(new AjaxEventBehavior("click") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            if (TRASH_FOLDER_ID.equals(selectedFolderModel.getObject())) {
                getBean(PrivateMessageDao.class).delete(selectedMessages);
            } else {
                getBean(PrivateMessageDao.class).moveMailsToFolder(selectedMessages, TRASH_FOLDER_ID);
            }
            emptySelection(target);
            target.add(container);
        }
    }));
    buttons.add(readBtn.add(new AjaxEventBehavior("click") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            getBean(PrivateMessageDao.class).updateReadStatus(selectedMessages, true);
            emptySelection(target);
            target.add(container, unread);
        }
    }));
    buttons.add(unreadBtn.add(new AjaxEventBehavior("click") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            getBean(PrivateMessageDao.class).updateReadStatus(selectedMessages, false);
            emptySelection(target);
            target.add(container);
        }
    }));
    buttons.add(selectDropDown.setOutputMarkupId(true).add(new OnChangeAjaxBehavior() {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            switch (selectDropDown.getModelObject()) {
            case SELECT_CHOOSE:
                break;
            case SELECT_ALL:
                selectedMessages.clear();
                selectedMessages.addAll(allMessages);
                break;
            case SELECT_NONE:
                selectedMessages.clear();
                break;
            case SELECT_UNREAD:
                selectedMessages.clear();
                selectedMessages.addAll(unreadMessages);
                break;
            case SELECT_READ:
                selectedMessages.clear();
                selectedMessages.addAll(readMessages);
                break;
            }
            target.add(container);
        }
    }));
    buttons.add(moveDropDown.setOutputMarkupId(true).add(new OnChangeAjaxBehavior() {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            Long folderId = moveDropDown.getModelObject().getId();
            if (!MOVE_CHOOSE.equals(folderId)) {
                getBean(PrivateMessageDao.class).moveMailsToFolder(selectedMessages, folderId);
            }
            selectFolder(selectedFolder, selectedFolderModel.getObject(), target);
        }
    }));

    selectMessage(-1, null);
    add(container.add(dv).setOutputMarkupId(true));
    //TODO add valid autoupdate add(new AjaxSelfUpdatingTimerBehavior(seconds(15)));
    add(selectedMessage.add(roomContainer.setVisible(false)).setOutputMarkupId(true));

    IDataProvider<UserContact> dp = new IDataProvider<UserContact>() {
        private static final long serialVersionUID = 1L;

        @Override
        public void detach() {
        }

        @Override
        public Iterator<? extends UserContact> iterator(long first, long count) {
            return getBean(UserContactDao.class).get(getUserId(), (int) first, (int) count).iterator();
        }

        @Override
        public long size() {
            return getBean(UserContactDao.class).count(getUserId());
        }

        @Override
        public IModel<UserContact> model(UserContact object) {
            return Model.of(object);
        }
    };
    final DataView<UserContact> dw = new DataView<UserContact>("users", dp) {
        private static final long serialVersionUID = 1L;

        private String getName(UserContact uc) {
            return uc.getOwner().getFirstname() + " " + uc.getOwner().getLastname(); //FIXME salutation
        }

        @Override
        protected void populateItem(Item<UserContact> item) {
            UserContact uc = item.getModelObject();
            final Long contactId = uc.getId();
            final Long userId = uc.getOwner().getId();
            if (uc.isPending()) {
                item.add(AttributeModifier.append("class", "unread"));
            }
            item.add(new Label("name", getName(uc)));
            item.add(new WebMarkupContainer("accept").add(new AjaxEventBehavior("click") {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onEvent(AjaxRequestTarget target) {
                    ContactsHelper.acceptUserContact(contactId);
                    updateContacts(target);
                }
            }).setVisible(uc.isPending()));
            item.add(new WebMarkupContainer("decline").add(new AjaxEventBehavior("click") {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onEvent(AjaxRequestTarget target) {
                    getBean(UserContactDao.class).delete(contactId);
                    updateContacts(target);
                }
            }).setVisible(uc.isPending()));
            item.add(new WebMarkupContainer("view")
                    .add(AttributeAppender.append("onclick", String.format("showUserInfo(%s);", userId))));
            item.add(new WebMarkupContainer("message")
                    .add(AttributeAppender.append("onclick", String.format("privateMessage(%s);", userId)))
                    .setVisible(!uc.isPending()));
            item.add(new ConfirmableAjaxBorder("delete", getString("80"), getString("833")) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
                    attributes.setEventPropagation(EventPropagation.STOP_IMMEDIATE);
                }

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    getBean(UserContactDao.class).delete(contactId);
                    updateContacts(target);
                }
            }.setVisible(!uc.isPending()));
        }
    };
    updateContacts(null);
    add(contacts.add(dw, pendingContacts, allContacts).setOutputMarkupId(true));//TODO update

    //hack to add FixedHeaderTable after Tabs.
    add(new AbstractDefaultAjaxBehavior() {
        private static final long serialVersionUID = 1L;

        @Override
        protected void respond(AjaxRequestTarget target) {
            selectFolder(inbox, INBOX_FOLDER_ID, target);
            selectMessage(-1, target);
        }

        @Override
        public void renderHead(Component component, IHeaderResponse response) {
            super.renderHead(component, response);
            response.render(OnDomReadyHeaderItem.forScript(getCallbackScript()));
        }
    });
}

From source file:org.apache.openmeetings.web.user.profile.UserSearchPanel.java

License:Apache License

public UserSearchPanel(String id) {
    super(id);/*from www  . j  a v a 2s .  com*/

    add(new Form<Void>("form") {
        private static final long serialVersionUID = 1L;
        {
            add(new TextField<String>("text", new PropertyModel<String>(UserSearchPanel.this, "text")));
            add(new TextField<String>("offer", new PropertyModel<String>(UserSearchPanel.this, "offer")));
            add(new TextField<String>("search", new PropertyModel<String>(UserSearchPanel.this, "search")));
            add(new AjaxButton("submit") {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    searched = true;
                    refresh(target);
                }
            });
        }
    });
    IDataProvider<User> dp = new IDataProvider<User>() {
        private static final long serialVersionUID = 1L;

        @Override
        public void detach() {
        }

        @Override
        public Iterator<? extends User> iterator(long first, long count) {
            return searched
                    ? getBean(UserDao.class).searchUserProfile(getUserId(), text, offer, search, orderBy,
                            (int) first, (int) count, asc).iterator()
                    : new ArrayList<User>().iterator();
        }

        @Override
        public long size() {
            return searched ? getBean(UserDao.class).searchCountUserProfile(getUserId(), text, offer, search)
                    : 0;
        }

        @Override
        public IModel<User> model(User object) {
            return new CompoundPropertyModel<User>(object);
        }

    };
    final DataView<User> dw = new DataView<User>("users", dp) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(Item<User> item) {
            final UserContactDao contactsDao = getBean(UserContactDao.class);
            User u = item.getModelObject();
            final long userId = u.getId();
            item.add(new WebMarkupContainer("status")
                    .add(AttributeModifier.append("class", isUserOnline(userId) ? "online" : "offline")));
            item.add(new Label("name", getName(u)));
            item.add(new Label("tz", getBean(TimezoneUtil.class).getTimeZone(u).getID()));
            item.add(new Label("offer", u.getUserOffers()));
            item.add(new Label("search", u.getUserSearchs()));
            item.add(new WebMarkupContainer("view")
                    .add(AttributeAppender.append("onclick", String.format("showUserInfo(%s);", userId))));
            item.add(new WebMarkupContainer("add")
                    .setVisible(userId != getUserId() && !contactsDao.isContact(userId, getUserId()))
                    .add(AttributeAppender.append("onclick", String.format("addContact(%s);", userId))));
            item.add(new WebMarkupContainer("message").setVisible(userId != getUserId())
                    .add(AttributeAppender.append("onclick", String.format("privateMessage(%s);", userId))));
            item.add(new WebMarkupContainer("invite").setVisible(userId != getUserId())
                    .add(AttributeAppender.append("onclick", String.format("inviteUser(%s);", userId))));
            //item.add(new TooltipBehavior(new Options("content", "TODO:: Picture will be displayed"))); //FIXME 
        }
    };

    add(container.add(dw, new PagingNavigatorPanel("navigator", dw, itemsPerPage, 100) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            refresh(target);
        }
    }).setOutputMarkupId(true));
}

From source file:org.hippoecm.frontend.editor.plugins.linkpicker.FacetSelectTemplatePlugin.java

License:Apache License

public FacetSelectTemplatePlugin(final IPluginContext context, IPluginConfig config) {
    super(context, config);

    Node node = getModelObject();
    try {/*from ww  w  .j  ava 2s.c  o m*/
        if (!node.hasProperty("hippo:docbase")) {
            node.setProperty("hippo:docbase", node.getSession().getRootNode().getUUID());
        }
        if (!node.hasProperty("hippo:facets")) {
            node.setProperty("hippo:facets", new String[0]);
        }
        if (!node.hasProperty("hippo:values")) {
            node.setProperty("hippo:values", new String[0]);
        }
        if (!node.hasProperty("hippo:modes")) {
            node.setProperty("hippo:modes", new String[0]);
        }
    } catch (ValueFormatException e) {
        log.error(e.getMessage());
    } catch (PathNotFoundException e) {
        log.error(e.getMessage());
    } catch (RepositoryException e) {
        log.error(e.getMessage());
    }

    final IModel<String> displayModel = new LoadableDetachableModel<String>() {
        private static final long serialVersionUID = 1L;

        @Override
        protected String load() {
            Node node = FacetSelectTemplatePlugin.this.getModelObject();
            try {
                if (node != null && node.hasProperty("hippo:docbase")) {
                    String docbaseUUID = node.getProperty("hippo:docbase").getString();
                    if (docbaseUUID == null || docbaseUUID.equals("") || docbaseUUID.startsWith("cafebabe-")) {
                        return EMPTY_LINK_TEXT;
                    }
                    return node.getSession().getNodeByUUID(docbaseUUID).getPath();
                }
            } catch (ValueFormatException e) {
                log.warn("Invalid value format for docbase " + e.getMessage());
                log.debug("Invalid value format for docbase ", e);
            } catch (PathNotFoundException e) {
                log.warn("Docbase not found " + e.getMessage());
                log.debug("Docbase not found ", e);
            } catch (RepositoryException e) {
                log.error("Invalid docbase" + e.getMessage(), e);
            }
            return EMPTY_LINK_TEXT;
        }
    };

    mode = IEditor.Mode.fromString(config.getString("mode"), IEditor.Mode.VIEW);
    try {
        IDataProvider<Integer> provider = new IDataProvider<Integer>() {
            private static final long serialVersionUID = 1L;

            @Override
            public Iterator<Integer> iterator(long first, long count) {
                return new Iterator<Integer>() {
                    int current = 0;

                    public boolean hasNext() {
                        try {
                            Node node = ((JcrNodeModel) FacetSelectTemplatePlugin.this.getDefaultModel())
                                    .getNode();
                            return current < node.getProperty("hippo:facets").getValues().length;
                        } catch (RepositoryException ex) {
                            return false;
                        }
                    }

                    public Integer next() {
                        if (hasNext()) {
                            return Integer.valueOf(current++);
                        } else {
                            throw new NoSuchElementException();
                        }
                    }

                    public void remove() {
                        throw new UnsupportedOperationException();
                    }
                };
            }

            @Override
            public long size() {
                try {
                    Node node = ((JcrNodeModel) FacetSelectTemplatePlugin.this.getDefaultModel()).getNode();
                    return node.getProperty("hippo:facets").getValues().length;
                } catch (RepositoryException ex) {
                    return 0;
                }
            }

            @Override
            public IModel<Integer> model(Integer object) {
                return new Model<Integer>(object);
            }

            @Override
            public void detach() {
            }
        };
        if (IEditor.Mode.EDIT == mode) {
            final JcrPropertyValueModel<String> docbaseModel = new JcrPropertyValueModel<String>(
                    new JcrPropertyModel<String>(node.getProperty("hippo:docbase")));

            IDialogFactory dialogFactory = new IDialogFactory() {
                private static final long serialVersionUID = 1L;

                public AbstractDialog<String> createDialog() {
                    final IPluginConfig dialogConfig = LinkPickerDialogConfig
                            .fromPluginConfig(getPluginConfig(), docbaseModel);
                    return new LinkPickerDialog(context, dialogConfig, new IChainingModel<String>() {
                        private static final long serialVersionUID = 1L;

                        public String getObject() {
                            return docbaseModel.getObject();
                        }

                        public void setObject(String object) {
                            docbaseModel.setObject(object);
                            redraw();
                        }

                        public IModel<String> getChainedModel() {
                            return docbaseModel;
                        }

                        public void setChainedModel(IModel<?> model) {
                            throw new UnsupportedOperationException("Value model cannot be changed");
                        }

                        public void detach() {
                            docbaseModel.detach();
                        }
                    });
                }
            };

            add(new ClearableDialogLink("docbase", displayModel, dialogFactory, getDialogService()) {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClear() {
                    Node node = ((JcrNodeModel) FacetSelectTemplatePlugin.this.getDefaultModel()).getNode();
                    try {
                        node.setProperty("hippo:docbase", node.getSession().getRootNode().getUUID());
                    } catch (RepositoryException e) {
                        log.error("Unable to reset docbase to rootnode uuid", e);
                    }
                    redraw();
                }

                @Override
                public boolean isClearVisible() {
                    // Checking for string literals ain't pretty. It's probably better to create a better display model.
                    return !EMPTY_LINK_TEXT.equals((String) displayModel.getObject());
                }
            });

            add(new DataView<Integer>("arguments", provider) {
                private static final long serialVersionUID = 1L;

                @Override
                public void populateItem(final Item<Integer> item) {
                    Node node = FacetSelectTemplatePlugin.this.getModelObject();
                    final int index = item.getModelObject().intValue();
                    try {
                        item.add(new TextFieldWidget("facet", new JcrPropertyValueModel<String>(index,
                                new JcrPropertyModel<String>(node.getProperty("hippo:facets")))));
                        item.add(new TextFieldWidget("mode", new JcrPropertyValueModel<String>(index,
                                new JcrPropertyModel<String>(node.getProperty("hippo:modes")))));
                        item.add(new TextFieldWidget("value", new JcrPropertyValueModel<String>(index,
                                new JcrPropertyModel<String>(node.getProperty("hippo:values")))));
                        AjaxLink<Void> removeButton;
                        item.add(removeButton = new AjaxLink<Void>("remove") {
                            private static final long serialVersionUID = 1L;

                            @Override
                            public void onClick(AjaxRequestTarget target) {
                                Node node = ((JcrNodeModel) FacetSelectTemplatePlugin.this.getDefaultModel())
                                        .getNode();
                                for (String property : new String[] { "hippo:facets", "hippo:modes",
                                        "hippo:values" }) {
                                    try {
                                        Value[] oldValues = node.getProperty(property).getValues();
                                        Value[] newValues = new Value[oldValues.length - 1];
                                        System.arraycopy(oldValues, 0, newValues, 0, index);
                                        System.arraycopy(oldValues, index + 1, newValues, 0,
                                                oldValues.length - index - 1);
                                        node.setProperty(property, newValues);
                                    } catch (RepositoryException ex) {
                                        log.error("cannot add new facet select line", ex);
                                    }
                                }
                                FacetSelectTemplatePlugin.this.redraw();
                            }
                        });
                        removeButton.setOutputMarkupId(true);
                    } catch (RepositoryException ex) {
                        log.error("cannot read facet select line", ex);
                    }
                }
            });
            AjaxLink<Void> addButton;
            add(addButton = new AjaxLink<Void>("add") {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClick(AjaxRequestTarget target) {
                    Node node = ((JcrNodeModel) FacetSelectTemplatePlugin.this.getDefaultModel()).getNode();
                    for (String property : new String[] { "hippo:facets", "hippo:modes", "hippo:values" }) {
                        try {
                            Value[] oldValues = node.getProperty(property).getValues();
                            Value[] newValues = new Value[oldValues.length + 1];
                            System.arraycopy(oldValues, 0, newValues, 0, oldValues.length);
                            newValues[newValues.length - 1] = node.getSession().getValueFactory()
                                    .createValue("");
                            node.setProperty(property, newValues);
                        } catch (RepositoryException ex) {
                            log.error("cannot add new facet select line", ex);
                        }
                    }
                    FacetSelectTemplatePlugin.this.redraw();
                }
            });
            addButton.setOutputMarkupId(true);
        } else {
            add(new Label("docbase", displayModel));
            add(new DataView<Integer>("arguments", provider) {
                private static final long serialVersionUID = 1L;

                @Override
                public void populateItem(final Item<Integer> item) {
                    try {
                        Node node = FacetSelectTemplatePlugin.this.getModelObject();
                        int index = item.getModelObject().intValue();
                        item.add(new Label("facet",
                                node.getProperty("hippo:facets").getValues()[index].getString()));
                        item.add(new Label("mode",
                                node.getProperty("hippo:modes").getValues()[index].getString()));
                        item.add(new Label("value",
                                node.getProperty("hippo:values").getValues()[index].getString()));
                        Label removeButton;
                        item.add(removeButton = new Label("remove"));
                        removeButton.setVisible(false);
                    } catch (RepositoryException ex) {
                        log.error("cannot read facet select line", ex);
                    }
                }
            });
            Label addButton;
            add(addButton = new Label("add"));
            addButton.setVisible(false);
        }
    } catch (PathNotFoundException ex) {
        log.error("failed to read existing facet select", ex);
    } catch (ValueFormatException ex) {
        log.error("failed to read existing facet select", ex);
    } catch (RepositoryException ex) {
        log.error("failed to read existing facet select", ex);
    }

    setOutputMarkupId(true);
}

From source file:org.hippoecm.frontend.editor.workflow.MenuTester.java

License:Apache License

static IDataProvider getProvider(final MarkupContainer container) {
    return new IDataProvider() {
        private static final long serialVersionUID = 1L;

        private List<WorkflowAction> list;

        @Override/*from w w w . j a  v  a 2  s . c  om*/
        public Iterator iterator(final long first, final long count) {
            attach();

            long toIndex = first + count;
            if (toIndex > list.size()) {
                toIndex = list.size();
            }
            return list.subList((int) first, (int) toIndex).listIterator();
        }

        @Override
        public IModel model(Object object) {
            return new Model((Serializable) object);
        }

        @Override
        public long size() {
            attach();
            return list.size();
        }

        @SuppressWarnings({ "unchecked", "deprecation" })
        void attach() {
            if (list == null) {
                list = new LinkedList<WorkflowAction>();
                container.visitChildren(WorkflowAction.class, new IVisitor<WorkflowAction, Void>() {

                    @Override
                    public void component(WorkflowAction component, IVisit<Void> visit) {
                        list.add(component);
                    }
                });
            }
        }

        @Override
        public void detach() {
            list = null;
        }

    };
}

From source file:org.hippoecm.frontend.plugins.cms.browse.SectionViewer.java

License:Apache License

public SectionViewer(final String id, final BrowserSections sections, IRenderService parentRenderService) {
    super(id, new Model<String>(null));

    setOutputMarkupId(true);//from w  w  w. java2  s.c o  m

    add(new AttributeAppender("class", Model.of("section-viewer"), " "));

    this.parentService = parentRenderService;
    this.sections = sections;

    IDataProvider<String> sectionProvider = new IDataProvider<String>() {

        private transient List<String> names;

        private void load() {
            if (names == null) {
                names = new ArrayList<>(sections.getSections());
            }
        }

        @Override
        public Iterator<String> iterator(long first, long count) {
            load();
            return names.subList((int) first, (int) (first + count)).iterator();
        }

        @Override
        public IModel<String> model(String object) {
            return new Model<>(object);
        }

        @Override
        public long size() {
            return sections.getSections().size();
        }

        @Override
        public void detach() {
            names = null;
        }
    };

    add(new AbstractView<String>("list", sectionProvider) {

        @Override
        protected void populateItem(final Item<String> item) {
            final IBrowserSection section = sections.getSection(item.getModelObject());

            section.bind(parentService, "section-view");

            final Component component = section.getComponent();
            component.setOutputMarkupId(true);
            component.setOutputMarkupPlaceholderTag(true);
            item.add(component);

            item.add(new AttributeAppender("class", new AbstractReadOnlyModel<String>() {
                @Override
                public String getObject() {
                    return sections.isActive(section) ? "selected" : "unselected";
                }
            }, " "));
        }

        @Override
        protected void destroyItem(Item<String> item) {
            IBrowserSection section = sections.getSection(item.getModelObject());
            section.unbind();
        }
    });

    String selectedBrowserSection = (String) getDefaultModelObject();
    if (selectedBrowserSection != null) {
        select(selectedBrowserSection);
    }

    final Form form = new Form("selection-form");
    add(form);

    final SectionNamesModel sectionNamesModel = new SectionNamesModel();
    this.sections.addListener(sectionNamesModel);

    final IModel<String> selectModel = new SelectedSectionModel();
    select = new DropDownChoice<>("select", selectModel, sectionNamesModel, new IChoiceRenderer<String>() {
        @Override
        public Object getDisplayValue(final String sectionId) {
            final IBrowserSection section = sections.getSection(sectionId);
            return section.getTitle().getObject();
        }

        @Override
        public String getIdValue(final String sectionId, final int index) {
            return sectionId;
        }
    });
    select.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        @Override
        protected void onUpdate(final AjaxRequestTarget target) {
            onSelect(selectModel.getObject());
        }
    });
    form.add(select);

    this.sections.addListener(new IChangeListener() {
        public void onChange() {
            select(sections.getActiveSectionName());
        }
    });
}