test_class.file: core/src/test/java/net/adamcin/oakpal/core/checks/JcrPropertiesTest.java
test_class.identifier: JcrPropertiesTest
test_class.superclass: extends ProgressCheckTestBase
test_case.body: @Test
      public void testPropertyValueDeny() throws Exception {
          File playground = TestPackageUtil.prepareTestPackageFromFolder("playground.zip",
                  new File("src/test/resources/jcr_prop_constraints_playground"));
          TestUtil.testBlock(() -> {
              ProgressCheck check = new JcrProperties().newInstance(obj()
                      // intend to only check /apps/acme by ensuring scopePaths excludes /apps/aperture, which has the
                      // same jcr:title value
                      .key("scopePaths", arr(new Rule(RuleType.INCLUDE, Pattern.compile("/apps/acme"))))
                      .key("properties", arr()
                              .val(obj()
                                      .key("name", "jcr:title")
                                      .key("valueRules", arr(new Rule(RuleType.DENY, Pattern.compile("Acme"))))
                              )
                      )
                      .get());
              CheckReport report = scanWithCheck(check, playground);
              Assert.assertEquals("one violation: " + report.getViolations(), 1, report.getViolations().size());
          });
          TestUtil.testBlock(() -> {
              ProgressCheck check = new JcrProperties().newInstance(obj()
                      .key("properties", arr()
                              .val(obj()
                                      .key("name", "multiString")
                                      .key("valueRules", arr(new Rule(RuleType.DENY, Pattern.compile("two"))))
                              )
                      )
                      .get());
              CheckReport report = scanWithCheck(check, playground);
              Assert.assertEquals("two violation: " + report.getViolations(), 2, report.getViolations().size());
          });
      }
test_case.class_method_signature: JcrPropertiesTest.testPropertyValueDeny()
test_case.full_signature: @Test public void testPropertyValueDeny()
test_case.identifier: testPropertyValueDeny
test_case.invocations: prepareTestPackageFromFolder testBlock newInstance get key key obj arr compile val arr key key obj arr compile scanWithCheck assertEquals getViolations size getViolations testBlock newInstance get key obj val arr key key obj arr compile scanWithCheck assertEquals getViolations size getViolations
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testPropertyValueDeny()
focal_class.declarator: KEYS = new JsonKeys() {
          @Override
          public String scopePaths() {
              return "scopePaths";
          }
  
          @Override
          public String denyNodeTypes() {
              return "denyNodeTypes";
          }
  
          @Override
          public String scopeNodeTypes() {
              return "scopeNodeTypes";
          }
  
          @Override
          public String properties() {
              return "properties";
          }
      }
focal_class.modifier: private static final
focal_class.original_string: private static final JsonKeys KEYS = new JsonKeys() {
          @Override
          public String scopePaths() {
              return "scopePaths";
          }
  
          @Override
          public String denyNodeTypes() {
              return "denyNodeTypes";
          }
  
          @Override
          public String scopeNodeTypes() {
              return "scopeNodeTypes";
          }
  
          @Override
          public String properties() {
              return "properties";
          }
      };
focal_class.type: JsonKeys
focal_class.var_name: KEYS
focal_class.declarator: CONFIG_SCOPE_PATHS = keys().scopePaths()
focal_class.modifier: @Deprecated
      public static final
focal_class.original_string: @Deprecated
      public static final String CONFIG_SCOPE_PATHS = keys().scopePaths();
focal_class.type: String
focal_class.var_name: CONFIG_SCOPE_PATHS
focal_class.declarator: CONFIG_DENY_NODE_TYPES = keys().denyNodeTypes()
focal_class.modifier: @Deprecated
      public static final
focal_class.original_string: @Deprecated
      public static final String CONFIG_DENY_NODE_TYPES = keys().denyNodeTypes();
focal_class.type: String
focal_class.var_name: CONFIG_DENY_NODE_TYPES
focal_class.declarator: CONFIG_SCOPE_NODE_TYPES = keys().scopeNodeTypes()
focal_class.modifier: @Deprecated
      public static final
focal_class.original_string: @Deprecated
      public static final String CONFIG_SCOPE_NODE_TYPES = keys().scopeNodeTypes();
focal_class.type: String
focal_class.var_name: CONFIG_SCOPE_NODE_TYPES
focal_class.declarator: CONFIG_PROPERTIES = keys().properties()
focal_class.modifier: @Deprecated
      public static final
focal_class.original_string: @Deprecated
      public static final String CONFIG_PROPERTIES = keys().properties();
focal_class.type: String
focal_class.var_name: CONFIG_PROPERTIES
focal_class.file: core/src/main/java/net/adamcin/oakpal/core/checks/JcrProperties.java
focal_class.identifier: JcrProperties
focal_class.interfaces: implements ProgressCheckFactory
focal_class.class_method_signature: JcrProperties.keys()
focal_class.full_signature: @NotNull public static JsonKeys keys()
focal_class.identifier: keys
focal_class.modifiers: @NotNull public static
focal_class.parameters: ()
focal_class.return: JsonKeys
focal_class.signature: JsonKeys keys()
focal_class.class_method_signature: JcrProperties.newInstance(final JsonObject config)
focal_class.full_signature: @Override public ProgressCheck newInstance(final JsonObject config)
focal_class.identifier: newInstance
focal_class.modifiers: @Override public
focal_class.parameters: (final JsonObject config)
focal_class.return: ProgressCheck
focal_class.signature: ProgressCheck newInstance(final JsonObject config)
focal_method.body: @Override
      public ProgressCheck newInstance(final JsonObject config) {
          List<Rule> pathScope = Rules.fromJsonArray(arrayOrEmpty(config, keys().scopePaths()));
  
          List<String> denyNodeTypes = mapArrayOfStrings(arrayOrEmpty(config, keys().denyNodeTypes()));
          List<String> nodeTypeScope = mapArrayOfStrings(arrayOrEmpty(config, keys().scopeNodeTypes()));
          final ResourceBundleHolder resourceBundleHolder = new ResourceBundleHolder();
          List<JcrPropertyConstraints> propertyChecks = JcrPropertyConstraints
                  .fromJsonArray(resourceBundleHolder::getResourceBundle, arrayOrEmpty(config, keys().properties()));
          return new Check(pathScope, denyNodeTypes, nodeTypeScope, propertyChecks, resourceBundleHolder);
      }
focal_method.class_method_signature: JcrProperties.newInstance(final JsonObject config)
focal_method.full_signature: @Override public ProgressCheck newInstance(final JsonObject config)
focal_method.identifier: newInstance
focal_method.invocations: fromJsonArray arrayOrEmpty scopePaths keys mapArrayOfStrings arrayOrEmpty denyNodeTypes keys mapArrayOfStrings arrayOrEmpty scopeNodeTypes keys fromJsonArray arrayOrEmpty properties keys
focal_method.modifiers: @Override public
focal_method.parameters: (final JsonObject config)
focal_method.return: ProgressCheck
focal_method.signature: ProgressCheck newInstance(final JsonObject config)