001    package org.kuali.common.deploy;
002    
003    import java.util.List;
004    
005    import org.kuali.common.util.Assert;
006    import org.kuali.common.util.FormatUtils;
007    import org.kuali.common.util.execute.Executable;
008    import org.kuali.common.util.secure.channel.SecureChannel;
009    import org.slf4j.Logger;
010    import org.slf4j.LoggerFactory;
011    
012    import com.google.common.collect.ImmutableList;
013    
014    public class SysAdminExecutable implements Executable {
015    
016            private static final Logger logger = LoggerFactory.getLogger(SysAdminExecutable.class);
017    
018            public SysAdminExecutable(SecureChannel channel, List<String> commands, boolean skip) {
019                    Assert.noNulls(channel, commands);
020                    this.channel = channel;
021                    this.commands = ImmutableList.copyOf(commands);
022                    this.skip = skip;
023            }
024    
025            private final SecureChannel channel;
026            private final List<String> commands;
027            private final boolean skip;
028    
029            @Override
030            public void execute() {
031                    if (skip) {
032                            logger.info("[sysadmin:skipped]");
033                            return;
034                    }
035                    long start = System.currentTimeMillis();
036                    logger.info("[sysadmin:begin]");
037                    logger.info("  executing {} commands", commands.size());
038                    for (String command : commands) {
039                            logger.debug(command);
040                            channel.executeCommand(command);
041                    }
042                    logger.info("[sysadmin:complete] - {}", FormatUtils.getTime(System.currentTimeMillis() - start));
043            }
044    
045            public SecureChannel getChannel() {
046                    return channel;
047            }
048    
049            public List<String> getCommands() {
050                    return commands;
051            }
052    
053            public boolean isSkip() {
054                    return skip;
055            }
056    
057    }