MichaelN
I'm new here

UrlFactory benutzen

Hallo,

wie komme ich nach Implemetierung und Erweiterung meiner module.xml um eine UrlFactory nun im Java-Code an die Implemtierung, um z.B. die getUrl-Methode aufzurufen?

0 Kudos
7 Replies
Peter_Jodeleit
Crownpeak employee

Ich glaube, hier musst du etwas mehr ins Detail gehen.

Du kannst getStoredUrl(..) aufrufen (auf einer Seite oder einem Medium). Ansonsten kannst du deine eigene UrlFactory selber instantiieren und die Methoden direkt aufrufen.

Peter
0 Kudos

Ich habe ja ein eigene UrlFactory, welche ich implemtiert habe und analog "Listing 76: Beispiel URL-Erzeugung-–Moduldeskriptor mit Angabe einer UrlFactory-Implementierung" (MDEV50DE_FirstSpirit_ModulDeveloperDoc.pdf) in meine module.xml ergänzt habe.

Ich möchte nun wissen, wie ich an die Instanz meiner Implemtierung komme.

In meinem Fall befinde ich mich inerhalb eines TabListener und habe (wenn das hilft ) einen GuiScriptContext per Bean-Shell-Script übergeben bekommen.

Ich würde jetzt gerne folgendes machen:

public static void myMethodCalledFromBeanShell(final GuiScriptContext context) {

final IDProvider selectedElement  = ...

final TemplateSet templateSet = ...

final Language lang = ...

final PageParams pageParams = ...

MyUrlFactory urlFactory =  [hier weiß ich nicht weiter] <=======================

String url = urlFactory.getUrl(selectedElement, templateSet, lang, pageParams );

// mach was mit der url

}

0 Kudos

Was passiert denn bei "new MyUrlFactory()"? Im Fehlerfall bitte vollständige Fehlermeldung und auch deine module.xml posten.

Peter
0 Kudos

Wenn ich das einfach im Code so instanziiere:

MyUrlFactory urlFactory = new MyUrlFactory();

ist die init Methode nicht aufgerufen und meine internen properties pathLookup und settings sind null.

public class MyUrlFactory implements UrlFactory  {

   

    private PathLookup pathLookup;

    private UrlFactorySettings settings;

 

    public MyUrlFactory() {

       

    }

   

    @Override

    public void init(final Map<String, String> settings, final PathLookup pathLookup) {

        this.pathLookup = pathLookup;

        this.settings = new UrlFactorySettings(settings);

    }

...

}

Hier die module.xml

<!DOCTYPE module SYSTEM "module.dtd">

<module>

          <name>Name</name>

          <version>${distribution.version}</version>

          <description>${project.description}</description>

          <vendor>Company</vendor>

 

          <components>

                    ...

 

                    <public>

                              <name>MyUrlFactory</name>

                              <class>de.espirit.firstspirit.generate.UrlCreatorSpecification</class>

                              <configuration>

                                        <UrlFactory>package.to.factory.MyUrlFactory</UrlFactory>

                                        <urlprefix>http://www.example.com</urlprefix>.

                                        <urlpostfix>.html</urlpostfix>.

                              </configuration>

                    </public>

          </components>

</module>

0 Kudos

Ja, das ist erwartungskonform. init(..) aufzurufen liegt in der Verantwortung desjenigen, der die Instanz erzeugt.

Sprich: Erzeugst du das Objekt, musst du es auch initialisieren.

Für die "settings" kannst du z.B. Collections.emptyMap() benutzen, für PathLookupFactory kannst du z.B. eine anonyme Implementierung nutzen, die für SiteStoreFolder an dessen Methode getStoredUrl(Language, TemplateSet) delegiert und ansonsten null liefert.

Peter
0 Kudos

Das ist schonmal hilfreich, aber eigentlich wollte ich ja die URLFactory benutzen, so wie sie in der module.xml configuriert ist, also inkl. der dort definierten configuration-keys. Ansonsten müsste ich diese ja noch einmal in meiner Plugin-Konfiguration reduntant configurieren lassen!?

Komme ich denn nicht an eine von FS-erzeugten Instanz meiner URLFactory?

Vielleicht besteht hier auch meinerseits noch ein Verständnis-Problem bzgl. der URLFactory !?

0 Kudos

Ansonsten müsste ich diese ja noch einmal in meiner Plugin-Konfiguration reduntant configurieren lassen!?

Ja, das geht leider nicht anders.

Peter
0 Kudos