blob: f615fe610bcf11c4ab7448607d6f3b5e3c3a1864 [file] [log] [blame]
/*
* 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.tuscany.sca.shell.jline;
import java.io.File;
import java.util.List;
import jline.FileNameCompletor;
import org.apache.tuscany.sca.shell.Shell;
/**
* A Completor for the install command.
* The command format is: install [<uri>] <contributionURL> [-start] [-metadata <url>] [-duris <uri,uri,...>]
*
* TODO: doesn't seem to complete the -xxx parameters properly yet
*
*/
public class InstallCompletor extends FileNameCompletor {
ICURICompletor icuriCompletor;
public InstallCompletor(Shell shell) {
icuriCompletor = new ICURICompletor(shell);
}
public int complete(final String buf, final int cursor,
final List candidates) {
// System.err.println("buf:" + buf);
// System.err.println("candidates:" + candidates);
if ("-duris".equals(TShellCompletor.lastArg)) {
return icuriCompletor.complete(buf, cursor, candidates);
}
if ("-metadata".equals(TShellCompletor.lastArg)) {
return super.complete(buf, cursor, candidates);
}
return super.complete(buf, cursor, candidates);
}
@Override
public int matchFiles(String buffer, String translated, File[] entries,
List candidates) {
if (entries == null) {
return -1;
}
int matches = 0;
// first pass: just count the matches
for (int i = 0; i < entries.length; i++) {
if (entries[i].getAbsolutePath().startsWith(translated)) {
matches++;
}
}
if ("-metadata".startsWith(buffer)) {
matches++;
}
if ("-duris".startsWith(buffer)) {
matches++;
}
if ("-start".startsWith(buffer)) {
matches++;
}
// green - executable
// blue - directory
// red - compressed
// cyan - symlink
for (int i = 0; i < entries.length; i++) {
if (entries[i].getAbsolutePath().startsWith(translated)) {
String name =
entries[i].getName()
+ (((matches == 1) && entries[i].isDirectory())
? File.separator : " ");
/*
if (entries [i].isDirectory ())
{
name = new ANSIBuffer ().blue (name).toString ();
}
*/
candidates.add(name);
}
}
if ("-metadata".startsWith(buffer) && !TShellCompletor.allArgs.contains("-metadata")) {
candidates.add("-metadata" + (matches == 1 ? " " : ""));
}
if ("-duris".startsWith(buffer) && !TShellCompletor.allArgs.contains("-duris")) {
candidates.add("-duris" + (matches == 1 ? " " : ""));
}
if ("-start".startsWith(buffer) && !TShellCompletor.allArgs.contains("-start")) {
candidates.add("-start" + (matches == 1 ? " " : ""));
}
final int index = buffer.lastIndexOf(File.separator);
int x= index + File.separator.length();
// System.out.println("x="+x);
return x;
// return index + File.separator.length();
}
}