I think I have something somewhere...

As I remember you need to update the recorder component...

Below is only meant as a sniplet(notice the recreate model, which now are 
called from the palette onchange function)..



package com.sas.jobindsats.ui.palette.component;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import wicket.Component;
import wicket.markup.html.form.HiddenField;
import wicket.markup.html.form.IChoiceRenderer;
import wicket.model.AbstractModel;
import wicket.util.string.Strings;

import com.sas.jobindsats.ui.palette.Palette;

/**
 * Component to keep track of selections on the html side. Also used for
 * encoding and decoding those selections between html and java.
 * 
 * @author Igor Vaynberg ( ivaynberg )
 */
public class Recorder extends HiddenField {
        private static final long serialVersionUID = 1L;

        private static final String[] EMPTY_IDS = new String[0];

        private final String seperator = "#";

        /** conviniently maintained array of selected ids */
        private String[] ids;

        /** parent palette object */
        private Palette palette;

        /**
         * @return parent Palette object
         */
        public Palette getPalette() {
                return palette;
        }

        /**
         * @param id
         *            component id
         * @param palette
         *            parent palette object
         */
        public Recorder(String id, Palette palette) {
                super(id);
                this.palette = palette;

                // BELOW ENSURES THAT IDS ARE NOT NULL
                reCreateModel();
                AbstractModel model = new AbstractModel() {

                        public Object getObject(Component component) {
                                StringBuffer modelStringBuffer = new 
StringBuffer();

                                for (int i = 0; ids.length > i; i++) {
                                        modelStringBuffer.append(ids[i]);
                                        if (i + 1 < ids.length) {
                                                
modelStringBuffer.append(seperator);
                                        }
                                }

                                // set model and update ids array

                                String modelString = 
modelStringBuffer.toString();

                                return modelString;

                        }

                        public void setObject(Component component, Object 
object) {
                                updateIds((String) object);
                        };
                };
                setModel(model);
        }

        protected void onValid() {
                super.onValid();
                updateIds();
        }

        /**
         * @return iterator over selected choices
         */
        public Iterator getSelectedChoices() {
                IChoiceRenderer renderer = getPalette().getChoiceRenderer();

                if (ids.length == 0) {
                        return Collections.EMPTY_LIST.iterator();
                }

                List selected = new ArrayList(ids.length);
                for (int i = 0; i < ids.length; i++) {
                        Iterator it = getPalette().getChoices().iterator();
                        while (it.hasNext()) {
                                final Object choice = it.next();
                                if (renderer.getIdValue(choice, 
0).equals(ids[i])) {
                                        selected.add(choice);
                                        break;
                                }
                        }
                }
                return selected.iterator();
        }

        /**
         * @return iterator over unselected choices
         */
        public Iterator getUnselectedChoices() {
                IChoiceRenderer renderer = getPalette().getChoiceRenderer();
                Collection choices = getPalette().getChoices();

                if (choices.size() - ids.length == 0) {
                        return Collections.EMPTY_LIST.iterator();
                }

                List unselected = new ArrayList(Math
                                .max(1, choices.size() - ids.length));
                Iterator it = choices.iterator();
                while (it.hasNext()) {
                        final Object choice = it.next();
                        final String choiceId = renderer.getIdValue(choice, 0);
                        boolean selected = false;
                        for (int i = 0; i < ids.length; i++) {
                                if (ids[i].equals(choiceId)) {
                                        selected = true;
                                        break;
                                }
                        }
                        if (!selected) {
                                unselected.add(choice);
                        }
                }
                return unselected.iterator();
        }

        protected void onInvalid() {
                super.onInvalid();
                updateIds();
        }

        private void updateIds() {
                updateIds(getValue());
        }

        public void updateIds(String value) {
                if (Strings.isEmpty(value)) {
                        ids = EMPTY_IDS;
                } else {
                        ids = value.split(seperator);
                }
        }

        public void reCreateModel() {

                // construct the model string based on selection collection
                IChoiceRenderer renderer = getPalette().getChoiceRenderer();
                StringBuffer modelStringBuffer = new StringBuffer();

                Iterator selection = ((Collection) 
getPalette().getModelObject())
                                .iterator();

                while (selection.hasNext()) {
                        
modelStringBuffer.append(renderer.getIdValue(selection.next(), 0));
                        if (selection.hasNext()) {
                                modelStringBuffer.append(seperator);
                        }
                }

                // Get values from modelstringbuffer

                String modelString = modelStringBuffer.toString();

                // Only add if not already added
                String[] local = getValue().split(seperator);

                for (int i = 0; local.length > i; i++) {
                        if (modelString.indexOf(local[i]) == -1) {
                                modelString += seperator + local[i];
                        }
                }
                updateIds(modelString);

        }

}

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Vincent Renaville
Sent: 30. november 2006 11:40
To: Wicket List
Subject: [Wicket-user] Palette add selected option

Dear,

I use the paleete component, to assigne option to a User. but I don't
find a functionnality, how to set already selected option ?.

Exemple : a user selected option, I store it into a database:
In the futur, the user want to update his option, at the moment he
doesn't see his previous selected option.

Do you have a solution.

Kind regards,

Vincent



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to