/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.xml.xsd.typeprovider.schema; import gw.internal.xml.xsd.typeprovider.XmlSchemaIndex; import gw.lang.reflect.LocationInfo; import gw.util.concurrent.LockingLazyVar; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.TreeMap; import javax.xml.namespace.QName; public final class WsdlService extends XmlSchemaObject<WsdlService> { public static final Comparator<QName> QNAME_COMPARATOR = new Comparator<QName>() { @Override public int compare( QName o1, QName o2 ) { return o1.toString().compareTo( o2.toString() ); } }; private final QName _qname; private final List<WsdlPort> _ports; private final LockingLazyVar<Map<QName,WsdlPort>> _portsByQName = new LockingLazyVar<Map<QName, WsdlPort>>() { @Override protected Map<QName, WsdlPort> init() { TreeMap<QName, WsdlPort> ret = new TreeMap<QName, WsdlPort>( QNAME_COMPARATOR ); for ( WsdlPort port : _ports ) { ret.put( port.getQName(), port ); } return Collections.unmodifiableMap( ret ); } }; public WsdlService( XmlSchemaIndex schemaIndex, LocationInfo locationInfo, QName qname, List<WsdlPort> ports ) { super( schemaIndex, locationInfo ); _qname = qname; _ports = ports; } public QName getQName() { return _qname; } public List<WsdlPort> getPorts() { return _ports; } @Override public String toString() { return getQName().toString(); } public Map<QName,WsdlPort> getPortsByQName() { return _portsByQName.get(); } public String getLocationIfAllPortsHaveSameLocation() { String location = null; boolean foundOne = false; for ( WsdlPort port : _ports ) { if ( port.getLocation() == null ) { continue; } if ( foundOne && ! port.getLocation().equals( location ) ) { location = null; break; // found multiple different locations } foundOne = true; location = port.getLocation(); } return location; } }