blob: 3379abaa509e2b1d2fbf575b7939143cce670da8 [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.windows;
import org.openide.ErrorManager;
import org.openide.windows.TopComponent;
import org.openide.windows.WindowManager;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
/**
*
* Test component with persistence type PERSISTENCE_ALWAYS and it is singleton.
*
* @author Marek Slama
*
*/
public class Component00 extends TopComponent {
static final long serialVersionUID = 6021472310161712674L;
private static Component00 component = null;
private static final String TC_ID = "component00";
/**
* Used to detect if TC instance was created either using deserialization
* or by getDefault.
*/
private static boolean deserialized = false;
private Component00 () {
}
protected String preferredID () {
return TC_ID;
}
/* Singleton accessor. As Component00 is persistent singleton this
* accessor makes sure that Component00 is deserialized by window system.
* Uses known unique TopComponent ID "component00" to get Component00 instance
* from window system. "component00" is name of settings file defined in module layer.
*/
public static synchronized Component00 findDefault() {
if (component == null) {
//If settings file is correctly defined call of WindowManager.findTopComponent() will
//call TestComponent00.getDefault() and it will set static field component.
TopComponent tc = WindowManager.getDefault().findTopComponent(TC_ID);
if (tc != null) {
if (!(tc instanceof Component00)) {
//This should not happen. Possible only if some other module
//defines different settings file with the same name but different class.
//Incorrect settings file?
IllegalStateException exc = new IllegalStateException
("Incorrect settings file. Unexpected class returned." // NOI18N
+ " Expected:" + Component00.class.getName() // NOI18N
+ " Returned:" + tc.getClass().getName()); // NOI18N
ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, exc);
//Fallback to accessor reserved for window system.
Component00.getDefault();
}
} else {
//This should not happen when settings file is correctly defined in module layer.
//TestComponent00 cannot be deserialized
//Fallback to accessor reserved for window system.
ErrorManager.getDefault().log(ErrorManager.WARNING,
"Cannot deserialize TopComponent for tcID:'" + TC_ID + "'"); // NOI18N
Component00.getDefault();
}
}
return component;
}
/* Singleton accessor reserved for window system ONLY. Used by window system to create
* TestComponent00 instance from settings file when method is given. Use <code>findDefault</code>
* to get correctly deserialized instance of TestComponent00. */
public static synchronized Component00 getDefault() {
if (component == null) {
component = new Component00();
}
deserialized = true;
return component;
}
/** Overriden to explicitely set persistence type of TestComponent00
* to PERSISTENCE_ALWAYS */
public int getPersistenceType() {
return TopComponent.PERSISTENCE_ALWAYS;
}
/** Resolve to singleton instance */
public Object readResolve() throws java.io.ObjectStreamException {
return Component00.getDefault();
}
public void writeExternal(ObjectOutput out) throws IOException {
super.writeExternal(out);
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
super.readExternal(in);
deserialized = true;
}
static void clearRef () {
component = null;
}
public static boolean wasDeserialized () {
return deserialized;
}
}