4 votes

Faire fonctionner une version modifiée de ItemRequestForm.java dans DSpace version 6x

J'ai une version modifiée de ItemRequestForm.java qui fonctionnaient auparavant dans la version 5x. Dans item-view.xsl J'ai créé un lien qui, lorsqu'il est cliqué, redirige l'utilisateur vers ce formulaire modifié. Le modèle d'URL de ce lien est http://example.com/documentdelivery/123456789/1234 . Lorsque je mets à niveau ma version de DSpace vers 6x, j'ai des difficultés à la faire fonctionner. En raison d'une refonte majeure du code entre les versions 5 et 6, j'ai du mal à faire migrer mon code vers la dernière version.

Voici une partie du code qui a fonctionné dans la version 5x ( DocumentDeliveryForm.java )

Le code est principalement basé sur cette réponse : Comment puis-je obtenir le titre de la page de référence (élément) à partir d'une version modifiée de la page de rétroaction dans DSpace ?

    String handle=parameters.getParameter("handle","unknown");
    DSpaceObject dso = HandleManager.resolveToObject(context, handle);
    if (!(dso instanceof Item)) {
        return;
    }
    Request request = ObjectModelHelper.getRequest(objectModel);
    boolean firstVisit=Boolean.valueOf(request.getParameter("firstVisit"));

    Item item = (Item) dso;

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");

Lorsque j'ai fait la mise à jour vers la version 6, j'ai découvert que DSpaceObject dso = HandleManager.resolveToObject(context, handle) ne fonctionnait plus, je l'ai donc remplacé par DSpaceObject dso = handleService.resolveToObject(context, handle) .

Voici ma tentative de migrer mon code 5x vers 6x (Résultat : java.lang.NullPointerException)

    String handle=parameters.getParameter("handle","unknown");
    DSpaceObject dso = handleService.resolveToObject(context, handle);
    if (!(dso instanceof Item)) {
        return;
    }
    Request request = ObjectModelHelper.getRequest(objectModel);
    Item item = (Item) dso;

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            request.getRequestURI() + "/documentdelivery/" + item.getHandle(), Division.METHOD_POST,"primary");

Voici une autre tentative qui a abouti à Handle is null.

    Request request = ObjectModelHelper.getRequest(objectModel);
    String handle = request.getParameter("handle");
    DSpaceObject dso = handleService.resolveToObject(context, handle);
    if (!(dso instanceof Item)) {
        return;
    }
    boolean firstVisit=Boolean.valueOf(request.getParameter("firstVisit"));

    Item item = (Item) dso;

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");

En regardant la trace de la pile java, elle pointe vers cette ligne de code : DSpaceObject dso = handleService.resolveToObject(context, handle) . Il semble que la valeur de poignée n'est pas chargé.

Quelle partie de mon code dois-je modifier pour que je puisse rediriger avec succès les utilisateurs vers http://example.com/documentdelivery/123456789/1234 de http://example.com/handle/123456789/1234 ?

Quelle construction de la division du visualisateur d'articles est correcte ?

    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            request.getRequestURI() + "/documentdelivery/" + item.getHandle(), Division.METHOD_POST,"primary");

OU

    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");

Merci d'avance.

0voto

euler Points 811

Finalement, j'ai réussi à le faire fonctionner. J'ai également affiché d'autres champs de métadonnées en me basant sur mon précédent post ici : Obtenir d'autres métadonnées dans ItemRequestForm dans DSpace 6x

public void addBody(Body body) throws SAXException, WingException,
        UIException, SQLException, IOException, AuthorizeException
{
    Request request = ObjectModelHelper.getRequest(objectModel);

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("documentdelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle", "unknown"),Division.METHOD_POST,"primary");

    documentdelivery.setHead(T_head);

    String handle = parameters.getParameter("handle","unknown");
    DSpaceObject dso = handleService.resolveToObject(context, handle);
    Item item = (Item) dso;

    String citationDC = itemService.getMetadataFirstValue(item, "dc", "identifier", "citation", org.dspace.content.Item.ANY);
    String titleDC = item.getName();
    String title = "";
    if (citationDC != null && citationDC.length() > 0) {
        title = citationDC;
    } else {
        if (titleDC != null && titleDC.length() > 0)
            title = titleDC;
    }
    documentdelivery.addPara(title);

J'ai également ajouté les importations nécessaires :

import org.dspace.content.service.ItemService;
import org.dspace.handle.factory.HandleServiceFactory;
import org.dspace.handle.service.HandleService;

Et j'ai aussi ajouté ceci :

    private final transient ItemService itemService = ContentServiceFactory.getInstance().getItemService();
    private final transient HandleService handleService = HandleServiceFactory.getInstance().getHandleService();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X