package org.apereo.cas.support.saml.mdui;
import org.apereo.cas.services.RegisteredService;
import org.apereo.cas.web.flow.services.DefaultRegisteredServiceUserInterfaceInfo;
import org.opensaml.core.xml.schema.XSString;
import org.opensaml.core.xml.schema.XSURI;
import org.opensaml.saml.ext.saml2mdui.UIInfo;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
/**
* This is {@link SamlMetadataUIInfo}.
*
* @author Misagh Moayyed
* @since 4.1.0
*/
public class SamlMetadataUIInfo extends DefaultRegisteredServiceUserInterfaceInfo {
private static final long serialVersionUID = -1434801982864628179L;
private transient UIInfo uiInfo;
/**
* Instantiates a new Simple metadata uI info.
*
* @param registeredService the registered service
*/
public SamlMetadataUIInfo(final RegisteredService registeredService) {
this(null, registeredService);
}
/**
* Instantiates a new Simple mdui info.
*
* @param uiInfo the ui info
* @param registeredService the registered service
*/
public SamlMetadataUIInfo(@Nullable final UIInfo uiInfo, final RegisteredService registeredService) {
super(registeredService);
this.uiInfo = uiInfo;
}
@Override
public Collection<String> getDescriptions() {
if (this.uiInfo != null) {
return getStringValues(this.uiInfo.getDescriptions());
}
return super.getDescriptions();
}
@Override
public Collection<String> getDisplayNames() {
if (this.uiInfo != null) {
return getStringValues(this.uiInfo.getDisplayNames());
}
return super.getDescriptions();
}
@Override
public Collection<String> getInformationURLs() {
if (this.uiInfo != null) {
return getStringValues(this.uiInfo.getInformationURLs());
}
return super.getInformationURLs();
}
@Override
public Collection<String> getPrivacyStatementURLs() {
if (this.uiInfo != null) {
return getStringValues(this.uiInfo.getPrivacyStatementURLs());
}
return super.getPrivacyStatementURLs();
}
/**
* Gets logo urls.
*
* @return the logo urls
*/
@Override
public Collection<Logo> getLogoUrls() {
final List<Logo> list = new ArrayList<>();
if (this.uiInfo != null) {
list.addAll(this.uiInfo.getLogos().stream().map(l -> new Logo(l.getURL(), l.getHeight(),
l.getWidth())).collect(Collectors.toList()));
}
return list;
}
/**
* Gets string values from the list of mdui objects.
*
* @param items the items
* @return the string values
*/
private static Collection<String> getStringValues(final List<?> items) {
final List<String> list = new ArrayList<>();
items.forEach(d -> {
if (d instanceof XSURI) {
list.add(((XSURI) d).getValue());
} else if (d instanceof XSString) {
list.add(((XSString) d).getValue());
}
});
return list;
}
public void setUIInfo(final UIInfo uiInfo) {
this.uiInfo = uiInfo;
}
}