1 /*
2 * Copyright (c) 2007, Fraunhofer-Gesellschaft
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met:
8 *
9 * (1) Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the disclaimer at the end.
11 * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * (2) Neither the name of Fraunhofer nor the names of its
17 * contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * DISCLAIMER
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 */
35 package org.ogf.graap.wsag.client.remote;
36
37 import org.apache.log4j.Logger;
38 import org.apache.muse.util.xml.XmlUtils;
39 import org.apache.muse.ws.addressing.soap.SoapFault;
40 import org.apache.muse.ws.resource.sg.WssgConstants;
41 import org.apache.xmlbeans.XmlException;
42 import org.apache.xmlbeans.XmlOptions;
43 import org.ogf.graap.wsag.api.WsagConstants;
44 import org.ogf.graap.wsag.api.client.AgreementFactoryClient;
45 import org.ogf.graap.wsag.api.client.AgreementFactoryRegistryClient;
46 import org.ogf.graap.wsag.api.exceptions.ResourceUnavailableException;
47 import org.ogf.graap.wsag.api.exceptions.ResourceUnknownException;
48 import org.ogf.graap.wsag.api.security.ISecurityProperties;
49 import org.w3.x2005.x08.addressing.EndpointReferenceType;
50 import org.w3c.dom.Element;
51
52 /**
53 * Default implementation of an agreement factory client.
54 *
55 * @author Oliver Waeldrich
56 *
57 */
58 public class RemoteAgreementFactoryRegistryServiceImpl extends WsrfResourceClient
59 implements AgreementFactoryRegistryClient
60 {
61
62 private static Logger log = Logger.getLogger( RemoteAgreementFactoryRegistryServiceImpl.class );
63
64 private static EndpointReferenceType createRegistryEPR( EndpointReferenceType epr )
65 {
66 String address = epr.getAddress().getStringValue();
67
68 //
69 // BUG 79: if the address ends with "/", we need to remove it
70 //
71 while ( address.endsWith( "/" ) )
72 {
73 address = address.substring( 0, address.length() - 1 );
74 }
75
76 epr.getAddress().setStringValue( address + WsagConstants.AGREEMENT_FACTORY_REGISTRY_SERVICE_URI );
77 return epr;
78 }
79
80 /**
81 * Instantiates a new agreement factory client for the given endpoint reference.
82 *
83 * @param epr
84 * the agreement factory EPR
85 *
86 * @param securityProperties
87 * the security properties
88 */
89 public RemoteAgreementFactoryRegistryServiceImpl( EndpointReferenceType epr,
90 ISecurityProperties securityProperties )
91 {
92 super( createRegistryEPR( epr ), securityProperties );
93 }
94
95 /**
96 * {@inheritDoc}
97 */
98 public AgreementFactoryClient[] listAgreementFactories()
99 throws ResourceUnknownException, ResourceUnavailableException
100 {
101 try
102 {
103 Element[] entries = getResourceProperty( WssgConstants.ENTRY_QNAME );
104 AgreementFactoryClient[] agreements = new AgreementFactoryClient[entries.length];
105
106 for ( int n = 0; n < entries.length; ++n )
107 {
108 //
109 // convert ws-sg entry XML -> EPRs -> clients
110 //
111 Element eprXML = XmlUtils.getElement( entries[n], WssgConstants.MEMBER_SERVICE_EPR_QNAME );
112
113 EndpointReferenceType dest =
114 EndpointReferenceType.Factory.parse( eprXML,
115 new XmlOptions().setLoadReplaceDocumentElement( null ) );
116
117 //
118 // create a new agreement instance with the current properties
119 //
120 agreements[n] = new RemoteAgreementFactoryClientImpl( dest, getSecurityProperties().clone() );
121 agreements[n].setTrace( isUsingTrace() );
122 }
123
124 return agreements;
125 }
126 catch ( SoapFault e )
127 {
128 log.error( e.getMessage() );
129 throw new ResourceUnavailableException( e );
130 }
131 catch ( XmlException e )
132 {
133 throw new ResourceUnavailableException( e );
134 }
135 catch ( Exception e )
136 {
137 throw new ResourceUnavailableException( e );
138 }
139 }
140
141 }