Re: Model map with enum as a key

2019-02-04 Thread Bas Gooren
Hi!

In your first code example you are binding the property model to your
config map, using a string key for lookup (“VALUE1”).
Since generics in java is mostly syntactic sugar, I think the PropertyModel
reads & writes from your config map using a String key.
This is why hibernate complains: the map contains a String key instead of
an Enum.

We use a specialized MapKeyModel in our apps for this:

---

import java.util.Map;

import org.apache.wicket.model.IModel;

public class MapKeyModel implements IModel
{
private final IModel> mapModel;
private final K key;

public static  MapKeyModel of( IModel> mapModel,
K key )
{
return new MapKeyModel( mapModel, key );
}

public MapKeyModel( IModel> mapModel, K key )
{
this.mapModel = mapModel;
this.key = key;
}

@Override
public V getObject()
{
Map map = mapModel.getObject();

return map.get( key );
}

@Override
public void setObject( V object )
{
Map map = mapModel.getObject();

map.put( key, object );
}

@Override
public void detach()
{
mapModel.detach();
}

}

---

Met vriendelijke groet,
Kind regards,

Bas Gooren

Op 4 februari 2019 bij 13:51:28, Zbynek Vavros (zbynekvav...@gmail.com)
schreef:

I got this class that has map with enums as keys:

public class MasterClass {

private Map config = Maps.newHashMap();
}

enum is classic:

public enum MyEnum {
VALUE1,
VALUE2
}

now I would like to use one entry of this map as a model for TextField:

new RequiredTextField<>("componentId", new
PropertyModel<>(modelObject.getConfig(), "VALUE1")))

but when saved to DB Hibernate says the key is String and Enum is expected:
java.lang.ClassCastException: java.lang.String cannot be cast to
java.lang.Enum

Using ChainingModel or
Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value not
to be bind at all.

I know I can use "side" property and fill this map manually in onSubmit
just before saving to DB but would like to avoid that.

Thanks


Re: Model map with enum as a key

2019-02-04 Thread Francois Meillet
you are saving the value and not the key, which is why hibernate complains.

WHy not choose a DropDownBox ?

François



> Le 4 févr. 2019 à 14:03, Zbynek Vavros  a écrit :
> 
> Do you mean to manually iterate through the map and converting the string
> keys
> Wicket binds to enum keys? Even if I try to iterate through the map I get
> the same ClassCastException.
> Somehow Wicket managed to insert String as a key instead of enum.
> 
> Zbynek
> 
> 
> 
> On Mon, Feb 4, 2019 at 1:55 PM Francois Meillet 
> wrote:
> 
>> use MyEnum.valueOf("your string ») before saving the data
>> 
>> François
>> 
>> 
>> 
>>> Le 4 févr. 2019 à 13:51, Zbynek Vavros  a écrit
>> :
>>> 
>>> I got this class that has map with enums as keys:
>>> 
>>> public class MasterClass {
>>> 
>>>   private Map config = Maps.newHashMap();
>>> }
>>> 
>>> enum is classic:
>>> 
>>> public enum MyEnum {
>>>   VALUE1,
>>>   VALUE2
>>> }
>>> 
>>> now I would like to use one entry of this map as a model for TextField:
>>> 
>>> new RequiredTextField<>("componentId", new
>>> PropertyModel<>(modelObject.getConfig(), "VALUE1")))
>>> 
>>> but when saved to DB Hibernate says the key is String and Enum is
>> expected:
>>> java.lang.ClassCastException: java.lang.String cannot be cast to
>>> java.lang.Enum
>>> 
>>> Using ChainingModel or
>>> Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value
>> not
>>> to be bind at all.
>>> 
>>> I know I can use "side" property and fill this map manually in onSubmit
>>> just before saving to DB but would like to avoid that.
>>> 
>>> Thanks
>> 
>> 
>> -
>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>> 
>> 


-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: Model map with enum as a key

2019-02-04 Thread Zbynek Vavros
Do you mean to manually iterate through the map and converting the string
keys
Wicket binds to enum keys? Even if I try to iterate through the map I get
the same ClassCastException.
Somehow Wicket managed to insert String as a key instead of enum.

Zbynek



On Mon, Feb 4, 2019 at 1:55 PM Francois Meillet 
wrote:

> use MyEnum.valueOf("your string ») before saving the data
>
> François
>
>
>
> > Le 4 févr. 2019 à 13:51, Zbynek Vavros  a écrit
> :
> >
> > I got this class that has map with enums as keys:
> >
> > public class MasterClass {
> >
> >private Map config = Maps.newHashMap();
> > }
> >
> > enum is classic:
> >
> > public enum MyEnum {
> >VALUE1,
> >VALUE2
> > }
> >
> > now I would like to use one entry of this map as a model for TextField:
> >
> > new RequiredTextField<>("componentId", new
> > PropertyModel<>(modelObject.getConfig(), "VALUE1")))
> >
> > but when saved to DB Hibernate says the key is String and Enum is
> expected:
> > java.lang.ClassCastException: java.lang.String cannot be cast to
> > java.lang.Enum
> >
> > Using ChainingModel or
> > Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value
> not
> > to be bind at all.
> >
> > I know I can use "side" property and fill this map manually in onSubmit
> > just before saving to DB but would like to avoid that.
> >
> > Thanks
>
>
> -
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>


Re: Model map with enum as a key

2019-02-04 Thread Francois Meillet
use MyEnum.valueOf("your string ») before saving the data

François



> Le 4 févr. 2019 à 13:51, Zbynek Vavros  a écrit :
> 
> I got this class that has map with enums as keys:
> 
> public class MasterClass {
> 
>private Map config = Maps.newHashMap();
> }
> 
> enum is classic:
> 
> public enum MyEnum {
>VALUE1,
>VALUE2
> }
> 
> now I would like to use one entry of this map as a model for TextField:
> 
> new RequiredTextField<>("componentId", new
> PropertyModel<>(modelObject.getConfig(), "VALUE1")))
> 
> but when saved to DB Hibernate says the key is String and Enum is expected:
> java.lang.ClassCastException: java.lang.String cannot be cast to
> java.lang.Enum
> 
> Using ChainingModel or
> Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value not
> to be bind at all.
> 
> I know I can use "side" property and fill this map manually in onSubmit
> just before saving to DB but would like to avoid that.
> 
> Thanks


-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Model map with enum as a key

2019-02-04 Thread Zbynek Vavros
I got this class that has map with enums as keys:

public class MasterClass {

private Map config = Maps.newHashMap();
}

enum is classic:

public enum MyEnum {
VALUE1,
VALUE2
}

now I would like to use one entry of this map as a model for TextField:

new RequiredTextField<>("componentId", new
PropertyModel<>(modelObject.getConfig(), "VALUE1")))

but when saved to DB Hibernate says the key is String and Enum is expected:
java.lang.ClassCastException: java.lang.String cannot be cast to
java.lang.Enum

Using ChainingModel or
Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value not
to be bind at all.

I know I can use "side" property and fill this map manually in onSubmit
just before saving to DB but would like to avoid that.

Thanks