use of com.helger.xsds.bdxr.smp1.ServiceMetadataReferenceType in project phoss-smp by phax.
the class SMPServerAPI method getCompleteServiceGroup.
@Nonnull
public CompleteServiceGroupType getCompleteServiceGroup(final String sPathServiceGroupID) throws SMPServerException {
final String sLog = LOG_PREFIX + "GET /complete/" + sPathServiceGroupID;
final String sAction = "getCompleteServiceGroup";
if (LOGGER.isInfoEnabled())
LOGGER.info(sLog);
STATS_COUNTER_INVOCATION.increment(sAction);
try {
final IIdentifierFactory aIdentifierFactory = SMPMetaManager.getIdentifierFactory();
final IParticipantIdentifier aPathServiceGroupID = aIdentifierFactory.parseParticipantIdentifier(sPathServiceGroupID);
if (aPathServiceGroupID == null) {
// Invalid identifier
throw SMPBadRequestException.failedToParseSG(sPathServiceGroupID, m_aAPIDataProvider.getCurrentURI());
}
final ISMPServiceGroupManager aServiceGroupMgr = SMPMetaManager.getServiceGroupMgr();
final ISMPServiceInformationManager aServiceInfoMgr = SMPMetaManager.getServiceInformationMgr();
final ISMPServiceGroup aServiceGroup = aServiceGroupMgr.getSMPServiceGroupOfID(aPathServiceGroupID);
if (aServiceGroup == null) {
// No such service group
throw new SMPNotFoundException("Unknown Service Group ID '" + sPathServiceGroupID + "'", m_aAPIDataProvider.getCurrentURI());
}
// Then add the service metadata references
final ServiceMetadataReferenceCollectionType aRefCollection = new ServiceMetadataReferenceCollectionType();
for (final IDocumentTypeIdentifier aDocTypeID : aServiceInfoMgr.getAllSMPDocumentTypesOfServiceGroup(aServiceGroup)) {
// Ignore all service information without endpoints
final ISMPServiceInformation aServiceInfo = aServiceInfoMgr.getSMPServiceInformationOfServiceGroupAndDocumentType(aServiceGroup, aDocTypeID);
if (aServiceInfo != null && aServiceInfo.getTotalEndpointCount() > 0) {
final ServiceMetadataReferenceType aMetadataReference = new ServiceMetadataReferenceType();
aMetadataReference.setHref(m_aAPIDataProvider.getServiceMetadataReferenceHref(aPathServiceGroupID, aDocTypeID));
aRefCollection.addServiceMetadataReference(aMetadataReference);
}
}
final ServiceGroupType aSG = aServiceGroup.getAsJAXBObjectPeppol();
aSG.setServiceMetadataReferenceCollection(aRefCollection);
// a CompleteSG may be empty
final CompleteServiceGroupType aCompleteServiceGroup = new CompleteServiceGroupType();
aCompleteServiceGroup.setServiceGroup(aSG);
for (final ISMPServiceInformation aServiceInfo : aServiceInfoMgr.getAllSMPServiceInformationOfServiceGroup(aServiceGroup)) {
final ServiceMetadataType aSM = aServiceInfo.getAsJAXBObjectPeppol();
if (aSM != null)
aCompleteServiceGroup.addServiceMetadata(aSM);
}
if (LOGGER.isInfoEnabled())
LOGGER.info(sLog + " SUCCESS");
STATS_COUNTER_SUCCESS.increment(sAction);
return aCompleteServiceGroup;
} catch (final SMPServerException ex) {
if (LOGGER.isWarnEnabled())
LOGGER.warn(sLog + " ERROR - " + ex.getMessage());
STATS_COUNTER_ERROR.increment(sAction);
throw ex;
}
}
use of com.helger.xsds.bdxr.smp1.ServiceMetadataReferenceType in project phoss-smp by phax.
the class SMPServerAPI method getServiceGroup.
@Nonnull
public ServiceGroupType getServiceGroup(final String sPathServiceGroupID) throws SMPServerException {
final String sLog = LOG_PREFIX + "GET /" + sPathServiceGroupID;
final String sAction = "getServiceGroup";
if (LOGGER.isInfoEnabled())
LOGGER.info(sLog);
STATS_COUNTER_INVOCATION.increment(sAction);
try {
final IIdentifierFactory aIdentifierFactory = SMPMetaManager.getIdentifierFactory();
final IParticipantIdentifier aPathServiceGroupID = aIdentifierFactory.parseParticipantIdentifier(sPathServiceGroupID);
if (aPathServiceGroupID == null) {
// Invalid identifier
throw SMPBadRequestException.failedToParseSG(sPathServiceGroupID, m_aAPIDataProvider.getCurrentURI());
}
final ISMPServiceGroupManager aServiceGroupMgr = SMPMetaManager.getServiceGroupMgr();
final ISMPServiceInformationManager aServiceInfoMgr = SMPMetaManager.getServiceInformationMgr();
// Retrieve the service group
final ISMPServiceGroup aServiceGroup = aServiceGroupMgr.getSMPServiceGroupOfID(aPathServiceGroupID);
if (aServiceGroup == null) {
// No such service group
throw new SMPNotFoundException("Unknown Service Group '" + sPathServiceGroupID + "'", m_aAPIDataProvider.getCurrentURI());
}
// Then add the service metadata references
final ServiceGroupType aSG = aServiceGroup.getAsJAXBObjectPeppol();
final ServiceMetadataReferenceCollectionType aCollectionType = new ServiceMetadataReferenceCollectionType();
for (final IDocumentTypeIdentifier aDocTypeID : aServiceInfoMgr.getAllSMPDocumentTypesOfServiceGroup(aServiceGroup)) {
// Ignore all service information without endpoints
final ISMPServiceInformation aServiceInfo = aServiceInfoMgr.getSMPServiceInformationOfServiceGroupAndDocumentType(aServiceGroup, aDocTypeID);
if (aServiceInfo != null && aServiceInfo.getTotalEndpointCount() > 0) {
final ServiceMetadataReferenceType aMetadataReference = new ServiceMetadataReferenceType();
aMetadataReference.setHref(m_aAPIDataProvider.getServiceMetadataReferenceHref(aPathServiceGroupID, aDocTypeID));
aCollectionType.addServiceMetadataReference(aMetadataReference);
}
}
aSG.setServiceMetadataReferenceCollection(aCollectionType);
if (LOGGER.isInfoEnabled())
LOGGER.info(sLog + " SUCCESS");
STATS_COUNTER_SUCCESS.increment(sAction);
return aSG;
} catch (final SMPServerException ex) {
if (LOGGER.isWarnEnabled())
LOGGER.warn(sLog + " ERROR - " + ex.getMessage());
STATS_COUNTER_ERROR.increment(sAction);
throw ex;
}
}
use of com.helger.xsds.bdxr.smp1.ServiceMetadataReferenceType in project phoss-smp by phax.
the class BDXR1ServerAPI method getServiceGroup.
@Nonnull
public ServiceGroupType getServiceGroup(final String sPathServiceGroupID) throws SMPServerException {
final String sLog = LOG_PREFIX + "GET /" + sPathServiceGroupID;
final String sAction = "getServiceGroup";
if (LOGGER.isInfoEnabled())
LOGGER.info(sLog);
STATS_COUNTER_INVOCATION.increment(sAction);
try {
final IIdentifierFactory aIdentifierFactory = SMPMetaManager.getIdentifierFactory();
final IParticipantIdentifier aPathServiceGroupID = aIdentifierFactory.parseParticipantIdentifier(sPathServiceGroupID);
if (aPathServiceGroupID == null) {
// Invalid identifier
throw SMPBadRequestException.failedToParseSG(sPathServiceGroupID, m_aAPIDataProvider.getCurrentURI());
}
final ISMPServiceGroupManager aServiceGroupMgr = SMPMetaManager.getServiceGroupMgr();
final ISMPServiceInformationManager aServiceInfoMgr = SMPMetaManager.getServiceInformationMgr();
// Retrieve the service group
final ISMPServiceGroup aServiceGroup = aServiceGroupMgr.getSMPServiceGroupOfID(aPathServiceGroupID);
if (aServiceGroup == null) {
// No such service group
throw new SMPNotFoundException("Unknown Service Group '" + sPathServiceGroupID + "'", m_aAPIDataProvider.getCurrentURI());
}
// Then add the service metadata references
final ServiceGroupType aSG = aServiceGroup.getAsJAXBObjectBDXR1();
final ServiceMetadataReferenceCollectionType aCollectionType = new ServiceMetadataReferenceCollectionType();
for (final IDocumentTypeIdentifier aDocTypeID : aServiceInfoMgr.getAllSMPDocumentTypesOfServiceGroup(aServiceGroup)) {
// Ignore all service information without endpoints
final ISMPServiceInformation aServiceInfo = aServiceInfoMgr.getSMPServiceInformationOfServiceGroupAndDocumentType(aServiceGroup, aDocTypeID);
if (aServiceInfo != null && aServiceInfo.getTotalEndpointCount() > 0) {
final ServiceMetadataReferenceType aMetadataReference = new ServiceMetadataReferenceType();
aMetadataReference.setHref(m_aAPIDataProvider.getServiceMetadataReferenceHref(aPathServiceGroupID, aDocTypeID));
aCollectionType.addServiceMetadataReference(aMetadataReference);
}
}
aSG.setServiceMetadataReferenceCollection(aCollectionType);
if (LOGGER.isInfoEnabled())
LOGGER.info(sLog + " SUCCESS");
STATS_COUNTER_SUCCESS.increment(sAction);
return aSG;
} catch (final SMPServerException ex) {
if (LOGGER.isWarnEnabled())
LOGGER.warn(sLog + " ERROR - " + ex.getMessage());
STATS_COUNTER_ERROR.increment(sAction);
throw ex;
}
}
use of com.helger.xsds.bdxr.smp1.ServiceMetadataReferenceType in project phoss-smp by phax.
the class BDXR1ServerAPI method getCompleteServiceGroup.
@Nonnull
public CompleteServiceGroupType getCompleteServiceGroup(final String sPathServiceGroupID) throws SMPServerException {
final String sLog = LOG_PREFIX + "GET /complete/" + sPathServiceGroupID;
final String sAction = "getCompleteServiceGroup";
if (LOGGER.isInfoEnabled())
LOGGER.info(sLog);
STATS_COUNTER_INVOCATION.increment(sAction);
try {
final IIdentifierFactory aIdentifierFactory = SMPMetaManager.getIdentifierFactory();
final IParticipantIdentifier aPathServiceGroupID = aIdentifierFactory.parseParticipantIdentifier(sPathServiceGroupID);
if (aPathServiceGroupID == null) {
// Invalid identifier
throw SMPBadRequestException.failedToParseSG(sPathServiceGroupID, m_aAPIDataProvider.getCurrentURI());
}
final ISMPServiceGroupManager aServiceGroupMgr = SMPMetaManager.getServiceGroupMgr();
final ISMPServiceInformationManager aServiceInfoMgr = SMPMetaManager.getServiceInformationMgr();
final ISMPServiceGroup aServiceGroup = aServiceGroupMgr.getSMPServiceGroupOfID(aPathServiceGroupID);
if (aServiceGroup == null) {
// No such service group
throw new SMPNotFoundException("Unknown Service Group ID '" + sPathServiceGroupID + "'", m_aAPIDataProvider.getCurrentURI());
}
// Then add the service metadata references
final ServiceMetadataReferenceCollectionType aRefCollection = new ServiceMetadataReferenceCollectionType();
for (final IDocumentTypeIdentifier aDocTypeID : aServiceInfoMgr.getAllSMPDocumentTypesOfServiceGroup(aServiceGroup)) {
// Ignore all service information without endpoints
final ISMPServiceInformation aServiceInfo = aServiceInfoMgr.getSMPServiceInformationOfServiceGroupAndDocumentType(aServiceGroup, aDocTypeID);
if (aServiceInfo != null && aServiceInfo.getTotalEndpointCount() > 0) {
final ServiceMetadataReferenceType aMetadataReference = new ServiceMetadataReferenceType();
aMetadataReference.setHref(m_aAPIDataProvider.getServiceMetadataReferenceHref(aPathServiceGroupID, aDocTypeID));
aRefCollection.addServiceMetadataReference(aMetadataReference);
}
}
final ServiceGroupType aSG = aServiceGroup.getAsJAXBObjectBDXR1();
aSG.setServiceMetadataReferenceCollection(aRefCollection);
// a CompleteSG may be empty
final CompleteServiceGroupType aCompleteServiceGroup = new CompleteServiceGroupType();
aCompleteServiceGroup.setServiceGroup(aSG);
for (final ISMPServiceInformation aServiceInfo : aServiceInfoMgr.getAllSMPServiceInformationOfServiceGroup(aServiceGroup)) {
final ServiceMetadataType aSM = aServiceInfo.getAsJAXBObjectBDXR1();
if (aSM != null)
aCompleteServiceGroup.addServiceMetadata(aSM);
}
if (LOGGER.isInfoEnabled())
LOGGER.info(sLog + " SUCCESS");
STATS_COUNTER_SUCCESS.increment(sAction);
return aCompleteServiceGroup;
} catch (final SMPServerException ex) {
if (LOGGER.isWarnEnabled())
LOGGER.warn(sLog + " ERROR - " + ex.getMessage());
STATS_COUNTER_ERROR.increment(sAction);
throw ex;
}
}
use of com.helger.xsds.bdxr.smp1.ServiceMetadataReferenceType in project peppol-commons by phax.
the class SMPClientReadOnly method getAllDocumentTypes.
/**
* Extract all parsable document types from the passed Service group. This
* method always uses {@link PeppolIdentifierFactory} to parse the document
* type identifiers.
*
* @param aSG
* The service group to parse. May be <code>null</code>.
* @param aIdentifierFactory
* The identifier factory to be used. May not be <code>null</code>.
* @param aUnhandledHrefHandler
* An optional consumer for Hrefs that could not be parsed into a
* document type identifier. May be <code>null</code>.
* @return Never <code>null</code> but a maybe empty list.
* @since 8.0.4
*/
@Nonnull
public static ICommonsList<IDocumentTypeIdentifier> getAllDocumentTypes(@Nullable final ServiceGroupType aSG, @Nonnull final IIdentifierFactory aIdentifierFactory, @Nullable final Consumer<String> aUnhandledHrefHandler) {
ValueEnforcer.notNull(aIdentifierFactory, "IdentifierFactory");
final ICommonsList<IDocumentTypeIdentifier> ret = new CommonsArrayList<>();
if (aSG != null && aSG.getParticipantIdentifier() != null && aSG.getServiceMetadataReferenceCollection() != null) {
final String sPathStart = "/" + CIdentifier.getURIEncoded(aSG.getParticipantIdentifier()) + "/" + URL_PART_SERVICES + "/";
for (final ServiceMetadataReferenceType aSMR : aSG.getServiceMetadataReferenceCollection().getServiceMetadataReference()) {
final String sOriginalHref = aSMR.getHref();
// Decoded href is important for unification
final String sHref = CIdentifier.createPercentDecoded(sOriginalHref);
boolean bSuccess = false;
// Case insensitive "indexOf" here
final int nPathStart = StringHelper.getIndexOfIgnoreCase(sHref, sPathStart, Locale.US);
if (nPathStart >= 0) {
final String sDocType = sHref.substring(nPathStart + sPathStart.length());
final IDocumentTypeIdentifier aDocType = aIdentifierFactory.parseDocumentTypeIdentifier(sDocType);
if (aDocType != null) {
// Found a document type
ret.add(aDocType);
bSuccess = true;
}
}
if (!bSuccess) {
// Failed to parse as doc type
if (aUnhandledHrefHandler != null)
aUnhandledHrefHandler.accept(sOriginalHref);
}
}
}
return ret;
}
Aggregations