From: <amy...@us...> - 2011-12-09 15:55:10
|
Revision: 1957 http://ogsa-dai.svn.sourceforge.net/ogsa-dai/?rev=1957&view=rev Author: amykrause Date: 2011-12-09 15:54:57 +0000 (Fri, 09 Dec 2011) Log Message: ----------- Fixed bug in serialising date and boolean data values. Moved server-side classes from jersey/common back into jersey/server. Modified Paths: -------------- ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyDataSource.java ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyRequestStatusBuilder.java ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyResource.java ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/datasource/DataSourceStreamingOutput.java ogsa-dai/trunk/server-tests/presentation/jersey/src/test/ext/java/uk/org/ogsadai/jersey/client/test/JerseyClientTest.java Added Paths: ----------- ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/activity/ ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/activity/delivery/ ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/activity/delivery/ObtainFromJerseyDataSourceActivity.java ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/drer/BeanDataValueVisitor.java ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/drer/JAXBUtilities.java ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyDataRequestExecutionProvider.java ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestConverter.java ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestStatusConverter.java Removed Paths: ------------- ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/BeanDataValueVisitor.java ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JAXBUtilities.java ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyDataRequestExecutionProvider.java ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestConverter.java ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestStatusConverter.java Modified: ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyDataSource.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyDataSource.java 2011-12-09 14:20:55 UTC (rev 1956) +++ ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyDataSource.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -38,6 +38,7 @@ import uk.org.ogsadai.data.DataValue; import uk.org.ogsadai.data.binary.BinaryDataValueInputStream; import uk.org.ogsadai.data.binary.DataStreamException; +import uk.org.ogsadai.data.binary.DataValueInputStream; import uk.org.ogsadai.exception.ErrorID; import com.sun.jersey.api.client.Client; @@ -68,6 +69,12 @@ return mInput; } + public DataValueInputStream getInputStream() + throws ResourceUnknownException + { + InputStream input = getPostInputStream(); + return new DataValueInputStream(new BufferedInputStream(input)); + } @Override public DataStreamData getDataValue() throws ServerCommsException, @@ -191,36 +198,42 @@ { if (mInput == null) { - Client client = Client.create(); - WebResource dataSource = client.resource(mURL.toString()); - try + InputStream input = getPostInputStream(); + mInput = new BinaryDataValueInputStream( + new BufferedInputStream(input)); + } + } + + private InputStream getPostInputStream() throws ResourceUnknownException + { + Client client = Client.create(); + WebResource dataSource = client.resource(mURL.toString()); + try + { + return dataSource.post(InputStream.class); + } + catch (ClientHandlerException e) + { + throw new RemoteServerCommsException(mURL, e.getCause()); + } + catch (UniformInterfaceException e) + { + Status status = Status.fromStatusCode(e.getResponse().getStatus()); + if (status == Status.NOT_FOUND) { - InputStream input = dataSource.post(InputStream.class); - mInput = new BinaryDataValueInputStream( - new BufferedInputStream(input)); + throw new ResourceUnknownException(getResourceID()); } - catch (ClientHandlerException e) + if (status == Status.INTERNAL_SERVER_ERROR) { - throw new RemoteServerCommsException(mURL, e.getCause()); + throw new ServerException(ErrorID.SERVER_ERROR, e.getCause()); } - catch (UniformInterfaceException e) - { - Status status = Status.fromStatusCode(e.getResponse().getStatus()); - if (status == Status.NOT_FOUND) - { - throw new ResourceUnknownException(getResourceID()); - } - if (status == Status.INTERNAL_SERVER_ERROR) - { - throw new ServerException(ErrorID.SERVER_ERROR, e.getCause()); - } - } - catch (Throwable e) - { - throw new RemoteServerCommsException(mURL, e); - } + throw new RemoteServerCommsException(mURL, e); } - + catch (Throwable e) + { + throw new RemoteServerCommsException(mURL, e); + } + } } \ No newline at end of file Modified: ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyRequestStatusBuilder.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyRequestStatusBuilder.java 2011-12-09 14:20:55 UTC (rev 1956) +++ ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyRequestStatusBuilder.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -374,54 +374,77 @@ for (DataType data : result.getData()) { - if (data.getString() != null) { + if (data.getString() != null) + { addData(instanceName, result.getResultName(), data.getString()); - } else if (data.getCharArray() != null) { + } + else if (data.getCharArray() != null) + { addData(instanceName, result.getResultName(), data.getCharArray().toCharArray()); - } else if (data.getDouble() != null) { + } + else if (data.getDouble() != null) + { addData(instanceName, result.getResultName(), data.getDouble().doubleValue()); - } else if (data.getFloat() != null) { + } + else if (data.getFloat() != null) + { addData(instanceName, result.getResultName(), data.getFloat().floatValue()); - } else if (data.getInt() != null) { + } + else if (data.getInt() != null) + { addData(instanceName, result.getResultName(), data.getInt().intValue()); - } else if (data.getLong() != null) { + } + else if (data.getLong() != null) + { addData(instanceName, result.getResultName(), data.getLong().longValue()); - } else if (data.getBinary() != null) { + } + else if (data.getBinary() != null) + { addData(instanceName, result.getResultName(), data.getBinary()); - } else if (data.getListBegin() != null) { + } + else if (data.getListBegin() != null) + { addListBegin(instanceName, result .getResultName()); - } else if (data.getListEnd() != null) + } + else if (data.getListEnd() != null) { addListEnd(instanceName, result.getResultName()); - } else if (data.getDate() != null) + } + else if (data.getDate() != null) { addData(instanceName,result.getResultName(), data.getDate().toGregorianCalendar().getTime()); - } else { + } + else if (data.isBoolean() != null) + { + addData(instanceName, result.getResultName(), + data.isBoolean()); + } + else { throw new DataValueUnknownTypeException(data.toString()); } Modified: ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyResource.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyResource.java 2011-12-09 14:20:55 UTC (rev 1956) +++ ogsa-dai/trunk/presentation/jersey/client/src/main/java/uk/org/ogsadai/client/toolkit/presentation/jersey/JerseyResource.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -72,7 +72,12 @@ ResourceType resourceType) { super(resourceID, resourceType); - mURL = url.toString() + "/" + resourceID.toString() + "/"; + mURL = url.toString(); + if (!mURL.endsWith("/")) + { + mURL += ("/"); + } + mURL += resourceID.toString() + "/"; DefaultClientConfig config = new DefaultClientConfig(); config.getFeatures().put( ClientConfig.FEATURE_DISABLE_XML_SECURITY, true); Deleted: ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/BeanDataValueVisitor.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/BeanDataValueVisitor.java 2011-12-09 14:20:55 UTC (rev 1956) +++ ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/BeanDataValueVisitor.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -1,158 +0,0 @@ -// Copyright (c) The University of Edinburgh, 2011. -// -// LICENCE-START -// 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. -// LICENCE-END - -package uk.org.ogsadai.service.rest.drer; - -import java.util.GregorianCalendar; - -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; - -import uk.org.ogsadai.common.msgs.DAILogger; -import uk.org.ogsadai.data.BinaryData; -import uk.org.ogsadai.data.BooleanData; -import uk.org.ogsadai.data.CharData; -import uk.org.ogsadai.data.DataValueVisitor; -import uk.org.ogsadai.data.DateData; -import uk.org.ogsadai.data.DoubleData; -import uk.org.ogsadai.data.FloatData; -import uk.org.ogsadai.data.IntegerData; -import uk.org.ogsadai.data.ListBegin; -import uk.org.ogsadai.data.ListEnd; -import uk.org.ogsadai.data.LongData; -import uk.org.ogsadai.data.StringData; -import uk.org.ogsadai.service.rest.drer.jaxb.response.DataType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.ObjectFactory; - -/** - * Visits a <code>DataValue</code> object and populates a JAXB <tt>DataType</tt> - * bean with the wrapped value. - * - * @author The OGSA-DAI Project Team. - */ -public class BeanDataValueVisitor implements DataValueVisitor -{ - /** Copyright. */ - private static final String COPYRIGHT_NOTICE = - "Copyright (c) The University of Edinburgh, 2011"; - - private static final DAILogger LOG = - DAILogger.getLogger(BeanDataValueVisitor.class); - - /** The data bean which holds the value. */ - private DataType mDataBean; - - private DatatypeFactory mDataTypeFactory; - private static final ObjectFactory factory = new ObjectFactory(); - - /** - * Creates a new data value visitor which writes values to the - * specified bean. - * - * @param dataBean - * The bean that the data is added to. - */ - public BeanDataValueVisitor(DataType dataBean) - { - mDataBean = dataBean; - try - { - mDataTypeFactory = DatatypeFactory.newInstance(); - } - catch (DatatypeConfigurationException e) - { - LOG.error(e); - } - } - - // Interface implementation - public void visitBinaryData(BinaryData value) - { - mDataBean.setBinary(value.getBytes()); - } - - // Interface implementation - public void visitBooleanData(BooleanData value) - { - mDataBean.setBoolean(Boolean.valueOf(value.getBoolean())); - } - - // Interface implementation - public void visitCharData(CharData value) - { - mDataBean.setCharArray(new String(value.getChars())); - } - - // Interface implementation - public void visitDoubleData(DoubleData value) - { - mDataBean.setDouble(new Double(value.getDouble())); - } - - // Interface implementation - public void visitListBegin(ListBegin value) - { - mDataBean.setListBegin(factory.createListBeginType()); - } - - // Interface implementation - public void visitListEnd(ListEnd value) - { - mDataBean.setListEnd(factory.createListEndType()); - } - - // Interface implementation - public void visitLongData(LongData value) - { - mDataBean.setLong(new Long(value.getLong())); - } - - // Interface implementation - public void visitFloatData(FloatData value) - { - mDataBean.setFloat(new Float(value.getFloat())); - } - - // Interface implementation - public void visitIntegerData(IntegerData value) - { - mDataBean.setInt(new Integer(value.getInteger())); - } - - // Interface implementation - public void visitStringData(StringData value) - { - mDataBean.setString(value.toString()); - } - - // Interface implementation - public void visitDateData(DateData value) - { - if (value.getCalendar() instanceof GregorianCalendar) - { - XMLGregorianCalendar cal = - mDataTypeFactory.newXMLGregorianCalendar( - (GregorianCalendar)value.getCalendar()); - mDataBean.setDate(cal); - } - else - { - LOG.warn(new Exception("Could not serialise data: " + value)); - } - - } -} Deleted: ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JAXBUtilities.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JAXBUtilities.java 2011-12-09 14:20:55 UTC (rev 1956) +++ ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JAXBUtilities.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -1,84 +0,0 @@ -package uk.org.ogsadai.service.rest.drer; - -import java.util.List; - -import uk.org.ogsadai.common.msgs.DAILogger; -import uk.org.ogsadai.common.msgs.DAIUniqueID; -import uk.org.ogsadai.exception.DAIExceptionInformation; -import uk.org.ogsadai.exception.ErrorID; -import uk.org.ogsadai.server.ServerException; -import uk.org.ogsadai.service.rest.drer.jaxb.response.ErrorType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.MessageType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.ObjectFactory; - -public class JAXBUtilities -{ - - private static final DAILogger LOG = DAILogger.getLogger(JAXBUtilities.class); - - public static final ObjectFactory factory = new ObjectFactory(); - - public static void buildError( - ErrorType error, - Throwable exception, - boolean isClientException) - { - List<MessageType> exceptionChain = error.getErrorCause(); - if (isClientException) - { - // return the exception stack trace - addExceptionToChain(exception, exceptionChain); - } - else - { - // log the exception and return a server exception with the id - DAIUniqueID id = LOG.error(exception); - ServerException serverException = new ServerException(id); - addExceptionToChain(serverException, exceptionChain); - } - } - - private static void addExceptionToChain( - Throwable cause, - List<MessageType> exceptionChain) - { - if (cause != null) - { - MessageType message = factory.createMessageType(); - if (cause instanceof DAIExceptionInformation) - { - DAIExceptionInformation exception = - (DAIExceptionInformation)cause; - message.setId(exception.getErrorID().toString()); - String localMessageStr = exception.getLocalizedMessage(); - if (localMessageStr == null) - { - localMessageStr = ""; - } - message.setMsg(localMessageStr); - Object[] parameters = exception.getParameters(); - for (Object parameter : parameters) - { - message.getParameter().add(String.valueOf(parameter)); - } - } - else - { - message.setId(ErrorID.NON_OGSA_DAI_COMPLIANT_ERROR.toString()); - String localMessageStr = cause.getLocalizedMessage(); - if (localMessageStr == null) - { - localMessageStr = ""; - } - message.setMsg(localMessageStr); - message.getParameter().add(cause.getClass().getName()); - message.getParameter().add(cause.getMessage()); - } - exceptionChain.add(message); - addExceptionToChain(cause.getCause(), exceptionChain); - } - } - - - -} Deleted: ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyDataRequestExecutionProvider.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyDataRequestExecutionProvider.java 2011-12-09 14:20:55 UTC (rev 1956) +++ ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyDataRequestExecutionProvider.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -1,196 +0,0 @@ -// Copyright (c) The University of Edinburgh, 2011. -// -// LICENCE-START -// 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. -// LICENCE-END - -package uk.org.ogsadai.service.rest.drer; - -import uk.org.ogsadai.activity.workflow.Workflow; -import uk.org.ogsadai.authorization.NullSecurityContext; -import uk.org.ogsadai.authorization.SecurityContext; -import uk.org.ogsadai.common.msgs.DAILogger; -import uk.org.ogsadai.common.msgs.DAIUniqueID; -import uk.org.ogsadai.context.OGSADAIContext; -import uk.org.ogsadai.engine.RequestRejectedException; -import uk.org.ogsadai.exception.DAIException; -import uk.org.ogsadai.exception.RequestProcessingException; -import uk.org.ogsadai.exception.RequestTerminatedException; -import uk.org.ogsadai.exception.RequestUserException; -import uk.org.ogsadai.resource.Resource; -import uk.org.ogsadai.resource.ResourceID; -import uk.org.ogsadai.resource.ResourceUnknownException; -import uk.org.ogsadai.resource.drer.DRER; -import uk.org.ogsadai.resource.drer.ExecutionResult; -import uk.org.ogsadai.resource.request.SimpleCandidateRequestDescriptor; -import uk.org.ogsadai.server.ServerException; -import uk.org.ogsadai.service.rest.drer.jaxb.request.RequestType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.ObjectFactory; -import uk.org.ogsadai.service.rest.drer.jaxb.response.RequestStatusType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.Response; - -/** - * Jersey implementation of OGSA-DAI data request execution operations. - * - * @author The OGSA-DAI Project Team - */ -public class JerseyDataRequestExecutionProvider -{ - /** Copyright. */ - private static final String COPYRIGHT_NOTICE = - "Copyright (c) The University of Edinburgh, 2011."; - - /** Name used to look up a security context in a message context.*/ - public static final String SECURITY_CONTEXT_PROPERTY_NAME = - "uk.org.ogsadai.security.context"; - - private static final DAILogger LOG = - DAILogger.getLogger(JerseyDataRequestExecutionProvider.class); - - /** - * Executes a request and returns the request status if no error occurred. - * If the request is being executed asynchronously the method will return - * immediately, otherwise it will block until the request has completed or - * an error occurred. If an error occurred it is reported in the response. - * - * @return response document - */ - public Response execute( - ResourceID drerID, - ResourceID requestID, - ResourceID sessionID, - boolean isSynchronous, - RequestType request) - { - ObjectFactory factory = new ObjectFactory(); - Response response = factory.createResponse(); - - DRER drer; - try - { - Resource resource = - OGSADAIContext.getInstance().getResourceManager().getPublicResource(drerID); - if (resource instanceof DRER) - { - drer = (DRER)resource; - } - else - { - throw new ResourceUnknownException(drerID); - } - } - catch (ResourceUnknownException e) - { - addErrorToResponse(e, true, response, factory); - return response; - } - catch (Throwable e) - { - addErrorToResponse(e, false, response, factory); - return response; - } - // Build DRER request descriptor. - boolean createSession = true; - // Get request bean and convert to workflow. - Workflow workflow = null; - try - { - workflow = JerseyRequestConverter.convert(request); - } - catch (RequestUserException e) - { - addErrorToResponse(e, true, response, factory); - return response; - } - catch (Throwable e) - { - addErrorToResponse(e, false, response, factory); - return response; - } - // Construct descriptor. - SimpleCandidateRequestDescriptor requestDescriptor = - new SimpleCandidateRequestDescriptor( - requestID, - sessionID, - createSession, - isSynchronous, - // Don't allow hidden resources. - false, - workflow); - - // Get a security context and add it to the descriptor - SecurityContext securityContext = getSecurityContext(); - requestDescriptor.setSecurityContext(securityContext); - - // Now execute the request - try - { - ExecutionResult result = drer.execute(requestDescriptor); - RequestStatusType requestStatus = - JerseyRequestStatusConverter.convert(result.getRequestStatus()); - response.setRequestStatus(requestStatus); - return response; - } - catch (RequestTerminatedException e) - { - addErrorToResponse(e, true, response, factory); - return response; - } - catch (RequestProcessingException e) - { - addErrorToResponse(e, false, response, factory); - return response; - } - catch (RequestUserException e) - { - addErrorToResponse(e, true, response, factory); - return response; - } - catch (RequestRejectedException e) - { - addErrorToResponse(e, true, response, factory); - return response; - } - catch (Throwable e) - { - addErrorToResponse(e, false, response, factory); - return response; - } - - } - /** - * Placeholder for getting a security context. This always returns a - * <code>NullSecurityContext</code>. We can do something clever here if - * necessary. - * - * @return the security context to use with this current request. - */ - private SecurityContext getSecurityContext() - { - SecurityContext securityContext = new NullSecurityContext(); - return securityContext; - } - - private void addErrorToResponse( - Throwable exception, - boolean isUserException, - Response response, - ObjectFactory factory) - { - if (response.getError() == null) - { - response.setError(factory.createErrorType()); - } - JAXBUtilities.buildError(response.getError(), exception, isUserException); - } -} Deleted: ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestConverter.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestConverter.java 2011-12-09 14:20:55 UTC (rev 1956) +++ ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestConverter.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -1,239 +0,0 @@ -// Copyright (c) The University of Edinburgh, 2011. -// -// LICENCE-START -// 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. -// LICENCE-END - -package uk.org.ogsadai.service.rest.drer; - -import java.util.List; - -import uk.org.ogsadai.activity.pipeline.ActivityDescriptor; -import uk.org.ogsadai.activity.pipeline.ActivityInput; -import uk.org.ogsadai.activity.pipeline.ActivityInputLiteral; -import uk.org.ogsadai.activity.pipeline.ActivityInputStream; -import uk.org.ogsadai.activity.pipeline.ActivityOutput; -import uk.org.ogsadai.activity.pipeline.ActivityOutputStream; -import uk.org.ogsadai.activity.pipeline.ActivityPipeline; -import uk.org.ogsadai.activity.pipeline.CompositeLiteral; -import uk.org.ogsadai.activity.pipeline.ListLiteral; -import uk.org.ogsadai.activity.pipeline.SimpleActivityDescriptor; -import uk.org.ogsadai.activity.pipeline.SimpleActivityPipeline; -import uk.org.ogsadai.activity.pipeline.StreamLiteral; -import uk.org.ogsadai.activity.workflow.ActivityPipelineWorkflow; -import uk.org.ogsadai.activity.workflow.ParallelWorkflow; -import uk.org.ogsadai.activity.workflow.SequenceWorkflow; -import uk.org.ogsadai.activity.workflow.Workflow; -import uk.org.ogsadai.exception.MalformedListBeginException; -import uk.org.ogsadai.exception.MalformedListEndException; -import uk.org.ogsadai.exception.RequestUserException; -import uk.org.ogsadai.service.rest.drer.jaxb.request.ActivityType; -import uk.org.ogsadai.service.rest.drer.jaxb.request.DataType; -import uk.org.ogsadai.service.rest.drer.jaxb.request.InputsType.Input; -import uk.org.ogsadai.service.rest.drer.jaxb.request.OutputStreamType; -import uk.org.ogsadai.service.rest.drer.jaxb.request.ParallelType; -import uk.org.ogsadai.service.rest.drer.jaxb.request.PipelineType; -import uk.org.ogsadai.service.rest.drer.jaxb.request.RequestType; -import uk.org.ogsadai.service.rest.drer.jaxb.request.SequenceType; -import uk.org.ogsadai.service.rest.drer.jaxb.request.WorkflowType; - -/** - * Converts a JAXB request bean into an OGSA-DAI request. - * - * @author The OGSA-DAI Project Team - */ -public class JerseyRequestConverter -{ - - /** Copyright. */ - private static final String COPYRIGHT_NOTICE = - "Copyright (c) The University of Edinburgh, 2011"; - - public static Workflow convert(RequestType request) - throws RequestUserException - { - WorkflowType root = request.getWorkflow(); - Workflow workflow = handleWorkflow(root); - return workflow; - } - - private static Workflow handleWorkflow(WorkflowType workflow) - throws RequestUserException - { - if (workflow.getParallel() != null) - { - return handleParallel(workflow.getParallel()); - } - else if (workflow.getSequence() != null) - { - return handleSequence(workflow.getSequence()); - } - else if (workflow.getPipeline() != null) - { - return handlePipeline(workflow.getPipeline()); - } - throw new IllegalArgumentException("Unexpected workflow type."); - } - - private static Workflow handlePipeline(PipelineType pipeline) - throws RequestUserException - { - ActivityPipeline graph = new SimpleActivityPipeline(); - for (ActivityType activity : pipeline.getActivity()) - { - ActivityDescriptor descriptor = null; - if (activity.getResource() != null) - { - descriptor = new SimpleActivityDescriptor( - activity.getResource(), - activity.getName(), - activity.getInstanceName()); - } - else - { - descriptor = new SimpleActivityDescriptor( - activity.getName(), - activity.getInstanceName()); - } - for (Input input : activity.getInputs().getInput()) - { - String inputName = input.getName(); - if (input.getInputLiteral() != null && - !input.getInputLiteral().isEmpty()) - { - try - { - ActivityInput inputDescriptor = - handleInputLiteral( - inputName, input.getInputLiteral()); - descriptor.addInput(inputDescriptor); - } - catch (MalformedListEndException e) - { - throw new RequestUserException(e); - } - catch (MalformedListBeginException e) - { - throw new RequestUserException(e); - } - } - else if (input.getInputStream() != null) - { - OutputStreamType output = - (OutputStreamType)input.getInputStream().getPipe(); - ActivityInput inputDescriptor = - new ActivityInputStream(inputName, output.getPipe()); - descriptor.addInput(inputDescriptor); - } - } - for (OutputStreamType output : activity.getOutputs().getOutputStream()) - { - ActivityOutput outputDescriptor = - new ActivityOutputStream(output.getName(), output.getPipe()); - descriptor.addOutput(outputDescriptor); - } - graph.addActivity(descriptor); - } - ActivityPipelineWorkflow result = new ActivityPipelineWorkflow(graph); - return result; - } - - private static ActivityInput handleInputLiteral( - String inputName, - List<DataType> inputLiteral) - throws MalformedListEndException, MalformedListBeginException - { - CompositeLiteral root = new StreamLiteral(); - CompositeLiteral current = root; - for (DataType dataType : inputLiteral) - { - if (dataType.getListBegin() != null) - { - ListLiteral list = new ListLiteral(current); - current.addLiteral(list); - current = list; - } - else if (dataType.getListEnd() != null) - { - current = current.getParent(); - if (current == null) - { - throw new MalformedListEndException(inputName); - } - } - else if (dataType.getBinary() != null) - { - current.addLiteralItem(dataType.getBinary()); - } - else if (dataType.getCharArray() != null) - { - current.addLiteralItem(dataType.getCharArray().toCharArray()); - } - else if (dataType.getCharArray() != null) - { - current.addLiteralItem(dataType.getCharArray()); - } - else if (dataType.getDate() != null) - { - current.addLiteralItem(dataType.getDate()); - } - else if (dataType.getDouble() != null) - { - current.addLiteralItem(dataType.getDouble()); - } - else if (dataType.getFloat() != null) - { - current.addLiteralItem(dataType.getFloat()); - } - else if (dataType.getInt() != null) - { - current.addLiteralItem(dataType.getInt()); - } - else if (dataType.getLong() != null) - { - current.addLiteralItem(dataType.getLong()); - } - else if (dataType.getString() != null) - { - current.addLiteralItem(dataType.getString()); - } - } - if (root != current) - { - throw new MalformedListBeginException(inputName); - } - return new ActivityInputLiteral(inputName, root); - } - - private static SequenceWorkflow handleSequence(SequenceType sequence) - throws RequestUserException - { - SequenceWorkflow result = new SequenceWorkflow(); - for (WorkflowType workflow : sequence.getWorkflow()) - { - result.addChild(handleWorkflow(workflow)); - } - return result; - } - - private static ParallelWorkflow handleParallel(ParallelType parallel) - throws RequestUserException - { - ParallelWorkflow result = new ParallelWorkflow(); - for (WorkflowType workflow : parallel.getWorkflow()) - { - result.addChild(handleWorkflow(workflow)); - } - return result; - } -} Deleted: ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestStatusConverter.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestStatusConverter.java 2011-12-09 14:20:55 UTC (rev 1956) +++ ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/JerseyRequestStatusConverter.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -1,145 +0,0 @@ -// Copyright (c) The University of Edinburgh, 2011. -// -// LICENCE-START -// 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. -// LICENCE-END - -package uk.org.ogsadai.service.rest.drer; - -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; - -import uk.org.ogsadai.activity.ActivityInstanceName; -import uk.org.ogsadai.activity.event.Warning; -import uk.org.ogsadai.activity.request.status.ActivityProcessingStatus; -import uk.org.ogsadai.activity.request.status.ActivityResultKey; -import uk.org.ogsadai.data.DataValue; -import uk.org.ogsadai.exception.DAIException; -import uk.org.ogsadai.exception.UserExceptionMarker; -import uk.org.ogsadai.resource.request.RequestStatus; -import uk.org.ogsadai.service.rest.drer.jaxb.response.ActivityProcessingType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.ActivityStatusType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.DataType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.ErrorType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.MessageType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.ObjectFactory; -import uk.org.ogsadai.service.rest.drer.jaxb.response.RequestDetailsType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.RequestProcessingType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.RequestStatusType; -import uk.org.ogsadai.service.rest.drer.jaxb.response.ResultType; - -/** - * Converts an OGSA-DAI request status object into a JAXB request status bean. - * - * @author The OGSA-DAI Project Team - */ -public class JerseyRequestStatusConverter -{ - private static final ObjectFactory factory = new ObjectFactory(); - - /** Copyright. */ - private static final String COPYRIGHT_NOTICE = - "Copyright (c) The University of Edinburgh, 2011"; - - @SuppressWarnings("unchecked") - public static RequestStatusType convert(RequestStatus requestStatus) - { - RequestStatusType result = factory.createRequestStatusType(); - - RequestDetailsType requestDetails = factory.createRequestDetailsType(); - requestDetails.setId(requestStatus.getRequestID().toString()); - requestDetails.setStatus( - RequestProcessingType.fromValue( - requestStatus.getExecutionStatus().getLocalPart())); - if (requestStatus.getError() != null) - { - requestDetails.setError(buildError(requestStatus.getError())); - } - result.setRequestDetails(requestDetails); - - Iterator<Entry<ActivityInstanceName, ActivityProcessingStatus>> iterator = - requestStatus.getActivities(); - while (iterator.hasNext()) - { - ActivityStatusType status = factory.createActivityStatusType(); - Entry<ActivityInstanceName, ActivityProcessingStatus> entry = iterator.next(); - ActivityInstanceName instanceName = - (ActivityInstanceName)entry.getKey(); - status.setInstanceName(instanceName.toString()); - ActivityProcessingStatus activityStatus = - (ActivityProcessingStatus)entry.getValue(); - String processingStatus = activityStatus.getStatus().toString(); - status.setStatus(ActivityProcessingType.fromValue(processingStatus)); - if (activityStatus.getError() != null) - { - status.setError(buildError(activityStatus.getError())); - } - buildWarnings(status.getWarning(), activityStatus.getWarnings()); - result.getActivity().add(status); - } - buildResults(result.getResult(), requestStatus.getActivityResults()); - return result; - } - - private static void buildResults( - List<ResultType> activityResults, - Iterator<Entry<ActivityResultKey, List<DataValue>>> iterator) - { - while (iterator.hasNext()) - { - Entry<ActivityResultKey, List<DataValue>> entry = iterator.next(); - ActivityResultKey key = (ActivityResultKey)entry.getKey(); - ResultType result = factory.createResultType(); - result.setActivityInstanceName(key.getActivityInstanceName().toString()); - result.setResultName(key.getResultName()); - Iterator<DataValue> dataIterator = entry.getValue().iterator(); - while (dataIterator.hasNext()) - { - DataType data = factory.createDataType(); - DataValue value = dataIterator.next(); - BeanDataValueVisitor visitor = new BeanDataValueVisitor(data); - value.accept(visitor); - result.getData().add(data); - } - activityResults.add(result); - } - } - - private static void buildWarnings( - List<MessageType> warningList, - Iterator<Warning> iterator) - { - while (iterator.hasNext()) - { - Warning warning = iterator.next(); - MessageType message = new MessageType(); - message.setId(warning.getMessageID().toString()); - message.setMsg(warning.getDescription()); - for (Object parameter : warning.getParameters()) - { - message.getParameter().add(String.valueOf(parameter)); - } - warningList.add(message); - } - } - - private static ErrorType buildError(DAIException exception) - { - ErrorType error = factory.createErrorType(); - boolean isUserException = (exception instanceof UserExceptionMarker); - JAXBUtilities.buildError(error, exception, isUserException); - return error; - } - -} Added: ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/activity/delivery/ObtainFromJerseyDataSourceActivity.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/activity/delivery/ObtainFromJerseyDataSourceActivity.java (rev 0) +++ ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/activity/delivery/ObtainFromJerseyDataSourceActivity.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -0,0 +1,323 @@ +// Copyright (c) The University of Edinburgh, 2011. +// +// LICENCE-START +// 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. +// LICENCE-END + + +package uk.org.ogsadai.activity.delivery; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import uk.org.ogsadai.activity.Activity; +import uk.org.ogsadai.activity.ActivityProcessingException; +import uk.org.ogsadai.activity.ActivityTerminatedException; +import uk.org.ogsadai.activity.ActivityUserException; +import uk.org.ogsadai.activity.InvalidActivityInputsException; +import uk.org.ogsadai.activity.MatchedIterativeActivity; +import uk.org.ogsadai.activity.io.ActivityInput; +import uk.org.ogsadai.activity.io.ActivityPipeProcessingException; +import uk.org.ogsadai.activity.io.BlockWriter; +import uk.org.ogsadai.activity.io.PipeClosedException; +import uk.org.ogsadai.activity.io.PipeIOException; +import uk.org.ogsadai.activity.io.PipeTerminatedException; +import uk.org.ogsadai.activity.io.TypedOptionalActivityInput; +import uk.org.ogsadai.client.toolkit.exception.ClientToolkitException; +import uk.org.ogsadai.client.toolkit.exception.ResourceUnknownException; +import uk.org.ogsadai.client.toolkit.exception.ServerCommsException; +import uk.org.ogsadai.client.toolkit.exception.ServerException; +import uk.org.ogsadai.client.toolkit.presentation.jersey.JerseyDataSource; +import uk.org.ogsadai.client.toolkit.presentation.jersey.JerseyServer; +import uk.org.ogsadai.common.msgs.DAILogger; +import uk.org.ogsadai.data.binary.DataStreamException; +import uk.org.ogsadai.data.binary.DataValueInputStream; +import uk.org.ogsadai.resource.ResourceID; + +/** + * Obtains data from a Jersey data source resource that is residing on another + * OGSA-DAI server. + * <p> + * Activity inputs: + * </p> + * <ul> + * <li> <code>url</code>. Type: {@link java.lang.String}. The url input of the + * remote OGSA-DAI server. This is a optional input, if not provided then a + * <code>dataSourceResource</code> input must be provided.</li> + * <li><code>resourceID</code>. Type: {@link java.lang.String}. The resource ID + * of the data source where the data will be obtained from. This is an optional + * input, if not provided then a <code>dataSourceResource + * </code> input must be provided.</li> + * <li><code>dataSourceResource</code>. Type: + * {@link uk.org.ogsadai.client.toolkit.JerseyDataSource}. Specifies the proxy + * to use in order to communicate with the data source resource. This proxy will + * contain the details of the remote server to access. This is an optional + * input, if not provided the <code>url</code> and <code>resourceID</code> + * inputs must be provided.</li> + * </ul> + * <p> + * Activity outputs: + * </p> + * <ul> + * <li><code>data</code>. Type: One of: byte[], char[], {@link java.util.Date}, + * {@link java.lang.Float}, {@link java.lang.Double}, {@link java.lang.Boolean}, + * {@link java.lang.Integer}, {@link java.lang.String}, {@link java.lang.Long} + * or an OGSA-DAI list (can be nested) of one of these. The data obtained from + * the remote data source.</li> + * </ul> + * <p> + * Configuration parameters: none. + * </p> + * <p> + * Activity input/output ordering: + * </p> + * <ul> + * <li>For each iteration the inputs are read in the following order: url, + * resourceID, dataSourceResource.</li> + * </ul> + * <p> + * Activity contracts: none. + * </p> + * <p> + * Target data resource: none + * </p> + * <p> + * Behaviour: + * </p> + * <ul> + * <li>This activity streams data from a data source resource that is residing + * on a remote OGSA-DAI server.</li> + * <li>If the OGSA-DAI server is not available a server communication error will + * be raised.</li> + * <li>If the resource cannot be found on the remote server a resource unknown + * error will be raised.</li> + * <li>It is possible to contact a data source resource within the same OGSA-DAI + * instance, however the data is transferred using HTTP.</li> + * <li> + * An invalid read mode will cause an + * <computeroutput>InvalidInputValueException</computeroutput> to thrown.</li> + * <li> + * If an negative number of blocks to be read is input, then an error will be + * returned stating this is invalid and must be corrected.</li> + * <li> + * Other errors can be operational errors, such as read problems or invalid data + * in the data source resource targeted.</li> + * </ul> + * + * @author The OGSA-DAI Project Team. + */ +public class ObtainFromJerseyDataSourceActivity + extends MatchedIterativeActivity implements Activity +{ + /** Copyright notice. */ + private static final String COPYRIGHT_NOTICE = + "Copyright (c) The University of Edinburgh, 2011."; + + /** Logger.*/ + private static final DAILogger LOG = DAILogger + .getLogger(ObtainFromJerseyDataSourceActivity.class); + + /** + * Activity input name (<code>url</code>) - URL of + * remote OGSA-DAI server. + * ({@link java.lang.String}). + */ + public static final String URL = "url"; + + /** + * Activity input name (<code>resourceID</code>) - resource ID + * of the data source resource. + * ({@link java.lang.String}). + */ + public static final String RESOURCE_ID = "resourceID"; + + /** + * Activity input name (<code>dataSourceResource</code>) - the data source + * resource proxy to use when contacting the server. This is an optional + * input. If not provided the <code>url</code> and <code>resourceId</code> + * inputs must be provided. + * ({@link uk.org.ogsadai.client.toolkit.DataSourceResource}). + */ + public static final String DATA_SOURCE_RESOURCE = "dataSourceResource"; + + + /** + * Activity output name (<code>data</code>) - Obtained data (One of: + * byte[], char[], {@link java.util.Date}, {@link java.lang.Float}, + * {@link java.lang.Double}, {@link java.lang.Boolean}, + * {@link java.lang.Integer}, {@link java.lang.String}, + * {@link java.lang.Long} or an OGSA-DAI list (can be nested) of one of + * these). + */ + public static final String DATA = "data"; + + /** Output block writer. */ + private BlockWriter mOutput; + + /** + * {@inheritDoc} + */ + protected ActivityInput[] getIterationInputs() + { + return new ActivityInput[] { + new TypedOptionalActivityInput(URL, String.class, null), + new TypedOptionalActivityInput(RESOURCE_ID, String.class, null), + new TypedOptionalActivityInput(DATA_SOURCE_RESOURCE, + JerseyDataSource.class, null) + }; + } + + /** + * {@inheritDoc} + */ + protected void preprocess() + throws ActivityUserException, + ActivityProcessingException, + ActivityTerminatedException + { + validateOutput(DATA); + mOutput = getOutput(DATA); + } + + /** + * {@inheritDoc} + */ + protected void processIteration(Object[] iterationData) + throws ActivityProcessingException, + ActivityTerminatedException, + ActivityUserException + { + final String url = (String) iterationData[0]; + final String resourceID = (String) iterationData[1]; + JerseyDataSource dataSource = (JerseyDataSource) iterationData[2]; + + if (LOG.isDebugEnabled()) + { + LOG.debug("URL: " + url); + LOG.debug("ResourceID: " + resourceID); + LOG.debug("DataSourceResource: " + dataSource); + } + + try + { + if (dataSource == null) + { + if (url == null) + { + throw new InvalidActivityInputsException(1,URL); + } + if (resourceID == null) + { + throw new InvalidActivityInputsException(1,RESOURCE_ID); + } + + //get the remote data source resource + JerseyServer server = new JerseyServer(); + // it's safe to cast the data source to Jersey + dataSource = (JerseyDataSource)server.getDataSourceResource( + new URL(url), new ResourceID(resourceID)); + LOG.debug("Have created data source resource proxy"); + } + } + catch (ServerCommsException e) + { + throw new ActivityProcessingException(e); + } + catch (ServerException e) + { + throw new ActivityProcessingException(e); + } + catch (ClientToolkitException e) + { + throw new ActivityProcessingException(e); + } + catch (MalformedURLException e) + { + throw new ActivityUserException(e); + } + + try + { + DataValueInputStream input = dataSource.getInputStream(); + Object block; + while ((block = input.read()) != null) + { + if (!write(block)) + { + // no more data requested from the consumer + // so we finish + iterativeStageComplete(); + break; + } + } + } + catch (ResourceUnknownException e) + { + throw new ActivityUserException(e); + } + catch (IOException e) + { + throw new ActivityProcessingException(e); + } + catch (DataStreamException e) + { + // an error occurred on the data source input stream + mOutput.closeForWritingDueToError(); + } + } + + @Override + protected void postprocess() + throws ActivityUserException, + ActivityProcessingException, + ActivityTerminatedException + { + // no post-processing + } + + /** + * Write a block to the output. + * + * @param object + * block to write + * @return <code>true</code> if the pipe is open and the consumer accepts + * more data + * @throws ActivityTerminatedException + * if the activity was terminated + * @throws ActivityPipeProcessingException + * if an internal error occurred + */ + private boolean write(Object object) + throws ActivityTerminatedException, + ActivityPipeProcessingException + { + try + { + mOutput.write(object); + return true; + } + catch (PipeClosedException e) + { + return false; + } + catch (PipeIOException e) + { + throw new ActivityPipeProcessingException(e); + } + catch (PipeTerminatedException e) + { + throw new ActivityTerminatedException(); + } + } +} Modified: ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/datasource/DataSourceStreamingOutput.java =================================================================== --- ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/datasource/DataSourceStreamingOutput.java 2011-12-09 14:20:55 UTC (rev 1956) +++ ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/datasource/DataSourceStreamingOutput.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -72,18 +72,25 @@ { dataOutput.closeWithError(); } + else + { + dataOutput.close(); + } } - catch (InvalidSequenceNumberException e) - { - // ignore - shouldn't happen - } catch (UnsupportedDataTypeException e) { + dataOutput.closeWithError(); + mDataSource.closeForReading(); throw new IOException(e); } + catch (Throwable e) + { + dataOutput.closeWithError(); + mDataSource.closeForReading(); + throw new WebApplicationException(e); + } finally { - dataOutput.close(); mTimer.cancel(); } } Copied: ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/drer/BeanDataValueVisitor.java (from rev 1906, ogsa-dai/trunk/presentation/jersey/common/src/main/java/uk/org/ogsadai/service/rest/drer/BeanDataValueVisitor.java) =================================================================== --- ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/drer/BeanDataValueVisitor.java (rev 0) +++ ogsa-dai/trunk/presentation/jersey/server/src/main/java/uk/org/ogsadai/service/rest/drer/BeanDataValueVisitor.java 2011-12-09 15:54:57 UTC (rev 1957) @@ -0,0 +1,158 @@ +// Copyright (c) The University of Edinburgh, 2011. +// +// LICENCE-START +// 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. +// LICENCE-END + +package uk.org.ogsadai.service.rest.drer; + +import java.util.GregorianCalendar; + +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; + +import uk.org.ogsadai.common.msgs.DAILogger; +import uk.org.ogsadai.data.BinaryData; +import uk.org.ogsadai.data.BooleanData; +import uk.org.ogsadai.data.CharData; +import uk.org.ogsadai.data.DataValueVisitor; +import uk.org.ogsadai.data.DateData; +import uk.org.ogsadai.data.DoubleData; +import uk.org.ogsadai.data.FloatData; +import uk.org.ogsadai.data.IntegerData; +import uk.org.ogsadai.data.ListBegin; +import uk.org.ogsadai.data.ListEnd; +import uk.org.ogsadai.data.LongData; +import uk.org.ogsadai.data.StringData; +import uk.org.ogsadai.service.rest.drer.jaxb.response.DataType; +import uk.org.ogsadai.service.rest.drer.jaxb.response.ObjectFactory; + +/** + * Visits a <code>DataValue</code> object and populates a JAXB <tt>DataType</tt> + * bean with the wrapped value. + * + * @author The OGSA-DAI Project Team. + */ +public class BeanDataValueVisitor implements DataValueVisitor +{ + /** Copyright. */ + private static final String COPYRIGHT_NOTICE = + "Copyright (c) The University of Edinburgh, 2011"; + + private static final DAILogger LOG = + DAILogger.getLogger(BeanDataValueVisitor.class); + + /** The data bean which holds the value. */ + private DataType mDataBean; + + private DatatypeFactory mDataTypeFactory; + private static final ObjectFactory factory = new ObjectFactory(); + + /** + * Creates a new data value visitor which writes values to the + * specified bean. + * + * @param dataBean + * The bean that the ... [truncated message content] |