Search in sources :

Example 6 with Form

use of com.bakdata.conquery.apiv1.forms.Form in project conquery by bakdata.

the class DefaultLabelTest method autoLabelExportForm.

@ParameterizedTest
@CsvSource({ "de,Datenexport 2020-10-30 12:37", "en,Data Export 2020-10-30 12:37" })
void autoLabelExportForm(Locale locale, String autoLabel) {
    I18n.LOCALE.set(locale);
    ExportForm form = new ExportForm();
    ManagedForm mForm = form.toManagedExecution(user, DATASET);
    mForm.setCreationTime(LocalDateTime.of(2020, 10, 30, 12, 37));
    mForm.setLabel(mForm.makeAutoLabel(getPrintSettings(locale)));
    assertThat(mForm.getLabel()).isEqualTo(autoLabel + AUTO_LABEL_SUFFIX);
    assertThat(mForm.getLabelWithoutAutoLabelSuffix()).isEqualTo(autoLabel);
}
Also used : ManagedForm(com.bakdata.conquery.models.forms.managed.ManagedForm) ExportForm(com.bakdata.conquery.apiv1.forms.export_form.ExportForm) CsvSource(org.junit.jupiter.params.provider.CsvSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 7 with Form

use of com.bakdata.conquery.apiv1.forms.Form in project conquery by bakdata.

the class FormScanner method generateFEFormConfigMap.

private Map<String, FormType> generateFEFormConfigMap() {
    // Collect backend implementations for specific forms
    Map<String, Class<? extends Form>> forms = findBackendMappingClasses();
    // Collect frontend form configurations for the specific forms
    List<FormFrontendConfigInformation> frontendConfigs = findFrontendFormConfigs();
    // Match frontend form configurations to backend implementations
    final ImmutableMap.Builder<String, FormType> result = ImmutableMap.builderWithExpectedSize(frontendConfigs.size());
    for (FormFrontendConfigInformation configInfo : frontendConfigs) {
        JsonNode configTree = configInfo.getConfigTree();
        JsonNode type = configTree.get("type");
        if (!validTypeId(type)) {
            log.warn("Found invalid type id in {}. Was: {}", configInfo.getOrigin(), type);
            continue;
        }
        // Extract complete type information (type@subtype) and type information
        String fullTypeIdentifier = type.asText();
        String typeIdentifier = CPSTypeIdResolver.truncateSubTypeInformation(fullTypeIdentifier);
        if (!forms.containsKey(typeIdentifier)) {
            log.error("Frontend form config {} (type = {}) does not map to a backend class.", configInfo, type);
            continue;
        }
        result.put(fullTypeIdentifier, new FormType(fullTypeIdentifier, configTree));
        log.info("Form[{}] from `{}` of Type[{}]", fullTypeIdentifier, configInfo.getOrigin(), forms.get(typeIdentifier).getName());
    }
    return result.build();
}
Also used : Form(com.bakdata.conquery.apiv1.forms.Form) JsonNode(com.fasterxml.jackson.databind.JsonNode) ImmutableMap(com.google.common.collect.ImmutableMap)

Example 8 with Form

use of com.bakdata.conquery.apiv1.forms.Form in project conquery by bakdata.

the class FormScanner method findBackendMappingClasses.

private static Map<String, Class<? extends Form>> findBackendMappingClasses() {
    Builder<String, Class<? extends Form>> backendClasses = ImmutableMap.builder();
    // Gather form implementations first
    for (Class<?> subclass : CPSTypeIdResolver.SCAN_RESULT.getSubclasses(Form.class.getName()).loadClasses()) {
        if (Modifier.isAbstract(subclass.getModifiers())) {
            continue;
        }
        CPSType anno = subclass.getAnnotation(CPSType.class);
        if (anno == null) {
            log.warn("Implemented Form {} has no CPSType annotation", subclass);
            continue;
        }
        backendClasses.put(anno.id(), (Class<? extends Form>) subclass);
    }
    return backendClasses.build();
}
Also used : Form(com.bakdata.conquery.apiv1.forms.Form) CPSType(com.bakdata.conquery.io.cps.CPSType)

Example 9 with Form

use of com.bakdata.conquery.apiv1.forms.Form in project conquery by bakdata.

the class FormConfigTest method getConfigs.

@Test
public void getConfigs() {
    // PREPARE
    user.addPermission(dataset.createPermission(Ability.READ.asSet()));
    user.addPermission(FormPermission.onInstance(Ability.CREATE, form.getFormType()));
    ExportForm form2 = new ExportForm();
    RelativeMode mode3 = new RelativeMode();
    form2.setTimeMode(mode3);
    mode3.setForm(form);
    mode3.setFeatures(List.of(new CQConcept()));
    mode3.setOutcomes(List.of(new CQConcept()));
    TestForm form3 = new TestForm();
    ObjectMapper mapper = FormConfigProcessor.getMAPPER();
    FormConfigAPI formConfig = FormConfigAPI.builder().formType(form.getFormType()).values(mapper.valueToTree(form)).build();
    FormConfigAPI formConfig2 = FormConfigAPI.builder().formType(form2.getFormType()).values(mapper.valueToTree(form2)).build();
    // This should not be retrieved by the user because it does not hold the Permission to create TestForms
    FormConfigAPI formConfig3 = FormConfigAPI.builder().formType(form3.getFormType()).values(mapper.valueToTree(form2)).build();
    FormConfigId formId = processor.addConfig(user, dataset, formConfig).getId();
    FormConfigId formId2 = processor.addConfig(user, dataset, formConfig2).getId();
    FormConfigId _formId3 = processor.addConfig(user, dataset, formConfig3).getId();
    FormScanner.FRONTEND_FORM_CONFIGS = Map.of(form.getFormType(), new FormType(form.getFormType(), new TextNode("dummy")));
    // EXECUTE
    Stream<FormConfigOverviewRepresentation> response = processor.getConfigsByFormType(user, dataset, Collections.emptySet());
    // CHECK
    assertThat(response).containsExactlyInAnyOrder(FormConfigOverviewRepresentation.builder().formType(form.getClass().getAnnotation(CPSType.class).id()).id(formId).label(formConfig.getLabel()).own(true).ownerName(user.getLabel()).shared(false).system(false).tags(formConfig.getTags()).createdAt(formConfig.getCreationTime().atZone(ZoneId.systemDefault())).build(), FormConfigOverviewRepresentation.builder().formType(form2.getClass().getAnnotation(CPSType.class).id()).id(formId2).label(formConfig2.getLabel()).own(true).ownerName(user.getLabel()).shared(false).system(false).tags(formConfig2.getTags()).createdAt(formConfig2.getCreationTime().atZone(ZoneId.systemDefault())).build());
}
Also used : FormConfigAPI(com.bakdata.conquery.apiv1.forms.FormConfigAPI) FormConfigOverviewRepresentation(com.bakdata.conquery.models.forms.configs.FormConfig.FormConfigOverviewRepresentation) FormType(com.bakdata.conquery.models.forms.frontendconfiguration.FormType) CQConcept(com.bakdata.conquery.apiv1.query.concept.specific.CQConcept) TextNode(com.fasterxml.jackson.databind.node.TextNode) ExportForm(com.bakdata.conquery.apiv1.forms.export_form.ExportForm) FormConfigId(com.bakdata.conquery.models.identifiable.ids.specific.FormConfigId) RelativeMode(com.bakdata.conquery.apiv1.forms.export_form.RelativeMode) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Test(org.junit.jupiter.api.Test)

Example 10 with Form

use of com.bakdata.conquery.apiv1.forms.Form in project conquery by bakdata.

the class FormConfigTest method patchConfig.

@Test
public void patchConfig() {
    // PREPARE
    user.addPermission(DatasetPermission.onInstance(Ability.READ, datasetId));
    Group group1 = new Group("test1", "test1", storage);
    storage.addGroup(group1);
    Group group2 = new Group("test2", "test2", storage);
    storage.addGroup(group2);
    group1.addMember(user);
    group2.addMember(user);
    ObjectMapper mapper = FormConfigProcessor.getMAPPER();
    JsonNode values = mapper.valueToTree(form);
    FormConfigAPI formConfig = FormConfigAPI.builder().formType(form.getFormType()).values(values).build();
    FormConfig config = processor.addConfig(user, dataset, formConfig);
    // EXECUTE PART 1
    processor.patchConfig(user, config, FormConfigPatch.builder().label("newTestLabel").tags(new String[] { "tag1", "tag2" }).groups(List.of(group1.getId())).values(new ObjectNode(mapper.getNodeFactory(), Map.of("test-Node", new TextNode("test-text")))).build());
    // CHECK PART 1
    FormConfig patchedFormExpected = new FormConfig(form.getClass().getAnnotation(CPSType.class).id(), values);
    patchedFormExpected.setDataset(dataset);
    patchedFormExpected.setFormId(config.getFormId());
    patchedFormExpected.setLabel("newTestLabel");
    patchedFormExpected.setShared(true);
    patchedFormExpected.setTags(new String[] { "tag1", "tag2" });
    patchedFormExpected.setOwner(user);
    patchedFormExpected.setValues(new ObjectNode(mapper.getNodeFactory(), Map.of("test-Node", new TextNode("test-text"))));
    final FormConfigId formId = config.getId();
    assertThat(storage.getFormConfig(formId)).usingRecursiveComparison().ignoringFields("cachedId", FormConfig.Fields.creationTime).isEqualTo(patchedFormExpected);
    assertThat(storage.getGroup(group1.getId()).getPermissions()).contains(FormConfigPermission.onInstance(AbilitySets.SHAREHOLDER, formId));
    assertThat(storage.getGroup(group2.getId()).getPermissions()).doesNotContain(FormConfigPermission.onInstance(AbilitySets.SHAREHOLDER, formId));
    // EXECUTE PART 2 (Unshare)
    processor.patchConfig(user, config, FormConfigPatch.builder().groups(List.of()).build());
    // CHECK PART 2
    patchedFormExpected.setShared(false);
    assertThat(storage.getFormConfig(formId)).usingRecursiveComparison().ignoringFields("cachedId", FormConfig.Fields.creationTime).isEqualTo(patchedFormExpected);
    assertThat(storage.getGroup(group1.getId()).getPermissions()).doesNotContain(FormConfigPermission.onInstance(AbilitySets.SHAREHOLDER, formId));
    assertThat(storage.getGroup(group2.getId()).getPermissions()).doesNotContain(FormConfigPermission.onInstance(AbilitySets.SHAREHOLDER, formId));
}
Also used : Group(com.bakdata.conquery.models.auth.entities.Group) FormConfigAPI(com.bakdata.conquery.apiv1.forms.FormConfigAPI) FormConfig(com.bakdata.conquery.models.forms.configs.FormConfig) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) JsonNode(com.fasterxml.jackson.databind.JsonNode) TextNode(com.fasterxml.jackson.databind.node.TextNode) FormConfigId(com.bakdata.conquery.models.identifiable.ids.specific.FormConfigId) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Test(org.junit.jupiter.api.Test)

