Pierced
I'm new here

Option aus Entity erstellen

Jump to solution

Hallo,

hier ein ganz einfacher Anwendungsfall (?)

Man hat eine Entity zur Hand, mit der man per API einen ComboxEditor befüllen möchte. Das macht man ja gewöhnlich, indem man eine Option auf  ComboboxEditorValue.getEditor() setzt. Was hier so einfach klingt, scheint in der Praxis aber nicht so zu sein:

Die ContentOptionFactory hat keine öffentliche create()-Methode, und auch sonst scheint es keinen öffentlichen Weg zu geben, eine Option aus aus einer Entity zu erstellen.

Wie geht man hier vor?

Zur Abschreckung noch ein Beispiel aus unserem Projekt

ComboboxEditorValue entitiesToBePublishedEntry = (ComboboxEditorValue) data.get(Constants.FIELD_QUEUE_ENTRY).getEditor();

   for (int comboboxEntryCounter = comboboxEntries.getSize() - 1; comboboxEntryCounter >= 0; comboboxEntryCounter--) {

                Option comboboxEntry = (Option) comboboxEntries.getElementAt(comboboxEntryCounter);

                if (comboboxEntry.getValue() instanceof Entity) {

                  Entity comboboxEntity = (Entity) comboboxEntry.getValue();

                  if (((TemporalIdentifier) comboboxEntity.getIdentifier()).getId() == ((TemporalIdentifier) entityForEntitiesToBePublished.getIdentifier()).getId()) {

                    entitiesToBePublishedEntry.set(masterLang, comboboxEntry);

                    break;

                  }

                }

   }

Das ist doch Wahnsinn! :smileyplain: Ich meine nicht nur den Code-Stil an sich (man hätte hier z.B. über OptionModel.iterator() gehen sollen).

Die "API" zwingt uns auf die interne API auszuweichen, weil keine geeigneten Methoden zur Verfügung stehen.

Und, sorry ich kann's mir nicht verkneifen, aber die FirstSpirit API-Dokumentation bzw. das JavaDoc ist leider ganz schön wenig bis gar nicht vorhanden und daher nahezu unbrauchbar. Ich hoffe daran wird gearbeitet.

0 Kudos
1 Solution

Accepted Solutions

hallo Georg,

das Interface ComboboxEditorValue erweitert OptionsEditorValue und OptionsEditorValue#getOptionFactory liefert die Factory. also sollte ComboboxEditorValue#getOptionFactory die entsprechende Instanz der Factory liefern.

View solution in original post

0 Kudos
3 Replies
andre
I'm new here

http://www.e-spirit.com/odfs42/access/de/espirit/firstspirit/access/editor/value/OptionFactory.html#...

wobei Object hier auch ein Entity sein kann, im Falle einer ContentOptionFactory welche OptionFactory implementiert

0 Kudos

Hallo Andre,

was ich erwartet hätte wäre so etwas:

Option op = OptionFactory.getInstance().createOption(Object x)

Oder von mir aus auch

Option op = OptionFactory.create(Entity e)

in der FS-Version, die hier im Einsatz ist (4.2.427.43284), ist OptionFactory ein Interface, und es gibt 3 implementierende Klassen:

  1. OptionFactoryImpl<T>
  2. SimpleOptionFactory
  3. ContentOptionFactory

Nummer 1 ist privat und daher nicht geeignet.

Nummer 2 macht SimpleOptions, die nicht für Entities geeignet sind.

Nummer 3 hat keine statische create Methode, daher muss man die Factory also instanziieren.

Da das Teil undokumentiert ist, kann ich hier ja vielleicht die Frage stellen wie man damit umgehen soll?

new ContentOptionFactory(table, key, expressions);


0 Kudos

hallo Georg,

das Interface ComboboxEditorValue erweitert OptionsEditorValue und OptionsEditorValue#getOptionFactory liefert die Factory. also sollte ComboboxEditorValue#getOptionFactory die entsprechende Instanz der Factory liefern.

0 Kudos