use of org.hisp.dhis.i18n.I18n in project dhis2-core by dhis2.
the class I18nInterceptor method intercept.
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Action action = (Action) invocation.getAction();
I18n i18n = i18nManager.getI18n(action.getClass());
I18nFormat i18nFormat = i18nManager.getI18nFormat();
Locale locale = localeManager.getCurrentLocale();
// ---------------------------------------------------------------------
// Make the objects available for web templates
// ---------------------------------------------------------------------
Map<String, Object> i18nMap = new HashMap<>(3);
i18nMap.put(KEY_I18N, i18n);
i18nMap.put(KEY_I18N_FORMAT, i18nFormat);
i18nMap.put(KEY_LOCALE, locale);
invocation.getStack().push(i18nMap);
// ---------------------------------------------------------------------
// Set the objects in the action class if the properties exist
// ---------------------------------------------------------------------
Map<?, ?> contextMap = invocation.getInvocationContext().getContextMap();
try {
Ognl.setValue(KEY_I18N, contextMap, action, i18n);
} catch (NoSuchPropertyException ignored) {
}
try {
Ognl.setValue(KEY_I18N_FORMAT, contextMap, action, i18nFormat);
} catch (NoSuchPropertyException ignored) {
}
try {
Ognl.setValue(KEY_LOCALE, contextMap, action, locale);
} catch (NoSuchPropertyException ignored) {
}
return invocation.invoke();
}
use of org.hisp.dhis.i18n.I18n in project dhis2-core by dhis2.
the class LoadFormAction method execute.
// -------------------------------------------------------------------------
// Action implementation
// -------------------------------------------------------------------------
@Override
public String execute() throws Exception {
dataSet = dataSetService.getDataSet(dataSetId);
if (dataSet == null) {
return INPUT;
}
FormType formType = dataSet.getFormType();
if (formType.isCustom() && dataSet.hasDataEntryForm()) {
dataEntryForm = dataSet.getDataEntryForm();
customDataEntryFormCode = dataEntryFormService.prepareDataEntryFormForEntry(dataEntryForm, dataSet, i18n);
return formType.toString();
}
// ---------------------------------------------------------------------
// Section / default form
// ---------------------------------------------------------------------
List<DataElement> dataElements = new ArrayList<>(dataSet.getDataElements());
if (dataElements.isEmpty()) {
return INPUT;
}
Collections.sort(dataElements);
orderedDataElements = ListMap.getListMap(dataElements, de -> de.getDataElementCategoryCombo(dataSet));
orderedCategoryCombos = getCategoryCombos(dataElements, dataSet);
User currentUser = currentUserService.getCurrentUser();
for (CategoryCombo categoryCombo : orderedCategoryCombos) {
List<CategoryOptionCombo> optionCombos = categoryCombo.getSortedOptionCombos();
orderedCategoryOptionCombos.put(categoryCombo.getId(), optionCombos);
addOptionAccess(currentUser, optionComboAccessMap, optionCombos);
// -----------------------------------------------------------------
// Perform ordering of categories and their options so that they
// could be displayed as in the paper form. Note that the total
// number of entry cells to be generated are the multiple of options
// from each category.
// -----------------------------------------------------------------
numberOfTotalColumns.put(categoryCombo.getId(), optionCombos.size());
orderedCategories.put(categoryCombo.getId(), categoryCombo.getCategories());
Map<Long, List<CategoryOption>> optionsMap = new HashMap<>();
for (Category category : categoryCombo.getCategories()) {
optionsMap.put(category.getId(), category.getCategoryOptions());
}
orderedOptionsMap.put(categoryCombo.getId(), optionsMap);
// -----------------------------------------------------------------
// Calculating the number of times each category should be repeated
// -----------------------------------------------------------------
Map<Long, Integer> catRepeat = new HashMap<>();
Map<Long, Collection<Integer>> colRepeat = new HashMap<>();
int catColSpan = optionCombos.size();
for (Category cat : categoryCombo.getCategories()) {
int categoryOptionSize = cat.getCategoryOptions().size();
if (categoryOptionSize > 0 && catColSpan >= categoryOptionSize) {
catColSpan = catColSpan / categoryOptionSize;
int total = optionCombos.size() / (catColSpan * categoryOptionSize);
Collection<Integer> cols = new ArrayList<>(total);
for (int i = 0; i < total; i++) {
cols.add(i);
}
colRepeat.put(cat.getId(), cols);
catRepeat.put(cat.getId(), catColSpan);
}
}
catColRepeat.put(categoryCombo.getId(), colRepeat);
}
// ---------------------------------------------------------------------
// Get data entry form
// ---------------------------------------------------------------------
DataSet dsOriginal = dataSet;
if (dataSet.getFormType().isDefault()) {
DataSet dataSetCopy = new DataSet();
dataSetCopy.setUid(dataSet.getUid());
dataSetCopy.setCode(dataSet.getCode());
dataSetCopy.setName(dataSet.getName());
dataSetCopy.setShortName(dataSet.getShortName());
dataSetCopy.setRenderAsTabs(dataSet.isRenderAsTabs());
dataSetCopy.setRenderHorizontally(dataSet.isRenderHorizontally());
dataSetCopy.setDataElementDecoration(dataSet.isDataElementDecoration());
dataSetCopy.setCompulsoryDataElementOperands(dataSet.getCompulsoryDataElementOperands());
for (int i = 0; i < orderedCategoryCombos.size(); i++) {
CategoryCombo categoryCombo = orderedCategoryCombos.get(i);
String name = !categoryCombo.isDefault() ? categoryCombo.getName() : dataSetCopy.getName();
Section section = new Section();
section.setUid(CodeGenerator.generateUid());
section.setId(i);
section.setName(name);
section.setSortOrder(i);
section.setDataSet(dataSetCopy);
dataSetCopy.getSections().add(section);
section.getDataElements().addAll(orderedDataElements.get(categoryCombo));
if (i == 0) {
section.setIndicators(new ArrayList<>(dataSet.getIndicators()));
}
}
dataSet = dataSetCopy;
formType = FormType.SECTION;
}
if (CodeGenerator.isValidUid(multiOrganisationUnit)) {
OrganisationUnit organisationUnit = organisationUnitService.getOrganisationUnit(multiOrganisationUnit);
List<OrganisationUnit> organisationUnitChildren = new ArrayList<>();
for (OrganisationUnit child : organisationUnit.getChildren()) {
if (child.getDataSets().contains(dsOriginal)) {
organisationUnitChildren.add(child);
}
}
Collections.sort(organisationUnitChildren);
organisationUnits.addAll(organisationUnitChildren);
getSectionForm(dataSet);
formType = FormType.SECTION_MULTIORG;
}
getSectionForm(dataSet);
return formType.toString();
}
use of org.hisp.dhis.i18n.I18n in project dhis2-core by dhis2.
the class ProgramSqlGeneratorItemsTest method test.
private Object test(String expression, AntlrExprLiteral exprLiteral, ExpressionItemMethod itemMethod) {
Set<String> dataElementsAndAttributesIdentifiers = new LinkedHashSet<>();
dataElementsAndAttributesIdentifiers.add(BASE_UID + "a");
dataElementsAndAttributesIdentifiers.add(BASE_UID + "b");
dataElementsAndAttributesIdentifiers.add(BASE_UID + "c");
ProgramExpressionParams params = ProgramExpressionParams.builder().programIndicator(programIndicator).reportingStartDate(startDate).reportingEndDate(endDate).dataElementAndAttributeIdentifiers(dataElementsAndAttributesIdentifiers).build();
CommonExpressionVisitor visitor = CommonExpressionVisitor.builder().idObjectManager(idObjectManager).dimensionService(dimensionService).programIndicatorService(programIndicatorService).programStageService(programStageService).statementBuilder(statementBuilder).i18n(new I18n(null, null)).constantMap(constantMap).itemMap(PROGRAM_INDICATOR_ITEMS).itemMethod(itemMethod).progParams(params).build();
visitor.setExpressionLiteral(exprLiteral);
return Parser.visit(expression, visitor);
}
use of org.hisp.dhis.i18n.I18n in project dhis2-core by dhis2.
the class ProgramSqlGeneratorVariablesTest method test.
private Object test(String expression, AntlrExprLiteral exprLiteral, ProgramIndicator programIndicator) {
Set<String> dataElementsAndAttributesIdentifiers = new LinkedHashSet<>();
dataElementsAndAttributesIdentifiers.add(BASE_UID + "a");
dataElementsAndAttributesIdentifiers.add(BASE_UID + "b");
dataElementsAndAttributesIdentifiers.add(BASE_UID + "c");
ProgramExpressionParams params = ProgramExpressionParams.builder().programIndicator(programIndicator).reportingStartDate(startDate).reportingEndDate(endDate).dataElementAndAttributeIdentifiers(dataElementsAndAttributesIdentifiers).build();
subject = CommonExpressionVisitor.builder().idObjectManager(idObjectManager).dimensionService(dimensionService).programIndicatorService(programIndicatorService).programStageService(programStageService).statementBuilder(statementBuilder).i18n(new I18n(null, null)).itemMap(PROGRAM_INDICATOR_ITEMS).itemMethod(ITEM_GET_SQL).progParams(params).build();
subject.setExpressionLiteral(exprLiteral);
return Parser.visit(expression, subject);
}
use of org.hisp.dhis.i18n.I18n in project dhis2-core by dhis2.
the class DefaultCompleteDataSetRegistrationExchangeService method batchImport.
/**
* @return total number of processed CompleteDataSetRegistration objects
*/
private int batchImport(CompleteDataSetRegistrations completeRegistrations, ImportConfig config, ImportSummary summary, MetadataCallables mdCallables, MetadataCaches mdCaches) {
final User currentUser = currentUserService.getCurrentUser();
final String currentUserName = currentUser.getUsername();
final Set<OrganisationUnit> userOrgUnits = currentUserService.getCurrentUserOrganisationUnits();
final I18n i18n = i18nManager.getI18n();
BatchHandler<CompleteDataSetRegistration> batchHandler = batchHandlerFactory.createBatchHandler(CompleteDataSetRegistrationBatchHandler.class).init();
int importCount = 0, updateCount = 0, deleteCount = 0, totalCount = 0;
Date now = new Date();
while (completeRegistrations.hasNextCompleteDataSetRegistration()) {
org.hisp.dhis.dxf2.dataset.CompleteDataSetRegistration cdsr = completeRegistrations.getNextCompleteDataSetRegistration();
totalCount++;
// ---------------------------------------------------------------------
// Init meta-data properties against meta-data cache
// ---------------------------------------------------------------------
MetadataProperties mdProps = initMetaDataProperties(cdsr, mdCallables, mdCaches);
heatCaches(mdCaches, config);
// ---------------------------------------------------------------------
// Meta-data validation
// ---------------------------------------------------------------------
String storedBy;
String lastUpdatedBy;
Boolean isCompleted;
try {
// Validate CDSR meta-data properties
mdProps.validate(cdsr, config);
validateOrgUnitInUserHierarchy(mdCaches, mdProps, userOrgUnits, currentUserName);
if (config.isStrictAttrOptionCombos()) {
validateAocMatchesDataSetCc(mdProps);
}
validateAttrOptCombo(mdProps, mdCaches, config);
if (config.isStrictPeriods()) {
validateHasMatchingPeriodTypes(mdProps);
}
if (config.isStrictOrgUnits()) {
validateDataSetIsAssignedToOrgUnit(mdProps);
}
storedBy = cdsr.getStoredBy();
validateStoredBy(storedBy, i18n);
storedBy = StringUtils.isBlank(storedBy) ? currentUserName : storedBy;
lastUpdatedBy = cdsr.getLastUpdatedBy();
validateStoredBy(lastUpdatedBy, i18n);
lastUpdatedBy = StringUtils.isBlank(lastUpdatedBy) ? currentUserName : lastUpdatedBy;
cdsr.setLastUpdatedBy(lastUpdatedBy);
boolean DEFAULT_COMPLETENESS_STATUS = true;
isCompleted = cdsr.getCompleted();
isCompleted = (isCompleted == null) ? DEFAULT_COMPLETENESS_STATUS : isCompleted;
cdsr.setCompleted(isCompleted);
// TODO Check if Period is within range of data set?
} catch (ImportConflictException ic) {
summary.addConflict(ic.getImportConflict().getObject(), ic.getImportConflict().getValue());
continue;
}
// ---------------------------------------------------------------------
// Compulsory fields validation
// ---------------------------------------------------------------------
List<DataElementOperand> missingDataElementOperands = registrationService.getMissingCompulsoryFields(mdProps.dataSet, mdProps.period, mdProps.orgUnit, mdProps.attrOptCombo);
if (!missingDataElementOperands.isEmpty()) {
for (DataElementOperand dataElementOperand : missingDataElementOperands) {
summary.addConflict("dataElementOperand", dataElementOperand.getDisplayName() + " needs to be filled. It is compulsory.");
}
if (mdProps.dataSet.isCompulsoryFieldsCompleteOnly()) {
continue;
}
}
// ---------------------------------------------------------------------
// Data Sharing check
// ---------------------------------------------------------------------
List<String> errors = validateDataAccess(currentUser, mdProps);
if (!errors.isEmpty()) {
errors.forEach(error -> summary.addConflict("dataSet", error));
continue;
}
// -----------------------------------------------------------------
// Create complete data set registration
// -----------------------------------------------------------------
CompleteDataSetRegistration internalCdsr = createCompleteDataSetRegistration(cdsr, mdProps, now, storedBy);
CompleteDataSetRegistration existingCdsr = config.isSkipExistingCheck() ? null : batchHandler.findObject(internalCdsr);
ImportStrategy strategy = config.getStrategy();
boolean isDryRun = config.isDryRun();
if (!config.isSkipExistingCheck() && existingCdsr != null) {
if (strategy.isCreateAndUpdate() || strategy.isUpdate()) {
// Update existing CDSR
updateCount++;
if (!isDryRun) {
batchHandler.updateObject(internalCdsr);
}
} else if (strategy.isDelete()) {
// TODO Does 'delete' even make sense for CDSR?
// Replace existing CDSR
deleteCount++;
if (!isDryRun) {
batchHandler.deleteObject(internalCdsr);
}
}
} else {
if (strategy.isCreateAndUpdate() || strategy.isCreate()) {
if (existingCdsr != null) {
// Already exists -> update
importCount++;
if (!isDryRun) {
batchHandler.updateObject(internalCdsr);
}
} else {
// Does not exist -> add new CDSR
boolean added = false;
if (!isDryRun) {
added = batchHandler.addObject(internalCdsr);
if (added) {
sendNotifications(config, internalCdsr);
}
}
if (isDryRun || added) {
importCount++;
}
}
}
}
}
batchHandler.flush();
finalizeSummary(summary, totalCount, importCount, updateCount, deleteCount);
return totalCount;
}
Aggregations