1 /* 2 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.oracle.tools.packager; 27 28 import java.util.Collection; 29 import java.util.Iterator; 30 import java.util.ServiceLoader; 31 32 @Deprecated 33 public interface Bundlers { 34 35 /** 36 * This convenience method will call {@link #createBundlersInstance(ClassLoader)} 37 * with the classloader that this Bundlers is loaded from. 38 * 39 * @return an instance of Bundlers loaded and configured from the current ClassLoader. 40 */ 41 public static Bundlers createBundlersInstance() { 42 return createBundlersInstance(Bundlers.class.getClassLoader()); 43 } 44 45 /** 46 * This convenience method will automatically load a Bundlers instance 47 * from either META-INF/services or the default 48 * {@link BasicBundlers} if none are found in 49 * the services meta-inf. 50 * 51 * After instantiating the bundlers instance it will load the default 52 * bundlers via {@link #loadDefaultBundlers()} as well as requesting 53 * the services loader to load any other bundelrs via 54 * {@link #loadBundlersFromServices(ClassLoader)}. 55 56 * 57 * @param servicesClassLoader the classloader to search for 58 * META-INF/service registered bundlers 59 * @return an instance of Bundlers loaded and configured from the specified ClassLoader 60 */ 61 public static Bundlers createBundlersInstance(ClassLoader servicesClassLoader) { 62 ServiceLoader<Bundlers> bundlersLoader = ServiceLoader.load(Bundlers.class, servicesClassLoader); 63 Bundlers bundlers = null; 64 Iterator<Bundlers> iter = bundlersLoader.iterator(); 65 if (iter.hasNext()) { 66 bundlers = iter.next(); 67 } 68 if (bundlers == null) { 69 bundlers = new BasicBundlers(); 70 } 71 72 bundlers.loadBundlersFromServices(servicesClassLoader); 73 return bundlers; 74 } 75 76 /** 77 * Returns all of the preconfigured, requested, and manually 78 * configured bundlers loaded with this instance. 79 * 80 * @return a read-only collection of the requested bundlers 81 */ 82 Collection<Bundler> getBundlers(); 83 84 /** 85 * Returns all of the preconfigured, requested, and manually 86 * configured bundlers loaded with this instance that are of 87 * a specific BundleType, such as disk images, installers, or 88 * remote installers. 89 * 90 * @return a read-only collection of the requested bundlers 91 */ 92 Collection<Bundler> getBundlers(String type); 93 94 /** 95 * A list of the "standard" parameters that bundlers should support 96 * or fall back to when their specific parameters are not used. 97 * 98 * @return an unmodifiable collection of the standard parameters. 99 */ 100 Collection<BundlerParamInfo> getStandardParameters(); 101 102 /** 103 * Loads the bundlers common to the JDK. A typical implementation 104 * would load: 105 * <UL> 106 * <LI>Windows file image</LI> 107 * <LI>Mac .app</LI> 108 * <LI>Linux file image</LI> 109 110 * <LI>Windows MSI</LI> 111 * <LI>Windows EXE</LI> 112 * <LI>Mac DMG</LI> 113 * <LI>Mac PKG</LI> 114 * <LI>Linux DEB</LI> 115 * <LI>Linux RPM</LI> 116 * 117 * </UL> 118 * 119 * This method is called from the {@link #createBundlersInstance(ClassLoader)} 120 * and {@link #createBundlersInstance()} methods. 121 * NOTE: Because of the module system this method is now not used. 122 */ 123 void loadDefaultBundlers(); 124 125 /** 126 * Loads bundlers from the META-INF/services directly. 127 * 128 * This method is called from the {@link #createBundlersInstance(ClassLoader)} 129 * and {@link #createBundlersInstance()} methods. 130 */ 131 void loadBundlersFromServices(ClassLoader cl); 132 133 /** 134 * Loads a specific bundler into the set of bundlers. 135 * Useful for a manually configured bundler. 136 * 137 * @param bundler the specific bundler to add 138 */ 139 void loadBundler(Bundler bundler); 140 }