--- db/nbproject/project.xml +++ db/nbproject/project.xml @@ -73,7 +73,7 @@ 0-1 - 0.3 + 1.2 --- db/src/org/netbeans/api/db/explorer/node/Bundle.properties +++ db/src/org/netbeans/api/db/explorer/node/Bundle.properties @@ -263,8 +263,9 @@ catalogSeparator=Catalog separator Yes=Yes No=No +System=System +SystemDesc=System table - # Queries PROP_proceduresQuery=Procedures query --- db/src/org/netbeans/modules/db/explorer/action/AddColumnAction.java +++ db/src/org/netbeans/modules/db/explorer/action/AddColumnAction.java @@ -68,9 +68,16 @@ @Override protected boolean enable(Node[] activatedNodes) { - boolean result = activatedNodes.length == 1 && - activatedNodes[0].getLookup().lookup(TableNode.class) != null; + boolean result = false; + if (activatedNodes.length == 1) { + TableNode tn = activatedNodes[0].getLookup().lookup(TableNode.class); + + if (tn != null && (!tn.isSystem())) { + result = true; + } + } + return result; } --- db/src/org/netbeans/modules/db/explorer/action/GrabTableAction.java +++ db/src/org/netbeans/modules/db/explorer/action/GrabTableAction.java @@ -50,6 +50,7 @@ import org.netbeans.lib.ddl.impl.Specification; import org.netbeans.modules.db.explorer.DatabaseConnection; import org.netbeans.modules.db.explorer.DbUtilities; +import org.netbeans.modules.db.explorer.node.TableListNode; import org.netbeans.modules.db.explorer.node.TableNode; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; @@ -81,8 +82,12 @@ boolean enabled = false; if (activatedNodes.length == 1) { - enabled = activatedNodes[0].getLookup().lookup(TableNode.class) != null; + TableNode tn = activatedNodes[0].getLookup().lookup(TableNode.class); + + if (tn != null && (! tn.isSystem())) { + enabled = true; } + } return enabled; } --- db/src/org/netbeans/modules/db/explorer/action/RecreateTableAction.java +++ db/src/org/netbeans/modules/db/explorer/action/RecreateTableAction.java @@ -58,6 +58,7 @@ import org.netbeans.modules.db.explorer.dlg.LabeledTextFieldDialog; import org.netbeans.modules.db.explorer.node.SchemaNameProvider; import org.netbeans.modules.db.explorer.node.TableListNode; +import org.netbeans.modules.db.explorer.node.TableNode; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.filesystems.FileChooserBuilder; @@ -81,9 +82,11 @@ boolean enabled = false; if (activatedNodes.length == 1) { + TableNode tn = activatedNodes[0].getLookup().lookup(TableNode.class); + DatabaseConnection dbconn = activatedNodes[0].getLookup().lookup(DatabaseConnection.class); - if (dbconn != null) { + if (dbconn != null && tn != null && (! tn.isSystem())) { enabled = DatabaseConnection.isVitalConnection(dbconn.getConnection(), dbconn); } } --- db/src/org/netbeans/modules/db/explorer/node/Bundle.properties +++ db/src/org/netbeans/modules/db/explorer/node/Bundle.properties @@ -68,7 +68,8 @@ ND_ProcedureParam=Stored Procedure Parameter ND_Root=Database Explorer Module Home ND_Schema=Schema -ND_TableList=List of Tables +ND_TableList=List of tables +ND_SystemTableList=List of system tables ND_Table=Table ND_ViewList=List of Views ND_View=View @@ -81,6 +82,7 @@ ProcedureListNode_DISPLAYNAME=Procedures RootNode_DISPLAYNAME=Databases TableListNode_DISPLAYNAME=Tables +SystemTableListNode_DISPLAYNAME=System Tables ViewListNode_DISPLAYNAME=Views StoredProcedure=Stored procedure --- db/src/org/netbeans/modules/db/explorer/node/TableListNode.java +++ db/src/org/netbeans/modules/db/explorer/node/TableListNode.java @@ -61,11 +61,14 @@ */ public class TableListNode extends BaseNode implements SchemaNameProvider { private static final String NAME = "Tables"; // NOI18N + private static final String SYSTEM_NAME = "SystemTables"; // NOI18N private static final String ICONBASE = "org/netbeans/modules/db/resources/folder.gif"; // NOI18N private static final String FOLDER = "TableList"; //NOI18N + private static final String SYSTEM_FOLDER = "SystemTableList"; //NOI18N private MetadataElementHandle schemaHandle; private final DatabaseConnection connection; + private final boolean system; /** * Create an instance of TableListNode. @@ -73,15 +76,16 @@ * @param dataLookup the lookup to use when creating node providers * @return the TableListNode instance */ - public static TableListNode create(NodeDataLookup dataLookup, NodeProvider provider) { - TableListNode node = new TableListNode(dataLookup, provider); + public static TableListNode create(NodeDataLookup dataLookup, NodeProvider provider, boolean system) { + TableListNode node = new TableListNode(dataLookup, provider, system); node.setup(); return node; } - private TableListNode(NodeDataLookup lookup, NodeProvider provider) { - super(new ChildNodeFactory(lookup), lookup, FOLDER, provider); - connection = getLookup().lookup(DatabaseConnection.class); + private TableListNode(NodeDataLookup lookup, NodeProvider provider, boolean system) { + super(new ChildNodeFactory(lookup), lookup, system ? SYSTEM_FOLDER : FOLDER, provider); + this.connection = getLookup().lookup(DatabaseConnection.class); + this.system = system; } @SuppressWarnings("unchecked") @@ -91,13 +95,21 @@ @Override public String getName() { + if(system) { return NAME; + } else { + return SYSTEM_NAME; } + } @Override public String getDisplayName() { + if(system) { + return NbBundle.getMessage (TableListNode.class, "SystemTableListNode_DISPLAYNAME"); // NOI18N + } else { return NbBundle.getMessage (TableListNode.class, "TableListNode_DISPLAYNAME"); // NOI18N } + } @Override public String getIconBase() { @@ -106,8 +118,12 @@ @Override public String getShortDescription() { + if(system) { + return NbBundle.getMessage (TableListNode.class, "ND_SystemTableList"); //NOI18N + } else { return NbBundle.getMessage (TableListNode.class, "ND_TableList"); //NOI18N } + } @Override public HelpCtx getHelpCtx() { --- db/src/org/netbeans/modules/db/explorer/node/TableListNodeProvider.java +++ db/src/org/netbeans/modules/db/explorer/node/TableListNodeProvider.java @@ -61,18 +61,36 @@ private static class FactoryHolder { static final NodeProviderFactory FACTORY = new NodeProviderFactory() { public TableListNodeProvider createInstance(Lookup lookup) { - TableListNodeProvider provider = new TableListNodeProvider(lookup); + TableListNodeProvider provider = new TableListNodeProvider(lookup, false); return provider; } }; } - private TableListNodeProvider(Lookup lookup) { + // lazy initialization holder class idiom for static fields is used + // for retrieving the factory + public static NodeProviderFactory getSystemFactory() { + return SystamFactoryHolder.FACTORY; + } + + private static class SystamFactoryHolder { + static final NodeProviderFactory FACTORY = new NodeProviderFactory() { + public TableListNodeProvider createInstance(Lookup lookup) { + TableListNodeProvider provider = new TableListNodeProvider(lookup, true); + return provider; + } + }; + } + + private final boolean system; + + private TableListNodeProvider(Lookup lookup, boolean system) { super(lookup); + this.system = system; } @Override protected BaseNode createNode(NodeDataLookup lookup) { - return TableListNode.create(lookup, this); + return TableListNode.create(lookup, this, system); } } --- db/src/org/netbeans/modules/db/explorer/node/TableNode.java +++ db/src/org/netbeans/modules/db/explorer/node/TableNode.java @@ -80,6 +80,8 @@ public class TableNode extends BaseNode implements SchemaNameProvider { private static final String ICONBASE = "org/netbeans/modules/db/resources/table.gif"; // NOI18N private static final String FOLDER = "Table"; //NOI18N + private static final String SYSTEM = "System"; + private static final String SYSTEMDESC = "SystemDesc"; private static final Map NODES_TO_REFRESH = new WeakHashMap(); @@ -96,6 +98,7 @@ } private String name = ""; // NOI18N + private boolean system = false; private final MetadataElementHandle tableHandle; private final DatabaseConnection connection; @@ -122,7 +125,7 @@ return ; } name = table.getName(); - + system = table.isSystem(); updateProperties(table); } } @@ -140,6 +143,7 @@ addProperty(CATALOG, CATALOGDESC, String.class, false, getCatalogName()); addProperty(SCHEMA, SCHEMADESC, String.class, false, getSchemaName()); + addProperty(SYSTEM, SYSTEMDESC, Boolean.class, false, isSystem()); } public MetadataElementHandle
getTableHandle() { @@ -184,7 +188,7 @@ @Override public boolean canDestroy() { DatabaseConnector connector = connection.getConnector(); - return connector.supportsCommand(Specification.DROP_TABLE); + return (! system) && connector.supportsCommand(Specification.DROP_TABLE); } @Override @@ -202,6 +206,10 @@ return ICONBASE; } + public boolean isSystem() { + return system; + } + @Override public String getShortDescription() { return NbBundle.getMessage (TableNode.class, "ND_Table"); //NOI18N --- db/src/org/netbeans/modules/db/explorer/node/TableNodeProvider.java +++ db/src/org/netbeans/modules/db/explorer/node/TableNodeProvider.java @@ -75,18 +75,36 @@ static final NodeProviderFactory FACTORY = new NodeProviderFactory() { @Override public TableNodeProvider createInstance(Lookup lookup) { - TableNodeProvider provider = new TableNodeProvider(lookup); + TableNodeProvider provider = new TableNodeProvider(lookup, false); return provider; } }; } + // lazy initialization holder class idiom for static fields is used + // for retrieving the factory + public static NodeProviderFactory getSystemFactory() { + return SystemFactoryHolder.FACTORY; + } + + private static class SystemFactoryHolder { + static final NodeProviderFactory FACTORY = new NodeProviderFactory() { + @Override + public TableNodeProvider createInstance(Lookup lookup) { + TableNodeProvider provider = new TableNodeProvider(lookup, true); + return provider; + } + }; + } + private final DatabaseConnection connection; + private final boolean system; private MetadataElementHandle schemaHandle; @SuppressWarnings("unchecked") - private TableNodeProvider(Lookup lookup) { + private TableNodeProvider(Lookup lookup, boolean system) { super(lookup, new TableComparator()); + this.system = system; connection = getLookup().lookup(DatabaseConnection.class); schemaHandle = getLookup().lookup(MetadataElementHandle.class); } @@ -108,6 +126,10 @@ if (schema != null) { Collection
tables = schema.getTables(); for (Table table : tables) { + if( ((! system) && table.isSystem()) || + (system && (! table.isSystem()))) { + continue; + } MetadataElementHandle
handle = MetadataElementHandle.create(table); Collection matches = getNodes(handle); if (matches.size() > 0) { @@ -116,7 +138,6 @@ NodeDataLookup lookup = new NodeDataLookup(); lookup.add(connection); lookup.add(handle); - newList.add(TableNode.create(lookup, TableNodeProvider.this)); } } --- db/src/org/netbeans/modules/db/resources/mf-layer.xml +++ db/src/org/netbeans/modules/db/resources/mf-layer.xml @@ -189,6 +189,11 @@ + + + + + @@ -243,6 +248,27 @@ + + + + + + + + + + + + + + + + + + + + +