/** * Handles exporting the BusinessObject for this Inquiry to XML if it has a custom XML exporter * available. */ @RequestMapping(params = "methodToCall=export") public ModelAndView export( @ModelAttribute("KualiForm") UifFormBase form, BindingResult result, HttpServletRequest request, HttpServletResponse response) throws Exception { InquiryForm inquiryForm = (InquiryForm) form; Object dataObject = inquiryForm.getDataObject(); if (dataObject != null) { DataObjectEntry dataObjectEntry = KRADServiceLocatorWeb.getDataDictionaryService() .getDataDictionary() .getDataObjectEntry(inquiryForm.getDataObjectClassName()); Class<? extends Exporter> exporterClass = dataObjectEntry.getExporterClass(); if (exporterClass != null) { Exporter exporter = exporterClass.newInstance(); response.setContentType(KRADConstants.XML_MIME_TYPE); response.setHeader("Content-disposition", "attachment; filename=export.xml"); exporter.export( dataObjectEntry.getDataObjectClass(), Collections.singletonList(dataObject), KRADConstants.XML_FORMAT, response.getOutputStream()); } } return null; }
@SuppressWarnings("unchecked") @Override public List<String> listPrimaryKeyFieldNames(Class<?> type) { List<String> keys = new ArrayList<String>(); if (type == null) { return keys; } if (isPersistable(type)) { keys = persistenceStructureService.listPrimaryKeyFieldNames(type); } else { ModuleService responsibleModuleService = kualiModuleService.getResponsibleModuleService(type); if (responsibleModuleService != null && responsibleModuleService.isExternalizable(type)) { keys = responsibleModuleService.listPrimaryKeyFieldNames(type); } else { // check the Data Dictionary for PK's of non PBO/EBO DataObjectEntry dataObjectEntry = dataDictionaryService.getDataDictionary().getDataObjectEntry(type.getName()); if (dataObjectEntry != null) { List<String> pks = dataObjectEntry.getPrimaryKeys(); if (pks != null) { keys = pks; } } else { LOG.warn( "Unable to retrieve data object entry for non-persistable KNS-managed class: " + type.getName()); } } } return keys; }
/** @see org.kuali.rice.krad.service.LegacyDataAdapter */ @Override public String getTitleAttribute(Class<?> dataObjectClass) { String titleAttribute = null; DataObjectEntry entry = getDataObjectEntry(dataObjectClass); if (entry != null) { titleAttribute = entry.getTitleAttribute(); } return titleAttribute; }
/** * @see * org.kuali.rice.krad.service.DataDictionaryService#getGroupByAttributesForEffectiveDating(java.lang.Class) */ public List<String> getGroupByAttributesForEffectiveDating(Class dataObjectClass) { List<String> groupByList = null; DataObjectEntry objectEntry = getDataDictionary().getDataObjectEntry(dataObjectClass.getName()); if (objectEntry != null) { groupByList = objectEntry.getGroupByAttributesForEffectiveDating(); } return groupByList; }
@SuppressWarnings("unchecked") protected void addCollectionSectionsToInquiryView( InquiryView view, DataObjectEntry dataObjectEntry) { for (CollectionDefinition coll : dataObjectEntry.getCollections()) { // Create a new section DataObjectEntry collectionEntry = dataDictionaryService.getDataDictionary().getDataObjectEntry(coll.getDataObjectClass()); // Extract the key fields on the collection which are linked to the parent. // When auto-generating the Inquiry Collection table, we want to exclude those. Collection<String> collectionFieldsLinkedToParent = new HashSet<String>(); if (coll.getDataObjectCollection() != null) { for (DataObjectAttributeRelationship rel : coll.getDataObjectCollection().getAttributeRelationships()) { collectionFieldsLinkedToParent.add(rel.getChildAttributeName()); } } if (collectionEntry == null) { LOG.warn( "Unable to find DataObjectEntry for collection class: " + coll.getDataObjectClass()); continue; } CollectionGroup section = createCollectionInquirySection(coll.getName(), coll.getLabel()); try { section.setCollectionObjectClass(Class.forName(coll.getDataObjectClass())); } catch (ClassNotFoundException e) { LOG.warn( "Unable to set class on collection section - class not found: " + coll.getDataObjectClass()); } section.setPropertyName(coll.getName()); // summary title : collection object label // Summary fields : PK fields? // add the attributes to the section for (AttributeDefinition attr : collectionEntry.getAttributes()) { boolean dontDisplay = hasHintOfType(attr.getDataObjectAttribute(), UifDisplayHintType.NO_INQUIRY); dontDisplay |= (attr.getControlField() instanceof HiddenControl); // Auto-exclude fields linked to the parent object dontDisplay |= collectionFieldsLinkedToParent.contains(attr.getName()); if (dontDisplay) { continue; } DataField dataField = ComponentFactory.getDataField(); dataField.setPropertyName(attr.getName()); ((List<Component>) section.getItems()).add(dataField); } ((List<Group>) view.getItems()).add(section); } }
/** @see org.kuali.rice.krad.service.LegacyDataAdapter#areNotesSupported(Class) */ @Override public boolean areNotesSupported(Class<?> dataObjectClass) { boolean hasNotesSupport = false; DataObjectEntry entry = getDataObjectEntry(dataObjectClass); if (entry != null) { hasNotesSupport = entry.isBoNotesEnabled(); } return hasNotesSupport; }
@SuppressWarnings("unchecked") protected void addAttributeSectionsToInquiryView( InquiryView view, DataObjectEntry dataObjectEntry) { // Set up data structures to manage the creation of sections Map<String, Group> inquirySectionsById = new HashMap<String, Group>(); Group currentGroup = createInquirySection("default", dataObjectEntry.getObjectLabel()); inquirySectionsById.put(currentGroup.getId(), currentGroup); ((List<Group>) view.getItems()).add(currentGroup); // Loop over the attributes on the data object, adding them into the inquiry // If we have an @Section notation, switch to the section, creating if the ID is unknown List<Component> items = (List<Component>) currentGroup.getItems(); // needed to deal with generics issue for (AttributeDefinition attr : dataObjectEntry.getAttributes()) { boolean dontDisplay = hasHintOfType(attr.getDataObjectAttribute(), UifDisplayHintType.NO_INQUIRY); dontDisplay |= (attr.getControlField() instanceof HiddenControl); // Check for a section hint // Create or retrieve existing section as determined by the ID on the annotation UifDisplayHint sectionHint = getHintOfType(attr.getDataObjectAttribute(), UifDisplayHintType.SECTION); if (sectionHint != null) { if (StringUtils.isNotBlank(sectionHint.id())) { currentGroup = inquirySectionsById.get(sectionHint.id()); if (currentGroup == null) { String sectionLabel = sectionHint.label(); if (StringUtils.isBlank(sectionLabel)) { sectionLabel = deriveHumanFriendlyNameFromPropertyName(sectionHint.id()); } currentGroup = createInquirySection(sectionHint.id(), sectionHint.label()); inquirySectionsById.put(currentGroup.getId(), currentGroup); ((List<Group>) view.getItems()).add(currentGroup); } } else { LOG.warn("SECTION UifDisplayHint given without an ID - assuming 'default'"); currentGroup = inquirySectionsById.get("default"); } items = (List<Component>) currentGroup.getItems(); } // This is checked after the section test, since the @Section annotation // would be on the FK field if (dontDisplay) { continue; } DataField dataField = ComponentFactory.getDataField(); dataField.setPropertyName(attr.getName()); dataField.setLabel(attr.getLabel()); items.add(dataField); } }
/** * @see * org.kuali.rice.krad.uif.service.UifDefaultingService#deriveLookupViewFromMetadata(org.kuali.rice.krad.datadictionary.DataObjectEntry) */ @Override public LookupView deriveLookupViewFromMetadata(DataObjectEntry dataObjectEntry) { LookupView view = ComponentFactory.getLookupView(); view.setHeaderText(dataObjectEntry.getObjectLabel() + " Lookup"); view.setDataObjectClass(dataObjectEntry.getDataObjectClass()); view.setCriteriaFields(new ArrayList<Component>()); view.setResultFields(new ArrayList<Component>()); view.setDefaultSortAttributeNames(dataObjectEntry.getPrimaryKeys()); addAttributesToLookupCriteria(view, dataObjectEntry); addAttributesToLookupResults(view, dataObjectEntry); return view; }
protected void addAttributesToLookupResults(LookupView view, DataObjectEntry dataObjectEntry) { AttributeDefinition activeAttribute = null; for (AttributeDefinition attr : dataObjectEntry.getAttributes()) { // Check if we have been told not to display this attribute here boolean dontDisplay = hasHintOfType(attr.getDataObjectAttribute(), UifDisplayHintType.NO_LOOKUP_RESULT); dontDisplay |= (attr.getControlField() instanceof HiddenControl); if (dontDisplay) { continue; } if (attr.getName().equals(KRADPropertyConstants.ACTIVE)) { activeAttribute = attr; continue; // leave until the end of the lookup results } DataField field = ComponentFactory.getDataField(); field.setPropertyName(attr.getName()); view.getResultFields().add(field); } // If there was one, add the active attribute at the end if (activeAttribute != null) { DataField field = ComponentFactory.getDataField(); field.setPropertyName(activeAttribute.getName()); view.getResultFields().add(field); } }
/** * @see * org.kuali.rice.krad.uif.service.UifDefaultingService#deriveInquiryViewFromMetadata(org.kuali.rice.krad.datadictionary.DataObjectEntry) */ @Override public InquiryView deriveInquiryViewFromMetadata(DataObjectEntry dataObjectEntry) { // Create the main view object and set the title and BO class InquiryView view = ComponentFactory.getInquiryView(); view.setHeaderText(dataObjectEntry.getObjectLabel()); view.setDataObjectClassName(dataObjectEntry.getDataObjectClass()); addAttributeSectionsToInquiryView(view, dataObjectEntry); // TODO: if there are updatable reference objects, include sections for them // If there are collections on the object, include sections for them addCollectionSectionsToInquiryView(view, dataObjectEntry); return view; }