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