001    package org.shiftone.jrat.core.command;
002    
003    import org.shiftone.jrat.core.spi.Commandlet;
004    import org.shiftone.jrat.util.AtomicLong;
005    import org.shiftone.jrat.util.log.Logger;
006    
007    import java.util.Collections;
008    import java.util.Map;
009    import java.util.SortedMap;
010    import java.util.TreeMap;
011    
012    /**
013     * @author jeff@shiftone.org (Jeff Drost)
014     */
015    public class CommandletRegistry {
016    
017        private static final Logger LOG = Logger.getLogger(CommandletRegistry.class);
018        private SortedMap commandlets = new TreeMap();
019        private AtomicLong sequence = new AtomicLong();
020        private Commandlet defaultCommandlet = new ListRegistryCommandlet(this);
021    
022    
023        public CommandletRegistry() {
024            register(defaultCommandlet);
025            register(new SystemPropertiesCommandlet());
026        }
027    
028        public void register(Commandlet commandlet) {
029            LOG.info("register " + commandlet);
030            commandlets.put(Long.toHexString(sequence.incrementAndGet()), commandlet);
031        }
032    
033        public Map getCommandlets() {
034            return Collections.unmodifiableMap(commandlets);
035        }
036    
037        public Commandlet getDefaultCommandlet() {
038            return defaultCommandlet;
039        }
040    }