@Override protected AbstractCommonList getCommonList(UriInfo ui) { try { ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext(ui); MultivaluedMap<String, String> queryParams = ctx.getQueryParams(); DocumentHandler handler = createDocumentHandler(ctx); String docType = queryParams.getFirst(IQueryManager.SEARCH_TYPE_DOCTYPE); String mode = queryParams.getFirst(IQueryManager.SEARCH_TYPE_INVOCATION_MODE); String whereClause = null; DocumentFilter documentFilter = null; String common_part = ctx.getCommonPartLabel(); if (docType != null && !docType.isEmpty()) { whereClause = QueryManager.createWhereClauseForInvocableByDocType(common_part, docType); documentFilter = handler.getDocumentFilter(); documentFilter.appendWhereClause(whereClause, IQueryManager.SEARCH_QUALIFIER_AND); } if (mode != null && !mode.isEmpty()) { whereClause = QueryManager.createWhereClauseForInvocableByMode(common_part, mode); documentFilter = handler.getDocumentFilter(); documentFilter.appendWhereClause(whereClause, IQueryManager.SEARCH_QUALIFIER_AND); } if (whereClause != null && logger.isDebugEnabled()) { logger.debug("The WHERE clause is: " + documentFilter.getWhereClause()); } getRepositoryClient(ctx).getFiltered(ctx, handler); AbstractCommonList list = (AbstractCommonList) handler.getCommonPartList(); return list; } catch (Exception e) { throw bigReThrow(e, ServiceMessages.LIST_FAILED); } }
/** * Gets the relation list item, looking up the subject and object documents, and getting summary * info via the objectName and objectNumber properties in tenant-bindings. * * @param ctx the ctx * @param sbt the ServiceBindingType of Relations service * @param tReader the tenant-bindings reader, for looking up docnumber and docname * @param docModel the doc model * @param serviceContextPath the service context path * @return the relation list item, with nested subject and object summary info. * @throws Exception the exception */ private RelationListItem getRelationListItem( ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx, ServiceBindingType sbt, TenantBindingConfigReaderImpl tReader, DocumentModel docModel, String serviceContextPath) throws Exception { RelationListItem relationListItem = new RelationListItem(); String id = getCsid(docModel); relationListItem.setCsid(id); relationListItem.setSubjectCsid( (String) docModel.getProperty(ctx.getCommonPartLabel(), RelationJAXBSchema.DOCUMENT_ID_1)); String predicate = (String) docModel.getProperty(ctx.getCommonPartLabel(), RelationJAXBSchema.RELATIONSHIP_TYPE); relationListItem.setRelationshipType(predicate); relationListItem.setPredicate(predicate); // predicate is new name for relationshipType. relationListItem.setPredicateDisplayName( (String) docModel.getProperty( ctx.getCommonPartLabel(), RelationJAXBSchema.RELATIONSHIP_TYPE_DISPLAYNAME)); relationListItem.setObjectCsid( (String) docModel.getProperty(ctx.getCommonPartLabel(), RelationJAXBSchema.DOCUMENT_ID_2)); relationListItem.setUri(serviceContextPath + id); // Now fill in summary info for the related docs: subject and object. String subjectCsid = relationListItem.getSubjectCsid(); String documentType = (String) docModel.getProperty(ctx.getCommonPartLabel(), RelationJAXBSchema.DOCUMENT_TYPE_1); RelationsDocListItem subject = createRelationsDocListItem(ctx, sbt, subjectCsid, tReader, documentType); // Object o1 = docModel.getProperty(ctx.getCommonPartLabel(), "subject"); // Object o2 = docModel.getProperty(ctx.getCommonPartLabel(), "object"); String subjectUri = (String) docModel.getProperty(ctx.getCommonPartLabel(), RelationJAXBSchema.subjectUri); subject.setUri(subjectUri); relationListItem.setSubject(subject); String objectCsid = relationListItem.getObjectCsid(); String documentType2 = (String) docModel.getProperty(ctx.getCommonPartLabel(), RelationJAXBSchema.DOCUMENT_TYPE_2); RelationsDocListItem object = createRelationsDocListItem(ctx, sbt, objectCsid, tReader, documentType2); String objectUri = (String) docModel.getProperty(ctx.getCommonPartLabel(), RelationJAXBSchema.objectUri); object.setUri(objectUri); relationListItem.setObject(object); return relationListItem; }
/* * JAX-RS Annotated methods */ @GET @Path("{csid}" + WorkflowClient.SERVICE_PATH) public byte[] getWorkflow(@PathParam("csid") String csid) { PoxPayloadOut result = null; try { ServiceContext<PoxPayloadIn, PoxPayloadOut> parentCtx = createServiceContext(); String parentWorkspaceName = parentCtx.getRepositoryWorkspaceName(); MultipartServiceContext ctx = (MultipartServiceContext) createServiceContext(WorkflowClient.SERVICE_NAME); WorkflowDocumentModelHandler handler = createWorkflowDocumentHandler(ctx); ctx.setRespositoryWorkspaceName( parentWorkspaceName); // find the document in the parent's workspace getRepositoryClient(ctx).get(ctx, csid, handler); result = ctx.getOutput(); } catch (Exception e) { throw bigReThrow(e, ServiceMessages.READ_FAILED + WorkflowClient.SERVICE_PAYLOAD_NAME, csid); } return result.getBytes(); }
protected Object getCommonPart() { Object result = null; try { MultipartServiceContext multiPartCtx = (MultipartServiceContext) getServiceContext(); result = multiPartCtx.getInputPart(ctx.getCommonPartLabel(), getCommonPartClass()); } catch (Exception e) { if (logger.isDebugEnabled() == true) { logger.debug("Could not extract common part from multipart input.", e); } } return result; }
@Override public RelationsCommonList extractCommonPartList(DocumentWrapper<DocumentModelList> wrapDoc) throws Exception { RelationsCommonList relList = this.extractPagingInfo(new RelationsCommonList(), wrapDoc); relList.setFieldsReturned( "subjectCsid|relationshipType|predicateDisplayName|objectCsid|uri|csid|subject|object"); ServiceContext ctx = getServiceContext(); String serviceContextPath = getServiceContextPath(); TenantBindingConfigReaderImpl tReader = ServiceMain.getInstance().getTenantBindingConfigReader(); String serviceName = getServiceContext().getServiceName().toLowerCase(); ServiceBindingType sbt = tReader.getServiceBinding(ctx.getTenantId(), serviceName); Iterator<DocumentModel> iter = wrapDoc.getWrappedObject().iterator(); while (iter.hasNext()) { DocumentModel docModel = iter.next(); RelationListItem relListItem = getRelationListItem(ctx, sbt, tReader, docModel, serviceContextPath); relList.getRelationListItem().add(relListItem); } return relList; }
@Override public DocumentHandler createDocumentHandler(ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx) throws Exception { return createDocumentHandler(ctx, ctx.getCommonPartLabel(), getCommonPartClass()); }
/** * Creates the document handler. * * @param ctx the ctx * @param commonClass the common class * @return the document handler * @throws Exception the exception */ public DocumentHandler createDocumentHandler( ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx, Class<Object> commonClass) throws Exception { return createDocumentHandler(ctx, ctx.getCommonPartLabel(), commonClass); }
/** * Gets the element data. * * @param element the element * @param type the type * @return the element data */ @SuppressWarnings("unchecked") private static Object getElementData(org.dom4j.Element element, Type type, ServiceContext ctx) throws Exception { Object result = null; String dateStr = ""; if (type.isSimpleType()) { if (isNuxeoDateType(type)) { String dateVal = element.getText(); if (dateVal == null || dateVal.trim().isEmpty()) { result = type.decode(""); } else { // Dates or date/times in any ISO 8601-based representations // directly supported by Nuxeo will be successfully decoded. result = type.decode(dateVal); // All other date or date/time values must first be converted // to a supported ISO 8601-based representation. if (result == null) { dateStr = DateTimeFormatUtils.toIso8601Timestamp(dateVal, ctx.getTenantId()); if (dateStr != null) { result = type.decode(dateStr); } else { throw new IllegalArgumentException( "Unrecognized date value '" + dateVal + "' in field '" + element.getName() + "'"); } } } } else { String textValue = element.getText(); if (textValue != null && textValue.trim().isEmpty()) { result = null; } else { result = type.decode(textValue); } } } else if (type.isListType()) { ListType ltype = (ListType) type; List<Object> list = new ArrayList<Object>(); Iterator<org.dom4j.Element> it = element.elementIterator(); while (it.hasNext()) { org.dom4j.Element el = it.next(); list.add(getElementData(el, ltype.getFieldType(), ctx)); } Type ftype = ltype.getFieldType(); if (ftype.isSimpleType()) { // these are stored as arrays Class klass = JavaTypes.getClass(ftype); if (klass.isPrimitive()) { return PrimitiveArrays.toPrimitiveArray(list, klass); } else { return list.toArray((Object[]) Array.newInstance(klass, list.size())); } } result = list; } else { ComplexType ctype = (ComplexType) type; if (ctype.getName().equals(TypeConstants.CONTENT)) { // String mimeType = element.elementText(ExportConstants.BLOB_MIME_TYPE); // String encoding = element.elementText(ExportConstants.BLOB_ENCODING); // String content = element.elementTextTrim(ExportConstants.BLOB_DATA); // if ((content == null || content.length() == 0) // && (mimeType == null || mimeType.length() == 0)) { // return null; // remove blob // } // Blob blob = null; // if (xdoc.hasExternalBlobs()) { // blob = xdoc.getBlob(content); // } // if (blob == null) { // may be the blob is embedded like a Base64 // // encoded data // byte[] bytes = Base64.decode(content); // blob = new StreamingBlob(new ByteArraySource(bytes)); // } // blob.setMimeType(mimeType); // blob.setEncoding(encoding); // return blob; } else { // a complex type Map<String, Object> map = new HashMap<String, Object>(); Iterator<org.dom4j.Element> it = element.elementIterator(); while (it.hasNext()) { org.dom4j.Element el = it.next(); String name = el.getName(); Object value = getElementData(el, ctype.getField(el.getName()).getType(), ctx); map.put(name, value); } result = map; } } return result; }
protected RelationsDocListItem createRelationsDocListItem( ServiceContext ctx, ServiceBindingType sbt, String itemCsid, TenantBindingConfigReaderImpl tReader, String documentType) throws Exception { RelationsDocListItem item = new RelationsDocListItem(); item.setDocumentType( documentType); // this one comes from the record, as documentType1, documentType2. // CSPACE-4037 REMOVING: item.setService(documentType);//this one comes from the record, as // documentType1, documentType2. Current app seems to use servicename for this. item.setCsid(itemCsid); DocumentModel itemDocModel = NuxeoUtils.getDocFromCsid(getRepositorySession(), ctx, itemCsid); // null if not found. if (itemDocModel != null) { String itemDocType = itemDocModel.getDocumentType().getName(); // CSPACE-4037 REMOVING: item.setDocumentTypeFromModel(itemDocType); //this one // comes from the nuxeo documentType // DEBUG: System.out.println("\r\n******** AuthorityItemDocumentModelHandlder documentType // **************\r\n\tdocModel: "+itemDocType+"\r\n\tpayload: "+documentType); // boolean usedDocumentTypeFromPayload = true; /*if ( ! Tools.isBlank(documentType)){ if (documentType.equals(itemDocType)){ //usedDocumentTypeFromPayload = true; } else { // Laramie20110510 CSPACE-3739 throw the exception for 3739, otherwise, don't throw it. //throw new Exception("documentType supplied was wrong. supplied: "+documentType+" required: "+itemDocType+ " itemCsid: "+itemCsid ); } } else { //usedDocumentTypeFromPayload = false; item.setDocumentType(itemDocType); } */ if (Tools.isBlank(documentType)) { item.setDocumentType(itemDocType); } // TODO: clean all the output statements out of here when CSPACE-4037 is done. // TODO: ensure that itemDocType is really the entry point, i.e. servicename==doctype // ServiceBindingType itemSbt2 = tReader.getServiceBinding(ctx.getTenantId(), itemDocType); String propName = "ERROR-FINDING-PROP-VALUE"; ServiceBindingType itemSbt = tReader.getServiceBindingForDocType(ctx.getTenantId(), itemDocType); try { propName = ServiceBindingUtils.getPropertyValue(itemSbt, ServiceBindingUtils.OBJ_NAME_PROP); String itemDocname = ServiceBindingUtils.getMappedFieldInDoc( itemSbt, ServiceBindingUtils.OBJ_NAME_PROP, itemDocModel); if (propName == null || itemDocname == null) { // System.out.println("=== prop NOT found: // "+ServiceBindingUtils.OBJ_NAME_PROP+"::"+propName+"="+itemDocname+" documentType: // "+documentType); } else { item.setName(itemDocname); // System.out.println("=== found prop : // "+ServiceBindingUtils.OBJ_NAME_PROP+"::"+propName+"="+itemDocname+" documentType: // "+documentType); } } catch (Throwable t) { System.out.println( "====Error finding objectNameProperty: " + itemDocModel + " field " + ServiceBindingUtils.OBJ_NAME_PROP + "=" + propName + " not found in itemDocType: " + itemDocType + " inner: " + t.getMessage()); } propName = "ERROR-FINDING-PROP-VALUE"; try { propName = ServiceBindingUtils.getPropertyValue(itemSbt, ServiceBindingUtils.OBJ_NUMBER_PROP); String itemDocnumber = ServiceBindingUtils.getMappedFieldInDoc( itemSbt, ServiceBindingUtils.OBJ_NUMBER_PROP, itemDocModel); if (propName == null || itemDocnumber == null) { // System.out.println("=== prop NOT found: // "+ServiceBindingUtils.OBJ_NUMBER_PROP+"::"+propName+"="+itemDocnumber // +" documentType: "+documentType); } else { item.setNumber(itemDocnumber); // System.out.println("============ found prop : // "+ServiceBindingUtils.OBJ_NUMBER_PROP+"::"+propName+"="+itemDocnumber // +" documentType: "+documentType); } } catch (Throwable t) { logger.error( "====Error finding objectNumberProperty: " + ServiceBindingUtils.OBJ_NUMBER_PROP + "=" + propName + " not found in itemDocType: " + itemDocType + " inner: " + t.getMessage()); } } else { item.setError("INVALID: related object is absent"); // Laramie20110510 CSPACE-3739 throw the exception for 3739, otherwise, don't throw it. // throw new Exception("INVALID: related object is absent "+itemCsid); } return item; }