Anpassung des URLAgent oder Erweiterung der API um einen RegistryAgent

Hallo zusammen,

wir haben bereits in der Vergangenheit eine eigene URLFactory anhand der von e-Spirit vorgeschriebenen Spezifikation aufgesetzt.

Diese Factory durchläuft für einen idProvider mehrere PartialUrlCreators um am Ende dann die korrekte URL zu erhalten.

Zuletzt wird noch einmal geprüft ob diese URL bereits existiert und falls ja, wird eine /2 dahinter geschrieben.

Jetzt haben wir in der Vergangenheit um zu prüfen ob die URL/Pfad bereits existiert direkt in die UrlRegistry von FS geschaut.
Das haben wir über eine off-API Methode gemacht, indem wir uns von der ServerConnection über getManager() den RegistryManager geholt haben.

Jetzt gilt diese Art aber seit der R5.2.1808 nicht mehr als erlaubt weil die ServerConnection den Aufruf der getManager()-Methode unterbindet (SecurityException).

Der HelpDesk wies mich darauf hin, dass diese Art des Zugriffs nicht erlaubt ist und konnte mir aber auch keine Alternative nennen und hat mich an die Community und FeatureRequest verwiesen.

Aktuell lief unser Modul nicht mehr und ich war gezwungen eine andere OFF-API Version einzubauen. Nun hole ich mir den RegistryManager wir folgt.

ServerConnection.getBroker().requireSpecialist(ManagerBroker.TYPE).getManager(RegistryManager)

Da das aber auch OFF-API ist brauche ich dringend eine Alternative!

Wie gesagt, unser Anwendungsfall ist, das wir irgendwie aus der URLRegistry wissen müssen ob die erzeugte URL bereits existiert.
Hier ein kleiner Auszug aus der Funktion die die Prüfung übernimmt:

UrlFactory

IDProviderKey idProviderKey = new SSNodeKey(contentProducer, templateSet, language, pageParams);

for (int i = 2; !context.isFreeUrl(finalUrl, idProviderKey); i++) {

     finalUrl = url + i + "/";

}

UrlFactoryContext

...

urlRegistry = new UrlRegistry(registryManager, projectId, sessionId);

...

public boolean isFreeUrl(String path, IDProviderKey idProviderKey) {

     if (settings.containsKey("unifyUrls") && "no".equals(settings.get("unifyUrls"))) {

          return true;

     }

     List<IDProviderKey> idProviderKeys = urlRegistry.getEntries(path);

     return idProviderKeys.isEmpty() || (idProviderKeys.size() == 1 && idProviderKeys.get(0).equals(idProviderKey));

}

....

Gibt es vielleicht eine Alternative die ich noch nicht kenne?

Wenn dem nicht der Fall ist, würde ich hiermit gerne einen FeatureRequest stellen.

Dieses neue Feature soll entweder den URLAgent anpassen oder einen neuen RegistryAgent erstellen.

Dieser Agent muss eine Methode bereit stellen um mir anhand eines Pfades alle unter dem Pfad in der URLRegistry vorhandenen IDProviderKeys zurückgeben.

Also die Methode urlRegistry.getEntries(path) nach implementieren bzw. public zur Verfügung stellen.

Idealerweise liefert dieser neue Agent auch alle sonstigen GETTER-Methoden der de.espirit.firstspirit.generate.path.UrlRegistry

168091_pastedImage_28.png

Danke und Grüße
Olli Böck