blob: f1ed944497b077eec68023b54efbb024c7882243 [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;
import java.awt.EventQueue;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ProxySelector;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.prefs.Preferences;
import javax.swing.SwingUtilities;
import org.netbeans.core.startup.CoreBridge;
import org.netbeans.core.startup.MainLookup;
import org.netbeans.core.startup.ManifestSection;
import org.netbeans.swing.plaf.Startup;
import org.openide.nodes.NodeOp;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.openide.util.NbPreferences;
import org.openide.util.RequestProcessor;
import org.openide.util.lookup.ServiceProvider;
/** Implements necessary callbacks from module system.
*
* @author Jaroslav Tulach
*/
@ServiceProvider(service=CoreBridge.class)
public final class CoreBridgeImpl extends CoreBridge {
protected void attachToCategory (Object category) {
ModuleActions.attachTo(category);
}
protected void loadDefaultSection (
org.netbeans.core.startup.ManifestSection s,
org.openide.util.lookup.InstanceContent.Convertor<ManifestSection,Object> convertor,
boolean load
) {
if (load) {
if (convertor != null) {
MainLookup.register(s, convertor);
} else {
MainLookup.register(s);
}
} else {
if (convertor != null) {
MainLookup.unregister(s, convertor);
} else {
MainLookup.unregister(s);
}
}
}
protected void loadActionSection(ManifestSection.ActionSection s, boolean load) throws Exception {
if (load) {
ModuleActions.add(s);
} else {
ModuleActions.remove(s);
}
}
@Override
protected void loadLoaderSection(ManifestSection.LoaderSection s, boolean load) throws Exception {
if (load) {
NbLoaderPool.add(s);
} else {
NbLoaderPool.remove((org.openide.loaders.DataLoader)s.getInstance(), NbLoaderPool.getNbLoaderPool());
}
}
protected void loaderPoolTransaction (boolean begin) {
if (begin) {
NbLoaderPool.beginUpdates();
} else {
NbLoaderPool.endUpdates();
}
}
public void setStatusText (String status) {
org.openide.awt.StatusDisplayer.getDefault().setStatusText(status);
}
@Override
public void initializePlaf (final Class uiClass, final int uiFontSize, final java.net.URL themeURL) {
RequestProcessor.getDefault().post(new Runnable() {
@Override
public void run() {
final Class uiClassToUse = null == uiClass ? getPreferredUIClass() : uiClass;
if( null != uiClass ) {
System.setProperty( "nb.laf.forced", uiClass.getName() ); //NOI18N
}
EventQueue.invokeLater( new Runnable() {
@Override
public void run() {
Startup.run(uiClassToUse, uiFontSize, themeURL, NbBundle.getBundle(Startup.class));
}
});
}
});
}
@SuppressWarnings("deprecation")
public org.openide.util.Lookup lookupCacheLoad () {
return NbLoaderPool.getNbLoaderPool().findServicesLookup();
}
public int cli(
String[] args,
InputStream inputStream,
OutputStream outputStream,
OutputStream errorStream,
File file
) {
/*
try {
org.netbeans.api.sendopts.CommandLine.getDefault().parse(
string, inputStream, outputStream, file
);
for (int i = 0; i < string.length; i++) {
string[i] = null;
}
} catch (CommandException ex) {
ex.printStackTrace();
return ex.getExitCode();
}
*/
return CLIOptions2.INSTANCE.cli(args);
}
public void registerPropertyEditors() {
doRegisterPropertyEditors();
}
/**Flag to avoid multiple adds of the same path to the
* of PropertyEditorManager if multiple tests call
* registerPropertyEditors() */
private static boolean editorsRegistered=false;
/** Register NB specific property editors.
* Allows property editor unit tests to work correctly without
* initializing full NetBeans environment.
* @since 1.98 */
private static final void doRegisterPropertyEditors() {
//issue 31879
// if (editorsRegistered) return;
// String[] syspesp = PropertyEditorManager.getEditorSearchPath();
// String[] nbpesp = new String[] {
// "org.netbeans.beaninfo.editors", // NOI18N
// "org.openide.explorer.propertysheet.editors", // NOI18N
// };
// String[] allpesp = new String[syspesp.length + nbpesp.length];
// System.arraycopy(nbpesp, 0, allpesp, 0, nbpesp.length);
// System.arraycopy(syspesp, 0, allpesp, nbpesp.length, syspesp.length);
// PropertyEditorManager.setEditorSearchPath(allpesp);
// PropertyEditorManager.registerEditor (java.lang.Character.TYPE, org.netbeans.beaninfo.editors.CharEditor.class);
// PropertyEditorManager.registerEditor(String[].class, org.netbeans.beaninfo.editors.StringArrayEditor.class);
// // use replacement hintable/internationalizable primitive editors - issues 20376, 5278
// PropertyEditorManager.registerEditor (Integer.TYPE, org.netbeans.beaninfo.editors.IntEditor.class);
// PropertyEditorManager.registerEditor (Boolean.TYPE, org.netbeans.beaninfo.editors.BoolEditor.class);
NodeOp.registerPropertyEditors();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
NodeOp.registerPropertyEditors();
}
});
ProxySelector selector = Lookup.getDefault().lookup(ProxySelector.class);
if (selector != null) {
// install java.net.ProxySelector
ProxySelector.setDefault(selector);
}
editorsRegistered = true;
}
/**
* Checks Preferences for look and feel class name that user selected in Options window.
* @return Look and feel class selected in Options window or null.
*/
private static Class getPreferredUIClass() {
Preferences prefs = NbPreferences.root().node( "laf" ); //NOI18N
String uiClassName = prefs.get( "laf", null ); //NOI18N
if( null == uiClassName )
return null;
ClassLoader loader = Lookup.getDefault().lookup( ClassLoader.class );
if( null == loader )
loader = ClassLoader.getSystemClassLoader();
try {
Class uiClass = loader.loadClass( uiClassName );
return uiClass;
} catch( ClassNotFoundException ex ) {
//HACK ModuleInstall.uninstalled() is never called so let's check if Dark Themes module has been uninstalled
if( prefs.getBoolean( "dark.themes.installed", false) ) {
prefs.remove( "laf" ); //NOI18N
prefs.remove( "dark.themes.installed" ); //NOI18N
} else {
Logger.getLogger( CoreBridgeImpl.class.getName() ).log( Level.INFO, "Cannot use look and feel class: " + uiClassName, ex ); //NOI18N
}
}
return null;
}
}