Aggregations

ExportForm (com.bakdata.conquery.apiv1.forms.export_form.ExportForm)5 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)4 Test (org.junit.jupiter.api.Test)4 FormConfigAPI (com.bakdata.conquery.apiv1.forms.FormConfigAPI)3 CQConcept (com.bakdata.conquery.apiv1.query.concept.specific.CQConcept)3 JsonNode (com.fasterxml.jackson.databind.JsonNode)3 Form (com.bakdata.conquery.apiv1.forms.Form)2 AbsoluteMode (com.bakdata.conquery.apiv1.forms.export_form.AbsoluteMode)2 User (com.bakdata.conquery.models.auth.entities.User)2 FormConfig (com.bakdata.conquery.models.forms.configs.FormConfig)2 FormConfigId (com.bakdata.conquery.models.identifiable.ids.specific.FormConfigId)2 TextNode (com.fasterxml.jackson.databind.node.TextNode)2 ProtoUser (com.bakdata.conquery.apiv1.auth.ProtoUser)1 RelativeMode (com.bakdata.conquery.apiv1.forms.export_form.RelativeMode)1 Query (com.bakdata.conquery.apiv1.query.Query)1 CPSType (com.bakdata.conquery.io.cps.CPSType)1 Group (com.bakdata.conquery.models.auth.entities.Group)1 ConqueryPermission (com.bakdata.conquery.models.auth.permissions.ConqueryPermission)1 CDateRange (com.bakdata.conquery.models.common.daterange.CDateRange)1 Dataset (com.bakdata.conquery.models.datasets.Dataset)1