use of org.compiere.model.I_M_AttributeInstance in project metasfresh-webui-api by metasfresh.
the class ASIRepository method loadReadonly.
/**
* Retrieves {@link ASIDocument} for given ASI. The document will be readonly and not save-able.
*
* IMPORTANT: the retrieved document is not cached, so next time it will be retrieved again
*
* @param attributeSetInstanceId
* @return ASI document
*/
public ASIDocument loadReadonly(final int attributeSetInstanceId) {
if (attributeSetInstanceId <= 0) {
throw new EntityNotFoundException("ASI " + attributeSetInstanceId);
}
final ASIEditingInfo info = ASIEditingInfo.readonlyASI(attributeSetInstanceId);
//
// Get the ASI descriptor
final ASIDescriptor asiDescriptor = descriptorsFactory.getASIDescriptor(info);
//
// Create the new ASI document
final Document asiDocData = Document.builder(asiDescriptor.getEntityDescriptor()).initializeAsNewDocument(() -> DocumentId.of(attributeSetInstanceId), VERSION_DEFAULT).build();
//
// If we have a template ASI, populate the ASI document from it
final MAttributeSetInstance templateASI = info.getM_AttributeSetInstance();
for (final I_M_AttributeInstance fromAI : Services.get(IAttributeDAO.class).retrieveAttributeInstances(templateASI)) {
loadASIDocumentField(asiDocData, fromAI);
}
//
// Validate, log and add the new ASI document to our index
asiDocData.checkAndGetValidStatus();
logger.trace("Created from ASI={}: {}", templateASI, asiDocData);
final ASIDocument asiDoc = new ASIDocument(asiDescriptor, asiDocData);
return asiDoc.copy(CopyMode.CheckInReadonly, NullDocumentChangesCollector.instance);
}
use of org.compiere.model.I_M_AttributeInstance in project metasfresh-webui-api by metasfresh.
the class ASIRepository method createNewFrom.
public ASIDocument createNewFrom(final JSONCreateASIRequest request) {
final ASIEditingInfo info = createASIEditingInfo(request);
//
// Get the ASI descriptor
final ASIDescriptor asiDescriptor = descriptorsFactory.getASIDescriptor(info);
//
// Create the new ASI document
final Document asiDocData = Document.builder(asiDescriptor.getEntityDescriptor()).initializeAsNewDocument(nextASIDocId, VERSION_DEFAULT).build();
//
// If we have a template ASI, populate the ASI document from it
final MAttributeSetInstance templateASI = info.getM_AttributeSetInstance();
if (templateASI != null) {
for (final I_M_AttributeInstance fromAI : Services.get(IAttributeDAO.class).retrieveAttributeInstances(templateASI)) {
loadASIDocumentField(asiDocData, fromAI);
}
}
//
// Validate, log and add the new ASI document to our index
asiDocData.checkAndGetValidStatus();
logger.trace("Created from ASI={}: {}", templateASI, asiDocData);
final ASIDocument asiDoc = new ASIDocument(asiDescriptor, asiDocData);
commit(asiDoc);
return asiDoc;
}
use of org.compiere.model.I_M_AttributeInstance in project metasfresh-webui-api by metasfresh.
the class ASIDescriptorFactory method createDocumentFieldDescriptor.
private DocumentFieldDescriptor.Builder createDocumentFieldDescriptor(final I_M_Attribute attribute) {
final int attributeId = attribute.getM_Attribute_ID();
final String fieldName = attribute.getValue();
final String attributeValueType = attribute.getAttributeValueType();
final Class<?> valueClass;
final DocumentFieldWidgetType widgetType;
final Function<I_M_AttributeInstance, Object> readMethod;
final BiConsumer<I_M_AttributeInstance, IDocumentFieldView> writeMethod;
LookupDescriptor lookupDescriptor = null;
if (X_M_Attribute.ATTRIBUTEVALUETYPE_Date.equals(attributeValueType)) {
valueClass = java.util.Date.class;
widgetType = DocumentFieldWidgetType.Date;
readMethod = I_M_AttributeInstance::getValueDate;
writeMethod = (aiRecord, field) -> aiRecord.setValueDate(TimeUtil.asTimestamp(field.getValueAs(java.util.Date.class)));
} else if (X_M_Attribute.ATTRIBUTEVALUETYPE_List.equals(attributeValueType)) {
valueClass = StringLookupValue.class;
widgetType = DocumentFieldWidgetType.List;
readMethod = I_M_AttributeInstance::getValue;
writeMethod = ASIAttributeFieldBinding::writeValueFromLookup;
lookupDescriptor = getLookupDescriptor(attribute);
} else if (X_M_Attribute.ATTRIBUTEVALUETYPE_Number.equals(attributeValueType)) {
valueClass = BigDecimal.class;
widgetType = DocumentFieldWidgetType.Number;
readMethod = I_M_AttributeInstance::getValueNumber;
writeMethod = (aiRecord, field) -> aiRecord.setValueNumber(field.getValueAs(BigDecimal.class));
} else if (X_M_Attribute.ATTRIBUTEVALUETYPE_StringMax40.equals(attributeValueType)) {
valueClass = String.class;
widgetType = DocumentFieldWidgetType.Text;
readMethod = I_M_AttributeInstance::getValue;
writeMethod = (aiRecord, field) -> aiRecord.setValue(field.getValueAs(String.class));
} else {
throw new IllegalArgumentException("@NotSupported@ @AttributeValueType@=" + attributeValueType + ", @M_Attribute_ID@=" + attribute);
}
final ILogicExpression readonlyLogic = ConstantLogicExpression.FALSE;
final ILogicExpression displayLogic = ConstantLogicExpression.TRUE;
final ILogicExpression mandatoryLogic = ConstantLogicExpression.of(attribute.isMandatory());
final Optional<IExpression<?>> defaultValueExpr = Optional.empty();
return DocumentFieldDescriptor.builder(fieldName).setCaption(attribute.getName()).setDescription(attribute.getDescription()).setValueClass(valueClass).setWidgetType(widgetType).setLookupDescriptorProvider(lookupDescriptor).setDefaultValueExpression(defaultValueExpr).setReadonlyLogic(readonlyLogic).setDisplayLogic(displayLogic).setMandatoryLogic(mandatoryLogic).addCharacteristic(Characteristic.PublicField).setDataBinding(new ASIAttributeFieldBinding(attributeId, fieldName, attribute.isMandatory(), readMethod, writeMethod));
}
Aggregations