@@ -0,0 +1,3044 @@
+/*%0A * JBoss, Home of Professional Open Source.%0A * Copyright 2010, Red Hat Middleware LLC, and individual contributors%0A * as indicated by the @author tags. See the copyright.txt file in the%0A * distribution for a full listing of individual contributors.%0A *%0A * This is free software; you can redistribute it and/or modify it%0A * under the terms of the GNU Lesser General Public License as%0A * published by the Free Software Foundation; either version 2.1 of%0A * the License, or (at your option) any later version.%0A *%0A * This software is distributed in the hope that it will be useful,%0A * but WITHOUT ANY WARRANTY; without even the implied warranty of%0A * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU%0A * Lesser General Public License for more details.%0A *%0A * You should have received a copy of the GNU Lesser General Public%0A * License along with this software; if not, write to the Free%0A * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA%0A * 02110-1301 USA, or see the FSF site: http://www.fsf.org.%0A */%0A%0Apackage org.jboss.msc.service;%0A%0Aimport java.util.Arrays;%0Aimport java.util.List;%0Aimport java.util.concurrent.atomic.AtomicInteger;%0A%0A/**%0A * A utility class for service actions.%0A *%0A * @author %3Ca href=%22mailto:david.lloyd@redhat.com%22%3EDavid M. Lloyd%3C/a%3E%0A */%0Apublic final class ServiceUtils %7B%0A%0A    private ServiceUtils() %7B%0A    %7D%0A%0A    /**%0A     * Undeploy all the controllers and call the given runnable task when complete.%0A     *%0A     * @param completeTask the complete task%0A     * @param controllers the controllers to undeploy%0A     */%0A    public static void undeployAll(Runnable completeTask, ServiceController%3C?%3E... controllers) %7B%0A        undeployAll(completeTask, Arrays.asList(controllers));%0A    %7D%0A%0A    /**%0A     * Undeploy all the controllers and call the given runnable task when complete.  The given controllers list%0A     * should not be modified while this method runs, or the results will be undefined.%0A     *%0A     * @param completeTask the complete task%0A     * @param controllers the controllers to undeploy%0A     */%0A    public static void undeployAll(final Runnable completeTask, final List%3CServiceController%3C?%3E%3E controllers) %7B%0A        final AtomicInteger cnt = new AtomicInteger(controllers.size());%0A        final AbstractServiceListener%3CObject%3E listener = new AbstractServiceListener%3CObject%3E() %7B%0A            public void listenerAdded(final ServiceController%3C? extends Object%3E serviceController) %7B%0A                serviceController.setMode(ServiceController.Mode.NEVER);%0A            %7D%0A%0A            public void serviceStopped(final ServiceController%3C? extends Object%3E serviceController) %7B%0A                serviceController.remove();%0A            %7D%0A%0A            public void serviceRemoved(final ServiceController%3C? extends Object%3E serviceController) %7B%0A                if (cnt.decrementAndGet() == 0) %7B%0A                    completeTask.run();%0A                %7D%0A            %7D%0A        %7D;%0A        for (ServiceController%3C?%3E controller : controllers) %7B%0A            controller.addListener(listener);%0A        %7D%0A    %7D%0A%7D%0A

Add util class for services.