package jetbrains.mps.execution.api.commands;
/*Generated by MPS */
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import java.util.List;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.internal.collections.runtime.IterableUtils;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.internal.collections.runtime.ITranslator2;
import java.util.ArrayList;
import java.io.File;
import org.apache.log4j.Level;
public class ListCommandPart extends AbstractCommandPart implements CommandPart {
private static final Logger LOG = LogManager.getLogger(ListCommandPart.class);
public ListCommandPart(List<? extends Object> list) {
this(list, null);
}
public ListCommandPart(List<? extends Object> list, @Nullable String separator) {
if ((separator == null || separator.length() == 0)) {
addCommands(getCommands(list));
} else {
addCommands(IterableUtils.join(Sequence.fromIterable(getCommands(list)), separator));
}
}
private Iterable<String> getCommands(List<? extends Object> list) {
return ListSequence.fromList(list).translate(new ITranslator2<Object, String>() {
public Iterable<String> translate(Object it) {
return ListCommandPart.this.getCommandsFromItem(it);
}
});
}
private Iterable<String> getCommandsFromItem(Object item) {
if (item == null) {
return ListSequence.fromList(new ArrayList<String>());
}
if (item instanceof String) {
if (isNotEmptyString(((String) item))) {
return ProcessHandlerBuilder.splitCommandInParts((String) item);
}
} else if (item instanceof File) {
String path = ((File) item).getAbsolutePath();
if ((path != null && path.length() > 0)) {
return Sequence.<String>singleton(path);
}
} else if (item instanceof CommandPart) {
return ((CommandPart) item).getCommandList();
} else if (item instanceof Iterable) {
List<String> result = ListSequence.fromList(new ArrayList<String>());
for (Object it : (Iterable) item) {
ListSequence.fromList(result).addSequence(Sequence.fromIterable(getCommandsFromItem(it)));
}
return result;
} else {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("Unknown type of command part " + item);
}
}
return ListSequence.fromList(new ArrayList<String>());
}
private static boolean isNotEmptyString(String str) {
return str != null && str.length() > 0;
}
}