Github user nickwallen commented on a diff in the pull request:
https://github.com/apache/metron/pull/884#discussion_r158654664
--- Diff:
metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/DefaultStellarAutoCompleter.java
---
@@ -0,0 +1,235 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.metron.stellar.common.shell;
+
+import com.google.common.base.Splitter;
+import com.google.common.collect.Iterables;
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.trie.PatriciaTrie;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+
+/**
+ * Provides auto-completion for Stellar.
+ */
+public class DefaultStellarAutoCompleter implements StellarAutoCompleter {
+
+ enum OperationType {
+ DOC,
+ MAGIC,
+ NORMAL
+ }
+
+ enum AutoCompleteType implements AutoCompleteTransformation {
+ FUNCTION((type, key) -> {
+ if(OperationType.DOC == type) {
+ return "?" + key;
+
+ } else if(OperationType.NORMAL == type) {
+ return key + "(";
+ }
+
+ return key;
+ }),
+ VARIABLE((type, key) -> key),
+ TOKEN((type, key) -> key);
+
+ AutoCompleteTransformation transform;
+
+ AutoCompleteType(AutoCompleteTransformation transform) {
+ this.transform = transform;
+ }
+
+ @Override
+ public String transform(OperationType type, String key) {
+ return transform.transform(type, key);
+ }
+ }
+
+ /**
+ * Prefix tree index of auto-completes.
+ */
+ private PatriciaTrie<AutoCompleteType> autocompleteIndex;
+
+ private ReadWriteLock indexLock = new ReentrantReadWriteLock();
+
+ public interface AutoCompleteTransformation {
+ String transform(OperationType type, String key);
+ }
+
+ public DefaultStellarAutoCompleter() {
+ this.autocompleteIndex = initializeIndex();
+
+ // TODO is this needed? FunctionResolver functionResolver
+// // asynchronously update the index with function names found from a
classpath scan.
--- End diff --
Is this logic needed any longer? I don't feel it is, but need to dig on
this some more.
---