/*=============================================================================*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*=============================================================================*/
package org.apache.ws.resource.properties.v1_2.porttype.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ws.resource.ResourceContext;
import org.apache.ws.resource.i18n.Keys;
import org.apache.ws.resource.i18n.MessagesImpl;
import org.apache.ws.resource.properties.ResourceProperty;
import org.apache.ws.resource.properties.faults.InvalidResourcePropertyQNameFaultException;
import org.apache.ws.resource.properties.v1_2.porttype.GetResourcePropertyPortType;
import org.apache.ws.util.XmlBeanUtils;
import org.apache.ws.util.i18n.Messages;
import org.apache.xmlbeans.XmlObject;
import org.oasisOpen.docs.wsrf.x2004.x06.wsrfWSResourceProperties12Draft01.GetResourcePropertyDocument;
import org.oasisOpen.docs.wsrf.x2004.x06.wsrfWSResourceProperties12Draft01.GetResourcePropertyResponseDocument;
import javax.xml.namespace.QName;
import java.util.Iterator;
/**
* An operation provider for wsrp:GetResourceProperty.
*
* @author Ian P. Springer
*/
public class GetResourcePropertyProvider
extends AbstractResourcePropertiesPortType
implements GetResourcePropertyPortType
{
private static final Log LOG = LogFactory.getLog( GetResourcePropertyProvider.class );
private static final Messages MSG = MessagesImpl.getInstance();
/**
* Creates a new {@link GetResourcePropertyProvider} object.
*
* @param resourceContext DOCUMENT_ME
*/
public GetResourcePropertyProvider( ResourceContext resourceContext )
{
super( resourceContext );
}
/**
* Implementation of the wsrp:GetResourceProperty operation.
*
* @param requestDoc the requestDoc XMLBean
*
* @return the response XMLBean
*
* @throws InvalidResourcePropertyQNameFaultException
*
* @throws org.apache.ws.resource.faults.ResoureKeyHeaderNotFoundFaultException
*
*/
public GetResourcePropertyResponseDocument getResourceProperty( GetResourcePropertyDocument requestDoc )
{
if ( LOG.isDebugEnabled() )
{
LOG.debug( MSG.getMessage( Keys.GET_RP_REQ, requestDoc.toString() ) );
}
GetResourcePropertyResponseDocument responseDoc = createResponseDocument();
QName propName = requestDoc.getGetResourceProperty();
ResourceProperty prop = getProperties().get( propName );
if ( prop == null )
{
throw new InvalidResourcePropertyQNameFaultException( propName );
}
refreshProperty( prop );
Iterator propElemIter = prop.iterator();
while ( propElemIter.hasNext() )
{
XmlObject propElem = (XmlObject) propElemIter.next();
XmlBeanUtils.addChildElement( responseDoc.getGetResourcePropertyResponse(),
propElem );
}
return responseDoc;
}
private GetResourcePropertyResponseDocument createResponseDocument()
{
GetResourcePropertyResponseDocument responseDoc =
GetResourcePropertyResponseDocument.Factory.newInstance();
responseDoc.addNewGetResourcePropertyResponse();
return responseDoc;
}
}