Search in sources :

Example 16 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class AdvancedExportController method metaFieldDomain.

public void metaFieldDomain(ActionRequest request, ActionResponse response) throws ClassNotFoundException {
    AdvancedExportLine adv = request.getContext().asType(AdvancedExportLine.class);
    MetaModel metaModel = Beans.get(MetaModelRepository.class).findByName(adv.getCurrentDomain());
    List<MetaField> metaFields = metaModel.getMetaFields();
    List<Long> metaFieldList = new ArrayList<>();
    if (metaFields != null) {
        Class<?> klass = Class.forName(metaModel.getFullName());
        Mapper mapper = Mapper.of(klass);
        for (MetaField field : metaFields) {
            if (!mapper.getProperty(field.getName()).isTransient()) {
                metaFieldList.add(field.getId());
            }
        }
    }
    metaFieldList.add(0L);
    response.setAttr("metaField", "domain", "self.id in (" + Joiner.on(",").join(metaFieldList) + ")");
}
Also used : Mapper(com.axelor.db.mapper.Mapper) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) MetaModel(com.axelor.meta.db.MetaModel) MetaModelRepository(com.axelor.meta.db.repo.MetaModelRepository) AdvancedExportLine(com.axelor.apps.base.db.AdvancedExportLine) MetaField(com.axelor.meta.db.MetaField) ArrayList(java.util.ArrayList)

Example 17 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class AdvancedExportController method createCriteria.

@SuppressWarnings("unchecked")
private List<Long> createCriteria(ActionRequest request, AdvancedExport advancedExport) {
    if (request.getContext().get("_criteria") != null) {
        if (request.getContext().get("_criteria").toString().startsWith("[")) {
            String ids = request.getContext().get("_criteria").toString();
            return Splitter.on(", ").splitToList(ids.substring(1, ids.length() - 1)).stream().map(id -> Long.valueOf(id.toString())).collect(Collectors.toList());
        } else {
            ObjectMapper mapper = new ObjectMapper();
            ActionRequest parentRequest = mapper.convertValue(request.getContext().get("_criteria"), ActionRequest.class);
            Class<? extends Model> klass = (Class<? extends Model>) parentRequest.getBeanClass();
            Filter filter = Beans.get(AdvancedExportService.class).getJpaSecurityFilter(advancedExport.getMetaModel());
            Stream<? extends Model> listObj = parentRequest.getCriteria().createQuery(klass, filter).fetchSteam(advancedExport.getMaxExportLimit());
            return listObj.map(it -> it.getId()).collect(Collectors.toList());
        }
    }
    return null;
}
Also used : MetaModelRepository(com.axelor.meta.db.repo.MetaModelRepository) Filter(com.axelor.rpc.filter.Filter) ActionView(com.axelor.meta.schema.actions.ActionView) LoggerFactory(org.slf4j.LoggerFactory) HashMap(java.util.HashMap) Mapper(com.axelor.db.mapper.Mapper) AdvancedExportLine(com.axelor.apps.base.db.AdvancedExportLine) ArrayList(java.util.ArrayList) Strings(com.google.common.base.Strings) AdvancedExport(com.axelor.apps.base.db.AdvancedExport) AxelorException(com.axelor.exception.AxelorException) ActionResponse(com.axelor.rpc.ActionResponse) Map(java.util.Map) I18n(com.axelor.i18n.I18n) Inflector(com.axelor.common.Inflector) AdvancedExportRepository(com.axelor.apps.base.db.repo.AdvancedExportRepository) ActionRequest(com.axelor.rpc.ActionRequest) Splitter(com.google.common.base.Splitter) MetaFiles(com.axelor.meta.MetaFiles) Logger(org.slf4j.Logger) Model(com.axelor.db.Model) MetaField(com.axelor.meta.db.MetaField) MethodHandles(java.lang.invoke.MethodHandles) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) TraceBackService(com.axelor.exception.service.TraceBackService) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) Collectors(java.util.stream.Collectors) File(java.io.File) AdvancedExportService(com.axelor.apps.base.service.advancedExport.AdvancedExportService) MetaFile(com.axelor.meta.db.MetaFile) MetaModel(com.axelor.meta.db.MetaModel) List(java.util.List) Stream(java.util.stream.Stream) Beans(com.axelor.inject.Beans) MetaFieldRepository(com.axelor.meta.db.repo.MetaFieldRepository) IExceptionMessage(com.axelor.apps.base.exceptions.IExceptionMessage) Context(com.axelor.rpc.Context) Joiner(com.google.common.base.Joiner) Singleton(com.google.inject.Singleton) ActionRequest(com.axelor.rpc.ActionRequest) Filter(com.axelor.rpc.filter.Filter) Model(com.axelor.db.Model) MetaModel(com.axelor.meta.db.MetaModel) AdvancedExportService(com.axelor.apps.base.service.advancedExport.AdvancedExportService) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 18 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class ConfiguratorCreatorImportServiceImpl method updateOtherFieldsInAttribute.

/**
 * Update the configurator id in other fields of the attribute.
 *
 * @param creator
 * @param attribute attribute to update
 */
