package org.gcube.application.geoportal.client; import javax.ws.rs.client.WebTarget; import javax.xml.namespace.QName; import javax.xml.transform.dom.DOMResult; import javax.xml.ws.EndpointReference; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.gcube.application.geoportal.common.model.document.ProfiledDocument; import org.gcube.application.geoportal.common.rest.InterfaceConstants; import org.gcube.application.geoportal.common.rest.ProfiledDocumentsI; import org.gcube.common.calls.jaxrs.GcubeService; import org.gcube.common.calls.jaxrs.TargetFactory; import org.gcube.common.clients.config.ProxyConfig; import org.gcube.common.clients.delegates.ProxyDelegate; import org.w3c.dom.Node; @Slf4j @RequiredArgsConstructor public class ProjectsInterfacePlugin extends GeoportalAbstractPlugin>{ @NonNull private String profileID; @Setter private Class customClientImplementation; //=DefaultProfiledDocuments.class; @Setter private Class

profiledModel; @Override public Exception convert(Exception fault, ProxyConfig config) { return fault; } @SneakyThrows //no such constructor @Override public ProfiledDocumentsI

newProxy(ProxyDelegate delegate) { return customClientImplementation.getConstructor(ProxyDelegate.class,String.class,Class.class). newInstance(delegate,profileID,profiledModel); } @Override public WebTarget resolve(EndpointReference address, ProxyConfig config) throws Exception { DOMResult result = new DOMResult(); address.writeTo(result); Node node =result.getNode(); Node child=node.getFirstChild(); String addressString = child.getTextContent(); GcubeService service = GcubeService.service(). withName(new QName(InterfaceConstants.NAMESPACE,InterfaceConstants.Methods.PROJECTS)). andPath(InterfaceConstants.Methods.PROJECTS); return TargetFactory.stubFor(service).at(addressString); } }