private AbstractCommonList commonList;\r
\r
protected static final int NUM_STANDARD_LIST_RESULT_FIELDS = 3;\r
+ protected static final String STANDARD_LIST_CSID_FIELD = "csid";\r
+ protected static final String STANDARD_LIST_URI_FIELD = "uri";\r
+ protected static final String STANDARD_LIST_UPDATED_AT_FIELD = "updatedAt";\r
\r
@Override\r
public AbstractCommonList getCommonPartList() {\r
List<ListResultField> resultsFields = getListItemsArray();\r
int nFields = resultsFields.size()+NUM_STANDARD_LIST_RESULT_FIELDS;\r
String fields[] = new String[nFields];\r
- fields[0] = "csid";\r
- fields[1] = "uri";\r
- fields[2] = "updatedAt";\r
+ fields[0] = STANDARD_LIST_CSID_FIELD;\r
+ fields[1] = STANDARD_LIST_URI_FIELD;\r
+ fields[2] = STANDARD_LIST_UPDATED_AT_FIELD;\r
for(int i=NUM_STANDARD_LIST_RESULT_FIELDS;i<nFields;i++) {\r
ListResultField field = resultsFields.get(i-NUM_STANDARD_LIST_RESULT_FIELDS); \r
fields[i]=field.getElement();\r
while(iter.hasNext()){\r
DocumentModel docModel = iter.next();\r
String id = NuxeoUtils.getCsid(docModel);\r
- item.put(fields[0], id);\r
+ item.put(STANDARD_LIST_CSID_FIELD, id);\r
String uri = getUri(docModel);\r
- item.put(fields[1], uri);\r
- item.put(fields[2], getUpdatedAtAsString(docModel));\r
+ item.put(STANDARD_LIST_URI_FIELD, uri);\r
+ item.put(STANDARD_LIST_UPDATED_AT_FIELD, getUpdatedAtAsString(docModel));\r
\r
for (ListResultField field : resultsFields ){\r
String schema = field.getSchema();\r
import org.collectionspace.services.common.ServiceMessages;
import org.collectionspace.services.common.api.Tools;
import org.collectionspace.services.common.config.TenantBindingConfigReaderImpl;
+import org.collectionspace.services.common.context.MultipartServiceContextFactory;
import org.collectionspace.services.common.context.RemoteServiceContextFactory;
+import org.collectionspace.services.common.context.ServiceBindingUtils;
import org.collectionspace.services.common.context.ServiceContext;
import org.collectionspace.services.common.context.ServiceContextFactory;
+import org.collectionspace.services.common.document.DocumentException;
import org.collectionspace.services.common.document.DocumentFilter;
import org.collectionspace.services.common.document.DocumentHandler;
import org.collectionspace.services.common.document.DocumentNotFoundException;
+import org.collectionspace.services.common.document.DocumentWrapper;
import org.collectionspace.services.common.query.QueryManager;
+import org.collectionspace.services.common.repository.RepositoryClient;
+import org.collectionspace.services.common.repository.RepositoryClientFactory;
import org.collectionspace.services.common.service.ServiceBindingType;
import org.collectionspace.services.common.service.ServiceObjectType;
import org.collectionspace.services.nuxeo.client.java.CommonList;
import org.collectionspace.services.nuxeo.util.NuxeoUtils;
+import org.collectionspace.services.servicegroup.nuxeo.ServiceGroupDocumentModelHandler;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.DocumentModelList;
+import org.nuxeo.ecm.core.api.model.PropertyException;
+import org.nuxeo.ecm.core.api.repository.RepositoryInstance;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
@Produces({"application/xml"})
@Consumes({"application/xml"})
public class ServiceGroupResource extends AbstractCollectionSpaceResourceImpl {
-
+
+ protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+
@Override
public String getServiceName(){
return ServiceGroupClient.SERVICE_NAME;
@Override
public ServiceContextFactory<PoxPayloadIn, PoxPayloadOut> getServiceContextFactory() {
- return RemoteServiceContextFactory.get();
+ return MultipartServiceContextFactory.get();
}
+ //======================= GET without specifier: List =====================================
+ @GET
+ public AbstractCommonList getList(@Context UriInfo ui) {
+ try {
+ CommonList commonList = new CommonList();
+ AbstractCommonList list = (AbstractCommonList)commonList;
+ ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext();
+ String commonSchema = ctx.getCommonPartLabel();
+ ArrayList<String> svcGroups = new ArrayList<String>();
+ svcGroups.add("procedure");
+ svcGroups.add("object");
+ svcGroups.add("authority");
+ // Fetch the list of groups from the tenant-bindings config, and prepare a list item
+ // for each one.
+ // We always declare this a full list, of the size that we are returning.
+ // Not quite in the spirit of what paging means, but tells callers not to ask for more.
+ list.setPageNum(0);
+ list.setPageSize(svcGroups.size());
+ list.setItemsInPage(svcGroups.size());
+ list.setTotalItems(svcGroups.size());
+ String fields[] = new String[2];
+ fields[0] = ServiceGroupListItemJAXBSchema.NAME;
+ fields[1] = ServiceGroupListItemJAXBSchema.URI;
+ commonList.setFieldsReturned(fields);
+ HashMap<String,String> item = new HashMap<String,String>();
+ for(String groupName:svcGroups){
+ item.put(ServiceGroupListItemJAXBSchema.NAME, groupName);
+ String uri = "/" + getServiceName().toLowerCase() + "/" + groupName;
+ item.put(ServiceGroupListItemJAXBSchema.URI, uri);
+ commonList.addItem(item);
+ item.clear();
+ }
+ return list;
+ } catch (Exception e) {
+ throw bigReThrow(e, ServiceMessages.LIST_FAILED);
+ }
+
+ }
+
+
//======================= GET ====================================================
// NOTE that csid is not a good name for the specifier, but if we name it anything else,
// our AuthZ gets confused!!!
TenantBindingConfigReaderImpl tReader =
ServiceMain.getInstance().getTenantBindingConfigReader();
// We need to get all the procedures, authorities, and objects.
- List<ServiceBindingType> servicebindings = tReader.getServiceBindingsByType(ctx.getTenantId(), groupname);
+ ArrayList<String> groupsList = null;
+ if("common".equalsIgnoreCase(groupname)) {
+ groupsList = ServiceBindingUtils.getCommonServiceTypes();
+ } else {
+ groupsList = new ArrayList<String>();
+ groupsList.add(groupname);
+ }
+ List<ServiceBindingType> servicebindings = tReader.getServiceBindingsByType(ctx.getTenantId(), groupsList);
if (servicebindings == null || servicebindings.isEmpty()) {
// 404 if there are no mappings.
Response response = Response.status(Response.Status.NOT_FOUND).entity(
}
- //======================= GET without specifier: List =====================================
@GET
- public AbstractCommonList getList(@Context UriInfo ui) {
+ @Path("{csid}/items")
+ public AbstractCommonList getItems(
+ @Context UriInfo ui,
+ @PathParam("csid") String serviceGroupName) {
+ ensureCSID(serviceGroupName, ResourceBase.READ);
+ AbstractCommonList list = null;
try {
- CommonList commonList = new CommonList();
- AbstractCommonList list = (AbstractCommonList)commonList;
+ MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
+ String keywords = queryParams.getFirst(IQueryManager.SEARCH_TYPE_KEYWORDS_KW);
ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext();
- String commonSchema = ctx.getCommonPartLabel();
- ArrayList<String> svcGroups = new ArrayList<String>();
- svcGroups.add("procedure");
- svcGroups.add("object");
- svcGroups.add("authority");
- // Fetch the list of groups from the tenant-bindings config, and prepare a list item
- // for each one.
- // We always declare this a full list, of the size that we are returning.
- // Not quite in the spirit of what paging means, but tells callers not to ask for more.
- list.setPageNum(0);
- list.setPageSize(svcGroups.size());
- list.setItemsInPage(svcGroups.size());
- list.setTotalItems(svcGroups.size());
- String fields[] = new String[2];
- fields[0] = ServiceGroupListItemJAXBSchema.NAME;
- fields[1] = ServiceGroupListItemJAXBSchema.URI;
- commonList.setFieldsReturned(fields);
- HashMap<String,String> item = new HashMap<String,String>();
- for(String groupName:svcGroups){
- item.put(ServiceGroupListItemJAXBSchema.NAME, groupName);
- String uri = "/" + getServiceName().toLowerCase() + "/" + groupName;
- item.put(ServiceGroupListItemJAXBSchema.URI, uri);
- commonList.addItem(item);
- item.clear();
+ ServiceGroupDocumentModelHandler handler = (ServiceGroupDocumentModelHandler)
+ createDocumentHandler(ctx);
+ ArrayList<String> groupsList = null;
+ if("common".equalsIgnoreCase(serviceGroupName)) {
+ groupsList = ServiceBindingUtils.getCommonServiceTypes();
+ } else {
+ groupsList = new ArrayList<String>();
+ groupsList.add(serviceGroupName);
}
- return list;
+ list = handler.getItemsForGroup(ctx, groupsList, keywords);
} catch (Exception e) {
- throw bigReThrow(e, ServiceMessages.LIST_FAILED);
+ throw bigReThrow(e, ServiceMessages.READ_FAILED, serviceGroupName);
}
-
+
+ return list;
}
-
+
}