protected void updateOtherFieldsInAttribute(ConfiguratorCreator creator, MetaJsonField attribute) {
    try {
        List<Field> fieldsToUpdate = Arrays.stream(attribute.getClass().getDeclaredFields()).filter(field -> field.getType().equals(String.class)).collect(Collectors.toList());
        for (Field field : fieldsToUpdate) {
            Mapper mapper = Mapper.of(attribute.getClass());
            Method getter = mapper.getGetter(field.getName());
            String fieldString = (String) getter.invoke(attribute);
            if (fieldString != null && fieldString.contains("_")) {
                Method setter = mapper.getSetter(field.getName());
                String updatedFieldString = fieldString.substring(0, fieldString.lastIndexOf('_')) + '_' + creator.getId();
                setter.invoke(attribute, updatedFieldString);
            }
        }
    } catch (Exception e) {
        TraceBackService.trace(e);
    }
}
Also used : Arrays(java.util.Arrays) Inject(com.google.inject.Inject) Mapper(com.axelor.db.mapper.Mapper) ConfiguratorCreator(com.axelor.apps.sale.db.ConfiguratorCreator) Transactional(com.google.inject.persist.Transactional) AxelorException(com.axelor.exception.AxelorException) Files(com.google.common.io.Files) MetaJsonField(com.axelor.meta.db.MetaJsonField) Method(java.lang.reflect.Method) Path(java.nio.file.Path) XMLImporter(com.axelor.data.xml.XMLImporter) MetaFiles(com.axelor.meta.MetaFiles) IOUtil(org.apache.xmlbeans.impl.common.IOUtil) ConfiguratorFormula(com.axelor.apps.sale.db.ConfiguratorFormula) Model(com.axelor.db.Model) TraceBackService(com.axelor.exception.service.TraceBackService) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) FileUtils(org.apache.commons.io.FileUtils) FileInputStream(java.io.FileInputStream) Field(java.lang.reflect.Field) Listener(com.axelor.data.Listener) Collectors(java.util.stream.Collectors) File(java.io.File) List(java.util.List) InputStream(java.io.InputStream) MetaJsonField(com.axelor.meta.db.MetaJsonField) Field(java.lang.reflect.Field) Mapper(com.axelor.db.mapper.Mapper) Method(java.lang.reflect.Method) AxelorException(com.axelor.exception.AxelorException) IOException(java.io.IOException)

Example 19 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class ConfiguratorCreatorServiceImpl method setContextToJsonField.

/**
 * Set the context field to a json field. Allows to limit the json field to the configurator
 * having the right configurator creator.
 *
 * @param creator
 * @param field
 */
protected void setContextToJsonField(ConfiguratorCreator creator, MetaJsonField field) {
    final String fieldName = "configuratorCreator";
    final Class<?> modelClass;
    final String modelName = field.getModel();
    try {
        modelClass = Class.forName(modelName);
    } catch (ClassNotFoundException e) {
        // this should not happen
        TraceBackService.trace(e);
        return;
    }
    final Mapper mapper = Mapper.of(modelClass);
    final Property property = mapper.getProperty(fieldName);
    final String target = property == null ? null : property.getTarget().getName();
    final String targetName = property == null ? null : property.getTargetName();
    field.setContextField(fieldName);
    field.setContextFieldTarget(target);
    field.setContextFieldTargetName(targetName);
    field.setContextFieldValue(creator.getId().toString());
    field.setContextFieldTitle(creator.getName());
}
Also used : Mapper(com.axelor.db.mapper.Mapper) Property(com.axelor.db.mapper.Property)

Example 20 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class ConfiguratorServiceImpl method fetchManyToManyField.

protected void fetchManyToManyField(Model parentModel, Set<? extends Model> values, MetaField metaField) throws AxelorException {
    if (values != null) {
        Mapper mapper = Mapper.of(parentModel.getClass());
        try {
            String className = MetaTool.computeFullClassName(metaField);
            Set<Model> dbValues = new HashSet<>();
            for (Model value : values) {
                Model dbValue = JPA.find((Class<Model>) Class.forName(className), value.getId());
                dbValues.add(dbValue);
            }
            mapper.set(parentModel, metaField.getName(), dbValues);
        } catch (Exception e) {
            throw new AxelorException(Configurator.class, TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, e.getMessage());
        }
    }
}
Also used : Mapper(com.axelor.db.mapper.Mapper) AxelorException(com.axelor.exception.AxelorException) Configurator(com.axelor.apps.sale.db.Configurator) Model(com.axelor.db.Model) AxelorException(com.axelor.exception.AxelorException) MissingPropertyException(groovy.lang.MissingPropertyException) InvocationTargetException(java.lang.reflect.InvocationTargetException) HashSet(java.util.HashSet)

Aggregations

Mapper (com.axelor.db.mapper.Mapper)44 Property (com.axelor.db.mapper.Property)19 AxelorException (com.axelor.exception.AxelorException)13 Model (com.axelor.db.Model)12 MetaField (com.axelor.meta.db.MetaField)10 ArrayList (java.util.ArrayList)10 MetaModel (com.axelor.meta.db.MetaModel)7 File (java.io.File)6 IOException (java.io.IOException)6 FileField (com.axelor.apps.base.db.FileField)5 Transactional (com.google.inject.persist.Transactional)5 TraceBackService (com.axelor.exception.service.TraceBackService)4 MetaFiles (com.axelor.meta.MetaFiles)4 MetaModelRepository (com.axelor.meta.db.repo.MetaModelRepository)4 List (java.util.List)4 Inflector (com.axelor.common.Inflector)3 MetaFile (com.axelor.meta.db.MetaFile)3 MetaJsonField (com.axelor.meta.db.MetaJsonField)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)3 Strings (com.google.common.base.Strings)3