@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); } }
@Override public ValidCharactersConstraint deriveValidCharactersConstraint(AttributeDefinition attrDef) { ValidCharactersConstraint validCharactersConstraint = null; // First - see if one was defined in the metadata (provided by krad-data module annotations) if (attrDef.getDataObjectAttribute() != null) { if (StringUtils.isNotBlank( attrDef.getDataObjectAttribute().getValidCharactersConstraintBeanName())) { Object consObj = dataDictionaryService.getDictionaryBean( attrDef.getDataObjectAttribute().getValidCharactersConstraintBeanName()); if (consObj != null && consObj instanceof ValidCharactersConstraint) { validCharactersConstraint = (ValidCharactersConstraint) consObj; } } } // if not, make an intelligent guess from the data type if (validCharactersConstraint == null) { if (attrDef.getDataType() != null) { if (attrDef.getDataType() == DataType.CURRENCY) { validCharactersConstraint = (ValidCharactersConstraint) dataDictionaryService.getDictionaryBean(CURRENCY_PATTERN_CONSTRAINT); } else if (attrDef.getDataType() == DataType.PRECISE_DECIMAL) { validCharactersConstraint = (ValidCharactersConstraint) dataDictionaryService.getDictionaryBean(BIG_DECIMAL_PATTERN_CONSTRAINT); } else if (attrDef.getDataType().isNumeric()) { validCharactersConstraint = (ValidCharactersConstraint) dataDictionaryService.getDictionaryBean(FLOATING_POINT_PATTERN_CONSTRAINT); } else if (attrDef.getDataType().isTemporal()) { if (attrDef.getDataType() == DataType.DATE) { validCharactersConstraint = (ValidCharactersConstraint) dataDictionaryService.getDictionaryBean(DATE_PATTERN_CONSTRAINT); } else if (attrDef.getDataType() == DataType.TIMESTAMP) { validCharactersConstraint = (ValidCharactersConstraint) dataDictionaryService.getDictionaryBean(TIMESTAMP_PATTERN_CONSTRAINT); } } } } // default to UTF8 if (validCharactersConstraint == null) { validCharactersConstraint = (ValidCharactersConstraint) dataDictionaryService.getDictionaryBean(ANY_CHARACTER_PATTERN_CONSTRAINT); } return validCharactersConstraint; }
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); } }
@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); } }
@Override public Control deriveControlAttributeFromMetadata(AttributeDefinition attrDef) { DataObjectAttribute dataObjectAttribute = attrDef.getDataObjectAttribute(); Control c = getControlInstance(attrDef, dataObjectAttribute); // If we a have a control...we should - but just in case - don't want to be too dependent on // assumptions of the above code if (c != null) { customizeControlInstance(c, attrDef, dataObjectAttribute); } return c; }