blob: 9ddcbc0ff7f7409a652ba86adfd6f5176e1d5b48 [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.modules.beans.beaninfo;
import java.beans.PropertyVetoException;
import org.netbeans.api.editor.guards.GuardedSectionManager;
import org.netbeans.api.editor.guards.InteriorSection;
import org.netbeans.api.editor.guards.SimpleSection;
import org.netbeans.modules.beans.GenerateBeanException;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.loaders.DataObject;
import org.openide.loaders.DataFolder;
import org.openide.loaders.DataObjectNotFoundException;
import org.openide.util.Exceptions;
/**
* Finds or creates BeanInfo source elemnet for the class.
* It can regenerate the source if there are the guarded blocks.
* @author Petr Hrebejk
*/
public final class BeanInfoSource extends Object {
private static final String BEANINFO_NAME_EXT = "BeanInfo"; // NOI18N
private static final String DESCRIPTOR_SECTION = "BeanDescriptor"; // NOI18N
private static final String PROPERTIES_SECTION = "Properties"; // NOI18N
private static final String EVENTSETS_SECTION = "Events"; // NOI18N
private static final String ICONS_SECTION = "Icons"; // NOI18N
private static final String IDX_SECTION = "Idx"; // NOI18N
private static final String METHODS_SECTION = "Methods"; // NOI18N
private static final String SUPERCLASS_SECTION = "Superclass"; // NOI18N
private DataObject javaDataObject;
private DataObject biDataObject = null;
private BIEditorSupport javaEditor = null;
/** Creates new BeanInfoSource */
public BeanInfoSource (FileObject javafile) throws GenerateBeanException {
findBeanInfo(javafile);
}
/** Returns wether the bean info exists or not */
boolean exists() {
return biDataObject != null;
}
/** Checks wether the bean info object has Guarded sections i.e.
* was created from netbeans template.
*/
boolean isNbBeanInfo() {
GuardedSectionManager guards = null;
if ( !exists() || javaEditor == null || null == (guards = javaEditor.getGuardedSectionManager())) {
return false;
}
//JavaEditor.InteriorSection dis = javaEditor.findInteriorSection( DESCRIPTOR_SECTION );
InteriorSection pis = guards.findInteriorSection( PROPERTIES_SECTION );
InteriorSection eis = guards.findInteriorSection( EVENTSETS_SECTION );
// JavaEditor.InteriorSection mis = javaEditor.findInteriorSection( METHODS_SECTION );
//JavaEditor.SimpleSection iss = javaEditor.findSimpleSection( ICONS_SECTION );
SimpleSection dss = guards.findSimpleSection( IDX_SECTION );
//return ( pis != null && eis != null && iss != null && dss != null);
return ( pis != null && eis != null && dss != null);
}
boolean hasIconInfo(){
GuardedSectionManager guards = javaEditor.getGuardedSectionManager();
if (guards == null) {
return false;
}
SimpleSection iss = guards.findSimpleSection( ICONS_SECTION );
return ( iss != null );
}
/** Checks wether the bean descriptor object has Guarded sections i.e.
* was created from new netbeans template.
*/
boolean isNbBeanInfoDescriptor() {
GuardedSectionManager guards = null;
if ( !exists() || javaEditor == null || null == (guards = javaEditor.getGuardedSectionManager())) {
return false;
}
InteriorSection dis = guards.findInteriorSection( DESCRIPTOR_SECTION );
return ( dis != null );
}
/** Checks wether the bean info object has Guarded sections for superclass i.e.
* was created from new netbeans template.
*/
boolean isNbSuperclass() {
GuardedSectionManager guards = null;
if ( !exists() || javaEditor == null || null == (guards = javaEditor.getGuardedSectionManager())) {
return false;
}
InteriorSection dis = guards.findInteriorSection( SUPERCLASS_SECTION );
return ( dis != null );
}
/** Finds the bean info for classElement asspciated with this
object */
void findBeanInfo(FileObject javafile) throws GenerateBeanException {
javaEditor = null;
try {
this.javaDataObject = DataObject.find(javafile);
FileObject parent = javafile.getParent();
FileObject bifile = parent.getFileObject(javafile.getName() + BEANINFO_NAME_EXT, "java"); // NOI18N
if (bifile != null) {
biDataObject = DataObject.find(bifile);
javaEditor = biDataObject.getLookup().lookup(BIEditorSupport.class);
}
} catch (DataObjectNotFoundException ex) {
throw new GenerateBeanException();
// Do nothing if no data object is found
}
}
/** Deletes the BeanInfo */
void delete() throws java.io.IOException {
biDataObject.delete();
}
/** Creates beanInfo data object */
void createFromTemplate( boolean iconBlock ) {
FileObject foTemplates = FileUtil.getConfigFile("Templates"); //NOI18N ;
if ( foTemplates == null ) {
return;
}
FileObject foClassTemplates = foTemplates.getFileObject( "Beans" ); // NOI18N
if ( foClassTemplates == null ) {
return;
}
FileObject foBiTemplate = null;
if( iconBlock ){
foBiTemplate = foClassTemplates.getFileObject( "BeanInfo", "java" ); // NOI18N
}
else {
foBiTemplate = foClassTemplates.getFileObject( "NoIconBeanInfo", "java" ); // NOI18N
}
if ( foBiTemplate == null ) {
return;
}
try {
DataObject doBiTemplate = DataObject.find ( foBiTemplate );
DataFolder folder = this.javaDataObject.getFolder();
biDataObject = doBiTemplate.createFromTemplate( folder, this.javaDataObject.getName() + BEANINFO_NAME_EXT );
if (!(biDataObject instanceof BIDataObject)) {
try {
biDataObject.setValid(false);
} catch (PropertyVetoException ex) {
Exceptions.printStackTrace(ex);
}
biDataObject = DataObject.find(biDataObject.getPrimaryFile());
}
javaEditor = biDataObject.getLookup().lookup(BIEditorSupport.class);
}
catch ( org.openide.loaders.DataObjectNotFoundException e ) {
//System.out.println ( e );
// Do nothing if no data object is found
}
catch ( java.io.IOException e ) {
//System.out.println ( e );
// Do nothing if no data object is found
}
}
/** If the bean info is available returns the bean info data object */
DataObject getDataObject() {
return biDataObject;
}
DataObject getSourceDataObject() {
return javaDataObject;
}
/** opens the source */
void open() {
javaEditor.open();
}
/** Sets the header and bottom of properties section */
void setDescriptorSection( String header, String bottom ) {
setInteriorSection(DESCRIPTOR_SECTION, header, bottom);
}
/** Gets the header of properties setion */
String getDescriptorSection() {
GuardedSectionManager guards = javaEditor.getGuardedSectionManager();
InteriorSection is = guards.findInteriorSection( DESCRIPTOR_SECTION );
if ( is != null ) {
return is.getText();
}
else
return null;
}
/** Sets the header and bottom of properties section */
void setPropertiesSection( String header, String bottom ) {
setInteriorSection(PROPERTIES_SECTION, header, bottom);
}
/** Gets the header of properties setion */
String getPropertiesSection() {
return getInteriorSection(PROPERTIES_SECTION);
}
/** Sets the header and bottom of methods section */
void setMethodsSection( String header, String bottom ) {
setInteriorSection(METHODS_SECTION, header, bottom);
}
/** Gets the header of properties setion */
String getMethodsSection() {
return getInteriorSection(METHODS_SECTION);
}
/** Sets the header and bottom of event sets section */
void setEventSetsSection( String header, String bottom ) {
setInteriorSection(EVENTSETS_SECTION, header, bottom);
}
/** Gets the header of properties setion */
String getEventSetsSection() {
return getInteriorSection(EVENTSETS_SECTION);
}
/** Gets the header of properties setion */
String getIconsSection() {
return getSimpleSection(ICONS_SECTION);
}
/** Sets the header of properties setion */
void setIconsSection( String text ) {
setSimpleSection(ICONS_SECTION, text);
}
/** Gets the header of properties setion */
String getDefaultIdxSection() {
return getSimpleSection(IDX_SECTION);
}
/** Sets the header of properties setion */
void setDefaultIdxSection( String text ) {
setSimpleSection(IDX_SECTION, text);
}
/** Sets the header and bottom of properties section */
void setSuperclassSection( String header, String bottom ) {
setInteriorSection(SUPERCLASS_SECTION, header, bottom);
}
/** Gets the header of properties setion */
String getSuperclassSection() {
return getInteriorSection(SUPERCLASS_SECTION);
}
private void setInteriorSection(String section, String header, String bottom) {
GuardedSectionManager guards = javaEditor.getGuardedSectionManager();
if (guards == null) {
return;
}
InteriorSection is = guards.findInteriorSection(section);
if ( is != null ) {
is.setHeader( header );
is.setFooter( bottom );
}
}
private String getInteriorSection(String section) {
GuardedSectionManager guards = javaEditor.getGuardedSectionManager();
if (guards == null) {
return null;
}
InteriorSection is = guards.findInteriorSection(section);
return is == null? null: is.getText();
}
private void setSimpleSection(String section, String text) {
GuardedSectionManager guards = javaEditor.getGuardedSectionManager();
if (guards == null) {
return;
}
SimpleSection ss = guards.findSimpleSection(section);
if (ss != null) {
ss.setText(text);
}
}
private String getSimpleSection(String section) {
GuardedSectionManager guards = javaEditor.getGuardedSectionManager();
if (guards == null) {
return null;
}
SimpleSection ss = guards.findSimpleSection(section);
return ss == null? null: ss.getText();
}
/*
void regenerateMethods() {
JavaEditor.InteriorSection is = javaEditor.findInteriorSection( "Events" );
if ( is != null ) {
is.setHeader( BeanInfoGenerator.generateMethods( classElement.getName().getName(), methods ) );
is.setBottom( BeanInfoGenerator.generateMethodsBottom( methods ) );
}
}
*/
}