List of usage examples for org.apache.lucene.util.automaton Automaton isDeterministic
public boolean isDeterministic()
From source file:com.lucene.MyPrefixQuery.java
License:Apache License
public static Automaton toAutomaton(BytesRef prefix) { final int numStatesAndTransitions = prefix.length + 1; final Automaton automaton = new Automaton(numStatesAndTransitions, numStatesAndTransitions); int lastState = automaton.createState(); for (int i = 0; i < prefix.length; i++) { int state = automaton.createState(); automaton.addTransition(lastState, state, prefix.bytes[prefix.offset + i] & 0xff); lastState = state;/*from w w w . ja v a 2s. c o m*/ } automaton.setAccept(lastState, true); automaton.addTransition(lastState, lastState, 0, 255); automaton.finishState(); assert automaton.isDeterministic(); return automaton; }
From source file:org.elasticsearch.xpack.core.security.authz.permission.FieldPermissions.java
License:Open Source License
/** Constructor that enables field-level security based on include/exclude rules. Exclude rules * have precedence over include rules. */ FieldPermissions(FieldPermissionsDefinition fieldPermissionsDefinition, Automaton permittedFieldsAutomaton) { if (permittedFieldsAutomaton.isDeterministic() == false && permittedFieldsAutomaton.getNumStates() > 1) { // we only accept deterministic automata so that the CharacterRunAutomaton constructor // directly wraps the provided automaton throw new IllegalArgumentException("Only accepts deterministic automata"); }/* w w w . j a v a 2 s .co m*/ this.fieldPermissionsDefinition = fieldPermissionsDefinition; this.originalAutomaton = permittedFieldsAutomaton; this.permittedFieldsAutomaton = new CharacterRunAutomaton(permittedFieldsAutomaton); // we cache the result of isTotal since this might be a costly operation this.permittedFieldsAutomatonIsTotal = Operations.isTotal(permittedFieldsAutomaton); long ramBytesUsed = BASE_FIELD_PERM_DEF_BYTES; for (FieldGrantExcludeGroup group : fieldPermissionsDefinition.getFieldGrantExcludeGroups()) { ramBytesUsed += BASE_FIELD_GROUP_BYTES + BASE_HASHSET_ENTRY_SIZE; if (group.getGrantedFields() != null) { ramBytesUsed += RamUsageEstimator.shallowSizeOf(group.getGrantedFields()); } if (group.getExcludedFields() != null) { ramBytesUsed += RamUsageEstimator.shallowSizeOf(group.getExcludedFields()); } } ramBytesUsed += permittedFieldsAutomaton.ramBytesUsed(); ramBytesUsed += runAutomatonRamBytesUsed(permittedFieldsAutomaton); this.ramBytesUsed = ramBytesUsed; }
From source file:org.elasticsearch.xpack.core.security.support.AutomatonsTests.java
License:Open Source License
public void testPatternComplexity() { List<String> patterns = Arrays.asList("*", "filebeat*de-tst-chatclassification*", "metricbeat*de-tst-chatclassification*", "packetbeat*de-tst-chatclassification*", "heartbeat*de-tst-chatclassification*", "filebeat*documentationdev*", "metricbeat*documentationdev*", "packetbeat*documentationdev*", "heartbeat*documentationdev*", "filebeat*devsupport-website*", "metricbeat*devsupport-website*", "packetbeat*devsupport-website*", "heartbeat*devsupport-website*", ".kibana-tcloud", ".reporting-tcloud", "filebeat-app-ingress-*", "filebeat-app-tcloud-*", "filebeat*documentationprod*", "metricbeat*documentationprod*", "packetbeat*documentationprod*", "heartbeat*documentationprod*", "filebeat*bender-minio-test-1*", "metricbeat*bender-minio-test-1*", "packetbeat*bender-minio-test-1*", "heartbeat*bender-minio-test-1*"); final Automaton automaton = Automatons.patterns(patterns); assertTrue(Operations.isTotal(automaton)); assertTrue(automaton.isDeterministic()); }
From source file:org.elasticsearch.xpack.core.security.support.AutomatonsTests.java
License:Open Source License
public void testLotsOfIndices() { final int numberOfIndices = scaledRandomIntBetween(512, 1024); final List<String> names = new ArrayList<>(numberOfIndices); for (int i = 0; i < numberOfIndices; i++) { names.add(randomAlphaOfLengthBetween(6, 48)); }/* www . j a v a 2s. c om*/ final Automaton automaton = Automatons.patterns(names); assertTrue(automaton.isDeterministic()); CharacterRunAutomaton runAutomaton = new CharacterRunAutomaton(automaton); for (String name : names) { assertTrue(runAutomaton.run(name)); } }