blob: c3aae050a9d6bc715e40a2977d805aa07cb03593 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.core.startup;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.netbeans.CLIHandler;
import org.netbeans.Module;
import org.netbeans.core.startup.layers.ModuleLayeredFileSystem;
import org.openide.filesystems.FileUtil;
import org.openide.filesystems.XMLFileSystem;
import org.openide.util.BaseUtilities;
import org.openide.util.Exceptions;
import org.openide.util.Lookup;
import org.openide.util.lookup.Lookups;
/**
* Handler for core.jar options.
* @author Jaroslav Tulach
*/
@org.openide.util.lookup.ServiceProvider(service=org.netbeans.CLIHandler.class)
public class CLICoreBridge extends CLIHandler {
/**
* Create a default handler.
*/
public CLICoreBridge() {
super(WHEN_INIT);
}
protected int cli(Args arguments) {
Lookup clis = Lookup.getDefault();
Collection<? extends CLIHandler> handlers = clis.lookupAll(CLIHandler.class);
int h = notifyHandlers(arguments, handlers, WHEN_EXTRA, true, true);
if (h == 0) {
h = CoreBridge.getDefault().cli(
arguments.getArguments(),
arguments.getInputStream(),
arguments.getOutputStream(),
arguments.getErrorStream(),
arguments.getCurrentDirectory()
);
}
return h;
}
protected void usage(PrintWriter w) {
if (MainLookup.isStarted()) {
Lookup clis = Lookup.getDefault();
Collection<? extends CLIHandler> handlers = clis.lookupAll(CLIHandler.class);
showHelp(w, handlers, WHEN_EXTRA);
w.flush();
return;
}
CLIOptions.fallbackToMemory();
ModuleSystem moduleSystem;
try {
moduleSystem = new ModuleSystem(FileUtil.getConfigRoot().getFileSystem());
} catch (IOException ioe) {
// System will be screwed up.
throw new IllegalStateException("Module system cannot be created", ioe); // NOI18N
}
// moduleSystem.loadBootModules();
moduleSystem.readList();
ArrayList<URL> urls = new ArrayList<URL>();
for (Module m : moduleSystem.getManager().getModules()) {
for (File f : m.getAllJars()) {
try {
urls.add(BaseUtilities.toURI(f).toURL());
}
catch (MalformedURLException ex) {
Exceptions.printStackTrace(ex);
}
}
}
URLClassLoader loader = new URLClassLoader(urls.toArray(new URL[urls.size()]), getClass().getClassLoader());
MainLookup.systemClassLoaderChanged(loader);
try {
final List<URL> layers = ModuleLayeredFileSystem.collectLayers(loader);
XMLFileSystem xfs = new XMLFileSystem();
xfs.setXmlUrls(layers.toArray(new URL[layers.size()]));
MainLookup.register(xfs);
MainLookup.modulesClassPathInitialized(Lookups.forPath("Services/OptionProcessors")); // NOI18N
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
}
Lookup clis = Lookup.getDefault();
Collection<? extends CLIHandler> handlers = clis.lookupAll(CLIHandler.class);
showHelp(w, handlers, WHEN_EXTRA);
w.flush();
}
}