--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<document name="acquisitions">\r
+ <ns2:acquisitions_common xmlns:ns2="http://collectionspace.org/services/acquisition" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
+ <acquisitionReferenceNumber>Ac2011.1.2</acquisitionReferenceNumber>\r
+ <objectOfferPriceCurrency>usd</objectOfferPriceCurrency>\r
+ <acquisitionAuthorizerDate>2011-07-04</acquisitionAuthorizerDate>\r
+ <accessionDate>2011-07-04</accessionDate>\r
+ <originalObjectPurchasePriceCurrency>usd</originalObjectPurchasePriceCurrency>\r
+ <acquisitionReason>Bargain</acquisitionReason>\r
+ <acquisitionMethod>purchase</acquisitionMethod>\r
+ <originalObjectPurchasePriceValue>1</originalObjectPurchasePriceValue>\r
+ <objectPurchaseOfferPriceCurrency>usd</objectPurchaseOfferPriceCurrency>\r
+ <acquisitionAuthorizer>urn:cspace:org.collectionspace.demo:personauthority:id(4c300397-746f-48f0-bc29):person:id(fadd6312-486e-4ada-92c9)'Patrick+Schmitz'</acquisitionAuthorizer>\r
+ </ns2:acquisitions_common>\r
+</document>\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<xmlReplay>\r
+ <auths>\r
+ <!-- IMPORTANT: THESE ARE STICKY :: THEY STICK AROUND UNTIL RESET, IN EXEC ORDER OF THIS FILE. -->\r
+ <auth ID="admin@core.collectionspace.org">YWRtaW5AY29yZS5jb2xsZWN0aW9uc3BhY2Uub3JnOkFkbWluaXN0cmF0b3I=</auth>\r
+ </auths>\r
+ <testGroup ID="testSingle" autoDeletePOSTS="false">\r
+ <test ID="createReport1" auth="test">\r
+ <method>POST</method>\r
+ <uri>/cspace-services/reports/</uri>\r
+ <filename>report/report1.xml</filename>\r
+ </test>\r
+ <test ID="readReport1" auth="test">\r
+ <method>GET</method>\r
+ <uri>/cspace-services/reports/${createReport1.CSID}</uri>\r
+ </test>\r
+ <test ID="createAcq" auth="test">\r
+ <method>POST</method>\r
+ <uri>/cspace-services/acquisitions/</uri>\r
+ <filename>report/ac1.xml</filename>\r
+ </test>\r
+ <!-- XmlReplay does not know how to ask for anything except XML, so gets a 406\r
+ Even if it could ask for PDF, it could not handle the response...\r
+ <test ID="testInvokeSingle" auth="test" autoDeletePOSTS="false">\r
+ <method>POST</method>\r
+ <uri>/cspace-services/reports/${createReport1.CSID}</uri>\r
+ <filename>report/report1InvContext.xml</filename>\r
+ <vars>\r
+ <var ID="Acq1">${createAcq.CSID}</var>\r
+ </vars>\r
+ </test>\r
+ -->\r
+ <!--\r
+ <test ID="testInvokeList" auth="test" autoDeletePOSTS="false">\r
+ <method>POST</method>\r
+ <uri>/cspace-services/batch/${createCollObj1.CSID}</uri>\r
+ <filename>batch/batchInvContextList.xml</filename>\r
+ <vars>\r
+ <var ID="CollObj1">${createBatch.CSID}</var>\r
+ </vars>\r
+ </test>\r
+ <test ID="testBadInvoke" auth="test" autoDeletePOSTS="false">\r
+ <method>POST</method>\r
+ <expectedCodes>400</expectedCodes>\r
+ <uri>/cspace-services/batch/${createCollObj1.CSID}</uri>\r
+ <filename>batch/batchBadInvContext.xml</filename>\r
+ <vars>\r
+ <var ID="CollObj1">${createBatch.CSID}</var>\r
+ </vars>\r
+ </test>\r
+ <test ID="testInvokeEmptyList" auth="test" autoDeletePOSTS="false">\r
+ <method>POST</method>\r
+ <expectedCodes>400</expectedCodes>\r
+ <uri>/cspace-services/batch/${createCollObj1.CSID}</uri>\r
+ <filename>batch/batchBadInvContextList.xml</filename>\r
+ <vars>\r
+ <var ID="CollObj1">${createBatch.CSID}</var>\r
+ </vars>\r
+ </test>\r
+ <test ID="testFilteredList1" auth="test">\r
+ <method>GET</method>\r
+ <uri>/cspace-services/batch?doctype=CollectionObject&inv=single</uri>\r
+ </test>\r
+ <test ID="testFilteredList2" auth="test">\r
+ <method>GET</method>\r
+ <uri>/cspace-services/batch?doctype=Intake&inv=group</uri>\r
+ </test>\r
+ -->\r
+ </testGroup>\r
+ <!-- \r
+ <testGroup ID="cleanup" autoDeletePOSTS="true">\r
+ <test ID="cl1" auth="test">\r
+ <method>DELETE</method>\r
+ <uri>/cspace-services/batch/${createCollObj1.CSID}</uri>\r
+ </test>\r
+ <test ID="cl2" auth="test">\r
+ <method>DELETE</method>\r
+ <uri>/cspace-services/collectionobjects/${createBatch.CSID}</uri>\r
+ </test>\r
+ </testGroup>\r
+ -->\r
+</xmlReplay>\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+<document name="report">\r
+ <ns2:reports_common\r
+ xmlns:ns2="http://collectionspace.org/services/report">\r
+ <name>Acquisition Summary</name>\r
+ <notes>Just a few fields about a single acquisition</notes>\r
+ <forDocType>Acquisition</forDocType>\r
+ <supportsSingleDoc>true</supportsSingleDoc>\r
+ <supportsDocList>false</supportsDocList>\r
+ <supportsGroup>false</supportsGroup>\r
+ <supportsNoContext>true</supportsNoContext>\r
+ <filename>acq_basic.jasper</filename>\r
+ <outputMIME>application/pdf</outputMIME>\r
+ </ns2:reports_common>\r
+</document>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+<ns2:invocationContext\r
+xmlns:ns2="http://collectionspace.org/services/common/invocable"\r
+xmlns:ns3="http://collectionspace.org/services/jaxb">\r
+ <mode>single</mode>\r
+ <docType>Acquisition</docType>\r
+ <singleCSID>605e9252-598d-4459-8380</singleCSID>\r
+</ns2:invocationContext>\r
+\r
+\r
<!-- Batch Information Group -->\r
\r
<xs:element name="name" type="xs:string"/>\r
- <xs:element name="notes" type="xs:string"/>\r
- <xs:element name="forDocType" type="xs:string"/>\r
- <xs:element name="supportsSingleDoc" type="xs:boolean"/>\r
- <xs:element name="supportsDocList" type="xs:boolean"/>\r
- <xs:element name="supportsGroup" type="xs:boolean"/>\r
- <!-- NYI <xs:element name="supportsQuery" type="xs:boolean"/> -->\r
- <xs:element name="createsNewFocus" type="xs:boolean"/>\r
- <xs:element name="className" type="xs:string"/>\r
+ <xs:element name="notes" type="xs:string"/>\r
+ <xs:element name="forDocType" type="xs:string"/>\r
+ <xs:element name="supportsNoContext" type="xs:boolean"/>\r
+ <xs:element name="supportsSingleDoc" type="xs:boolean"/>\r
+ <xs:element name="supportsDocList" type="xs:boolean"/>\r
+ <xs:element name="supportsGroup" type="xs:boolean"/>\r
+ <!-- NYI <xs:element name="supportsQuery" type="xs:boolean"/> -->\r
+ <xs:element name="createsNewFocus" type="xs:boolean"/>\r
+ <xs:element name="className" type="xs:string"/>\r
</xs:schema>\r
<xs:element name="name" type="xs:string"/>
<xs:element name="notes" type="xs:string"/>
<xs:element name="forDocType" type="xs:string"/>
+ <xs:element name="supportsNoContext" type="xs:boolean"/>
<xs:element name="forSingleDoc" type="xs:boolean"/>
<xs:element name="createsNewFocus" type="xs:boolean"/>
<xs:element name="className" type="xs:string"/>
DocumentModel docModel = wrapper.getWrappedObject();
String invocationMode = invContext.getMode();
String modeProperty = null;
+ boolean checkDocType = true;
if(BatchInvocable.INVOCATION_MODE_SINGLE.equalsIgnoreCase(invocationMode)) {
modeProperty = BatchJAXBSchema.SUPPORTS_SINGLE_DOC;
} else if(BatchInvocable.INVOCATION_MODE_LIST.equalsIgnoreCase(invocationMode)) {
modeProperty = BatchJAXBSchema.SUPPORTS_DOC_LIST;
} else if(BatchInvocable.INVOCATION_MODE_GROUP.equalsIgnoreCase(invocationMode)) {
modeProperty = BatchJAXBSchema.SUPPORTS_GROUP;
+ } else if(Invocable.INVOCATION_MODE_NO_CONTEXT.equalsIgnoreCase(invocationMode)) {
+ modeProperty = InvocableJAXBSchema.SUPPORTS_NO_CONTEXT;
+ checkDocType = false;
} else {
throw new BadRequestException("BatchResource: unknown Invocation Mode: "
+invocationMode);
"BatchResource: Invoked with unsupported context mode: "
+invocationMode);
}
- String forDocType =
- (String)docModel.getPropertyValue(BatchJAXBSchema.FOR_DOC_TYPE);
- if(!forDocType.equalsIgnoreCase(invContext.getDocType())) {
- throw new BadRequestException(
- "BatchResource: Invoked with unsupported document type: "
- +invContext.getDocType());
+ if(checkDocType) {
+ String forDocType =
+ (String)docModel.getPropertyValue(BatchJAXBSchema.FOR_DOC_TYPE);
+ if(!forDocType.equalsIgnoreCase(invContext.getDocType())) {
+ throw new BadRequestException(
+ "BatchResource: Invoked with unsupported document type: "
+ +invContext.getDocType());
+ }
}
batchInstance.setInvocationContext(invContext);
//ResourceMapHolder csapp = (ResourceMapHolder)app;
}
public String INVOCATION_MODE_SINGLE = "single";
- public String INVOCATION_MODE_GROUP = "group";
public String INVOCATION_MODE_LIST = "list";
+ public String INVOCATION_MODE_GROUP = "group";
+ public String INVOCATION_MODE_NO_CONTEXT = "nocontext";
//public String INVOCATION_MODE_QUERY = "query"; NYI
public final int STATUS_ERROR = -1;
final static String SUPPORTS_SINGLE_DOC = "supportsSingleDoc";
final static String SUPPORTS_DOC_LIST = "supportsDocList";
final static String SUPPORTS_GROUP = "supportsGroup";
+ final static String SUPPORTS_NO_CONTEXT = "supportsNoContext";
// NYI final static String SUPPORTS_QUERY "supportsQuery";
}
<xs:element name="name" type="xs:string"/>\r
<xs:element name="notes" type="xs:string"/>\r
<xs:element name="forDocType" type="xs:string"/>\r
- <xs:element name="supportsSingleDoc" type="xs:boolean"/>\r
- <xs:element name="supportsDocList" type="xs:boolean"/>\r
- <xs:element name="supportsGroup" type="xs:boolean"/>\r
+ <xs:element name="supportsNoContext" type="xs:boolean"/>\r
+ <xs:element name="supportsSingleDoc" type="xs:boolean"/>\r
+ <xs:element name="supportsDocList" type="xs:boolean"/>\r
+ <xs:element name="supportsGroup" type="xs:boolean"/>\r
<!-- NYI <xs:element name="supportsQuery" type="xs:boolean"/> -->\r
<xs:element name="filename" type="xs:string"/>\r
<xs:element name="outputMIME" type="xs:string"/>\r
<xs:complexType>
<xs:sequence>
<xs:element name="csid" type="xs:string" />
- <xs:element name="name" type="xs:string"/>
- <xs:element name="notes" type="xs:string"/>
- <xs:element name="forDocType" type="xs:string"/>
- <xs:element name="supportsSingleDoc" type="xs:boolean"/>
- <xs:element name="supportsDocList" type="xs:boolean"/>
- <xs:element name="supportsGroup" type="xs:boolean"/>
- <!-- NYI <xs:element name="supportsQuery" type="xs:boolean"/> -->
- <xs:element name="filename" type="xs:string"/>
- <xs:element name="outputMIME" type="xs:string"/>
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="notes" type="xs:string"/>
+ <xs:element name="forDocType" type="xs:string"/>
+ <xs:element name="supportsNoContext" type="xs:boolean"/>
+ <xs:element name="supportsSingleDoc" type="xs:boolean"/>
+ <xs:element name="supportsDocList" type="xs:boolean"/>
+ <xs:element name="supportsGroup" type="xs:boolean"/>
+ <!-- NYI <xs:element name="supportsQuery" type="xs:boolean"/> -->
+ <xs:element name="filename" type="xs:string"/>
+ <xs:element name="outputMIME" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
+import org.collectionspace.services.jaxb.AbstractCommonList;
import org.collectionspace.services.jaxb.InvocableJAXBSchema;
import org.collectionspace.services.ReportJAXBSchema;
import org.collectionspace.services.client.PoxPayloadIn;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import java.io.File;
import java.io.FileInputStream;
return ReportsCommon.class;
}
+ @Override
+ protected AbstractCommonList getList(MultivaluedMap<String, String> queryParams) {
+ try {
+ ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext(queryParams);
+ DocumentHandler handler = createDocumentHandler(ctx);
+ getRepositoryClient(ctx).getFiltered(ctx, handler);
+ AbstractCommonList list = (AbstractCommonList) handler.getCommonPartList();
+ return list;
+ } catch (Exception e) {
+ throw bigReThrow(e, ServiceMessages.LIST_FAILED);
+ }
+ }
+
/*
* TODO: provide a static utility that will load a report, interrogate it
* for information about the properties, and return that information.
@Produces("application/pdf")
public Response invokeReport(
@PathParam("csid") String csid) {
+ InvocationContext invContext = new InvocationContext();
+ invContext.setMode(Invocable.INVOCATION_MODE_NO_CONTEXT);
+ return invokeReport(csid, invContext);
+ }
+
+ @POST
+ @Path("{csid}")
+ @Produces("application/pdf")
+ public Response invokeReport(
+ @PathParam("csid") String csid,
+ InvocationContext invContext) {
if (csid == null || "".equals(csid)) {
logger.error("invokeReport: missing csid!");
Response response = Response.status(Response.Status.BAD_REQUEST).entity(
if (logger.isTraceEnabled()) {
logger.trace("invokeReport with csid=" + csid);
}
- try {
- ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext();
- DocumentWrapper<DocumentModel> docWrapper = getRepositoryClient(ctx).getDoc(ctx, csid);
- DocumentModel docModel = docWrapper.getWrappedObject();
- String reportFileName = (String)docModel.getPropertyValue(ReportJAXBSchema.FILENAME);
- HashMap params = new HashMap();
- return buildReportResponse(csid, params, reportFileName);
- } catch (Exception e) {
- throw bigReThrow(e, ServiceMessages.POST_FAILED);
- }
- }
-
- @POST
- @Path("{csid}")
- @Produces("application/pdf")
- public Response invokeReport(
- @PathParam("csid") String csid,
- InvocationContext invContext) {
try {
ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext();
DocumentHandler handler = createDocumentHandler(ctx);
String invocationMode = invContext.getMode();
String modeProperty = null;
HashMap params = new HashMap();
+ boolean checkDocType = true;
if(Invocable.INVOCATION_MODE_SINGLE.equalsIgnoreCase(invocationMode)) {
modeProperty = InvocableJAXBSchema.SUPPORTS_SINGLE_DOC;
params.put("csid", invContext.getSingleCSID());
} else if(Invocable.INVOCATION_MODE_GROUP.equalsIgnoreCase(invocationMode)) {
modeProperty = InvocableJAXBSchema.SUPPORTS_GROUP;
params.put("groupcsid", invContext.getGroupCSID());
+ } else if(Invocable.INVOCATION_MODE_NO_CONTEXT.equalsIgnoreCase(invocationMode)) {
+ modeProperty = InvocableJAXBSchema.SUPPORTS_NO_CONTEXT;
+ checkDocType = false;
} else {
throw new BadRequestException("ReportResource: unknown Invocation Mode: "
+invocationMode);
}
Boolean supports = (Boolean)docModel.getPropertyValue(modeProperty);
- if(!supports) {
+ if(supports == null || !supports) {
throw new BadRequestException(
"ReportResource: This Report does not support Invocation Mode: "
+invocationMode);
}
+ if(checkDocType) {
+ String forDocType =
+ (String)docModel.getPropertyValue(InvocableJAXBSchema.FOR_DOC_TYPE);
+ if(!forDocType.equalsIgnoreCase(invContext.getDocType())) {
+ throw new BadRequestException(
+ "ReportResource: Invoked with unsupported document type: "
+ +invContext.getDocType());
+ }
+ }
String reportFileName = (String)docModel.getPropertyValue(ReportJAXBSchema.FILENAME);
return buildReportResponse(csid, params, reportFileName);