Example usage for org.apache.lucene.util.automaton Automaton isDeterministic

List of usage examples for org.apache.lucene.util.automaton Automaton isDeterministic

Introduction

In this page you can find the example usage for org.apache.lucene.util.automaton Automaton isDeterministic.

Prototype

public boolean isDeterministic() 

Source Link

Document

Returns true if this automaton is deterministic (for ever state there is only one transition for each label).

Usage

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));
    }
}