netbeansintegration/trunk/src/org/openoffice/extensions/projecttemplates/component/ComponentPanelVisual2IdlFiles.java (828 lines of code) (raw):

/************************************************************** * * 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.openoffice.extensions.projecttemplates.component; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyVetoException; import java.util.Collection; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.Vector; import javax.swing.ActionMap; import javax.swing.tree.TreeSelectionModel; import org.openide.WizardDescriptor; import org.openide.WizardValidationException; import org.openide.explorer.ExplorerManager; import org.openide.explorer.ExplorerUtils; import org.openide.explorer.view.BeanTreeView; import org.openide.nodes.Node; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openoffice.extensions.projecttemplates.component.datamodel.DataType; import org.openoffice.extensions.projecttemplates.component.datamodel.node.ComponentNodeChildren; import org.openoffice.extensions.projecttemplates.component.datamodel.node.ComponentRootNode; import org.openoffice.extensions.projecttemplates.component.datamodel.node.DataTypeNode; import org.openoffice.extensions.projecttemplates.component.datamodel.node.InterfaceNode; import org.openoffice.extensions.projecttemplates.component.datamodel.node.ServiceNode; import org.openoffice.extensions.projecttemplates.component.datamodel.node.TypeNodeChildren; import org.openoffice.extensions.projecttemplates.component.datamodel.node.TypeRootNode; import org.openoffice.extensions.projecttemplates.component.datamodel.types.node.ComponentTypeChildren; import org.openoffice.extensions.projecttemplates.component.datamodel.types.node.ComponentTypeNode; import org.openoffice.extensions.projecttemplates.component.dialogs.DialogProperties; import org.openoffice.extensions.projecttemplates.component.dialogs.NewDataTypeBasePanel; import org.openoffice.extensions.util.LogWriter; import org.openoffice.extensions.util.datamodel.Interface; import org.openoffice.extensions.util.datamodel.Service; import org.openoffice.extensions.util.datamodel.NbNodeObject; import org.openoffice.extensions.util.datamodel.properties.UnknownOpenOfficeOrgPropertyException; import org.openoffice.extensions.util.typebrowser.logic.UnoTypes; import org.openoffice.extensions.util.typebrowser.logic.TypeNode; /** * * @author sg128468 */ public class ComponentPanelVisual2IdlFiles extends javax.swing.JPanel implements ExplorerManager.Provider, PropertyChangeListener { public static final String PROP_PROJECT_NAME = "Component"; // NOI18N private ComponentWizardPanel2IdlFiles panel; private ExplorerManager manager = new ExplorerManager(); private Lookup lookup; private Hashtable<String,NbNodeObject> designedDataTypes; // private Hashtable implementedDataTypes; private String serviceName; private String interfaceName; private String pkgName; private boolean initComponentsOnce; /** * Creates new form ComponentPanelVisual2IdlFiles */ public ComponentPanelVisual2IdlFiles(ComponentWizardPanel2IdlFiles panel) { this.panel = panel; initComponentsOnce = true; } private void initialize() { initComponents(); // late init of components because of own data types; must happen only once though // if (initComponentsOnce) { // initComponents(); // initComponentsOnce = false; // } // else { // ComponentListPanel listPanel = (ComponentListPanel)jPanel1; // listPanel.getExplorerManager().setRootContext(getOwnDataTypesRootNode()); // } BeanTreeView componentView = (BeanTreeView)jScrollPane1; componentView.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); // componentView.setRootVisible(false); this.manager.setRootContext( ComponentRootNode.createInitialNodeStructure( serviceName, interfaceName)); // for keyboard actions enable this: handle actions must be done, too ActionMap map = getActionMap(); // map.put("delete", ExplorerUtils.actionDelete(manager, true)); // NOI18N // actions = new AddinActions(manager, panel, this); // deliver the actual actions to the node-actions // Node rootNode = manager.getRootContext(); // rootNode.setActions(actions); ComponentListPanel clPanel = (ComponentListPanel)this.jPanel1; clPanel.getExplorerManager().addPropertyChangeListener(this); manager.addPropertyChangeListener(this); lookup = ExplorerUtils.createLookup(manager, map); } public ExplorerManager getExplorerManager() { return manager; } public Lookup getLookup() { return lookup; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jPopupMenu1 = new javax.swing.JPopupMenu(); addServiceButton = new javax.swing.JButton(); jScrollPane1 = new BeanTreeView(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jPanel1 = new ComponentListPanel(panel, getOwnDataTypesRootNode()); deleteServiceButton = new javax.swing.JButton(); defineNewDataTypeButton = new javax.swing.JButton(); deleteDataTypeButton = new javax.swing.JButton(); editDataTypeButton = new javax.swing.JButton(); org.openide.awt.Mnemonics.setLocalizedText(addServiceButton, NbBundle.getMessage(ComponentWizardIterator.class, "LBL_ButtonAddType")); // NOI18N addServiceButton.setToolTipText(org.openide.util.NbBundle.getMessage(ComponentPanelVisual2IdlFiles.class, "Button_AddServiceInterface_Tooltip")); // NOI18N addServiceButton.setName("addServiceInterface"); // NOI18N addServiceButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addServiceButtonActionPerformed(evt); } }); jScrollPane1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jLabel1.setLabelFor(jScrollPane1); jLabel1.setText(NbBundle.getMessage(ComponentWizardIterator.class, "LBL_ServicesAndInterfaces")); // NOI18N jLabel2.setLabelFor(jPanel1); jLabel2.setText(NbBundle.getMessage(ComponentWizardIterator.class, "LBL_OwnDataTypes")); // NOI18N jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); org.openide.awt.Mnemonics.setLocalizedText(deleteServiceButton, org.openide.util.NbBundle.getMessage(ComponentWizardIterator.class, "LBL_ButtonDeleteSelected")); // NOI18N deleteServiceButton.setToolTipText(org.openide.util.NbBundle.getMessage(ComponentPanelVisual2IdlFiles.class, "Button_DeleteServiceInterface_Tooltip")); // NOI18N deleteServiceButton.setEnabled(false); deleteServiceButton.setName("deleteSelected"); // NOI18N deleteServiceButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteServiceButtonActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(defineNewDataTypeButton, NbBundle.getMessage(ComponentWizardIterator.class, "LBL_ButtonDefineType")); // NOI18N defineNewDataTypeButton.setToolTipText(org.openide.util.NbBundle.getMessage(ComponentPanelVisual2IdlFiles.class, "Button_DefineDataType_Tooltip")); // NOI18N defineNewDataTypeButton.setActionCommand("Define New Data Type..."); defineNewDataTypeButton.setName("defineDataType"); // NOI18N defineNewDataTypeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { defineNewDataTypeActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(deleteDataTypeButton, NbBundle.getMessage(ComponentWizardIterator.class, "LBL_ButtonDeleteSelected2")); // NOI18N deleteDataTypeButton.setToolTipText(org.openide.util.NbBundle.getMessage(ComponentPanelVisual2IdlFiles.class, "Button_DeletDataType_Tooltip")); // NOI18N deleteDataTypeButton.setEnabled(false); deleteDataTypeButton.setName("deleteSelected"); // NOI18N deleteDataTypeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteDataTypeActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(editDataTypeButton, NbBundle.getMessage(ComponentWizardIterator.class, "LBL_ButtonEdit")); // NOI18N editDataTypeButton.setToolTipText(org.openide.util.NbBundle.getMessage(ComponentPanelVisual2IdlFiles.class, "Button_EditDataType_Tooltip")); // NOI18N editDataTypeButton.setEnabled(false); editDataTypeButton.setName("edit"); // NOI18N editDataTypeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { editDataTypeActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 285, Short.MAX_VALUE) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 285, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(addServiceButton, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(defineNewDataTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(editDataTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(deleteDataTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(deleteServiceButton, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE) .addContainerGap()) .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 436, Short.MAX_VALUE))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSequentialGroup() .addComponent(addServiceButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(deleteServiceButton))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(defineNewDataTypeButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(editDataTypeButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(deleteDataTypeButton))) .addContainerGap()) ); }// </editor-fold>//GEN-END:initComponents private void deleteDataTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteDataTypeActionPerformed // delete own defined type ComponentListPanel clPanel = (ComponentListPanel)jPanel1; Node[] nodes = clPanel.getExplorerManager().getSelectedNodes(); if (nodes.length > 0) { Node node = nodes[0]; if (node instanceof DataTypeNode) { DataTypeNode dataTypeNode = (DataTypeNode)node; Node parentNode = dataTypeNode.getParentNode(); DataType parentDataType = (DataType)parentNode.getLookup().lookup(DataType.class); DataType dataType = (DataType)dataTypeNode.getLookup().lookup(DataType.class); NbNodeObject object = (NbNodeObject)this.designedDataTypes.get(dataType.getTypesName()); // delete data type designedDataTypes.remove(object); parentDataType.deleteType(dataType.getTypesName()); TypeNodeChildren children = (TypeNodeChildren)parentNode.getChildren(); children.update(); } } }//GEN-LAST:event_deleteDataTypeActionPerformed private void deleteServiceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteServiceButtonActionPerformed // delete node Node[] selectedNodes = manager.getSelectedNodes(); if (selectedNodes.length > 0) { Node selectedNode = selectedNodes[0]; if (selectedNode instanceof ServiceNode) { ComponentRootNode compRootNode = (ComponentRootNode)manager.getRootContext(); ServiceNode srvNode = (ServiceNode)selectedNode; org.openoffice.extensions.projecttemplates.component.datamodel.Service srv = (org.openoffice.extensions.projecttemplates.component.datamodel.Service) srvNode.getLookup().lookup(org.openoffice.extensions.projecttemplates.component.datamodel.Service.class); compRootNode.removeSubType(srv); ComponentNodeChildren ch = (ComponentNodeChildren)compRootNode.getChildren(); ch.update(); // update the nodes } else if (selectedNode instanceof InterfaceNode) { InterfaceNode ifcNode = (InterfaceNode)selectedNode; org.openoffice.extensions.projecttemplates.component.datamodel.Interface ifc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface) ifcNode.getLookup().lookup(org.openoffice.extensions.projecttemplates.component.datamodel.Interface.class); Node parentNode = ifcNode.getParentNode(); if (parentNode.equals(manager.getRootContext())) { ComponentRootNode compRootNode = (ComponentRootNode)parentNode; compRootNode.removeSubType(ifc); } else { Object ifcObject = parentNode.getLookup().lookup(org.openoffice.extensions.projecttemplates.component.datamodel.Interface.class); if (ifcObject != null) { org.openoffice.extensions.projecttemplates.component.datamodel.Interface parentIfc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface)ifcObject; parentIfc.removeInterface(ifc); } Object srvObject = parentNode.getLookup().lookup(org.openoffice.extensions.projecttemplates.component.datamodel.Service.class); if (srvObject != null) { org.openoffice.extensions.projecttemplates.component.datamodel.Service parentSrv = (org.openoffice.extensions.projecttemplates.component.datamodel.Service)srvObject; parentSrv.removeInterface(ifc); } } ComponentNodeChildren ch = (ComponentNodeChildren)parentNode.getChildren(); ch.update(); } } }//GEN-LAST:event_deleteServiceButtonActionPerformed private void editDataTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editDataTypeActionPerformed // get the data type ComponentListPanel clPanel = (ComponentListPanel)jPanel1; Node[] nodes = clPanel.getExplorerManager().getSelectedNodes(); if (nodes.length > 0) { Node node = nodes[0]; if (node instanceof DataTypeNode) { DataTypeNode dataTypeNode = (DataTypeNode)node; DataType dataType = (DataType)dataTypeNode.getLookup().lookup(DataType.class); if (dataType.getType() == DataType.INTERFACE_TYPE) { NbNodeObject object = (NbNodeObject)this.designedDataTypes.get(dataType.getTypesName()); NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.INTERFACE_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.INTERFACE_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), new DialogProperties.OneDataType<ComponentTypeNode>(DialogProperties.NODE, new ComponentTypeNode(object, new ComponentTypeChildren())), } )); } else if (dataType.getType() == DataType.SERVICE_TYPE) { String typesName = dataType.getTypesName(); NbNodeObject object = (NbNodeObject)this.designedDataTypes.get(typesName); NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.SERVICE_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.SERVICE_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), new DialogProperties.OneDataType<ComponentTypeNode>(DialogProperties.NODE, new ComponentTypeNode(object, new ComponentTypeChildren())), } )); } else if (dataType.getType() == DataType.ENUM_TYPE) { String typesName = dataType.getTypesName(); NbNodeObject object = (NbNodeObject)this.designedDataTypes.get(typesName); NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.ENUM_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.ENUM_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), new DialogProperties.OneDataType<ComponentTypeNode>(DialogProperties.NODE, new ComponentTypeNode(object, new ComponentTypeChildren())), } )); } else if (dataType.getType() == DataType.STRUCT_TYPE) { String typesName = dataType.getTypesName(); NbNodeObject object = (NbNodeObject)this.designedDataTypes.get(typesName); NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.STRUCT_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.STRUCT_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), new DialogProperties.OneDataType<ComponentTypeNode>(DialogProperties.NODE, new ComponentTypeNode(object, new ComponentTypeChildren())), } )); } else if (dataType.getType() == DataType.EXCEPTION_TYPE) { String typesName = dataType.getTypesName(); NbNodeObject object = (NbNodeObject)this.designedDataTypes.get(typesName); NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.EXCEPTION_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.EXCEPTION_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), new DialogProperties.OneDataType<ComponentTypeNode>(DialogProperties.NODE, new ComponentTypeNode(object, new ComponentTypeChildren())), } )); } else if (dataType.getType() == DataType.POLY_STRUCT_TYPE) { String typesName = dataType.getTypesName(); NbNodeObject object = (NbNodeObject)this.designedDataTypes.get(typesName); NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.POLY_STRUCT_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.POLY_STRUCT_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), new DialogProperties.OneDataType<ComponentTypeNode>(DialogProperties.NODE, new ComponentTypeNode(object, new ComponentTypeChildren())), } )); } } } }//GEN-LAST:event_editDataTypeActionPerformed private void defineNewDataTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_defineNewDataTypeActionPerformed // new data type ComponentListPanel clPanel = (ComponentListPanel)this.jPanel1; String type = clPanel.getSelectedType(); if (type.equals(DataType.INTERFACE_TYPE_NAME)) NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.INTERFACE_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.IFC, interfaceName), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.INTERFACE_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), } )); else if (type.equals(DataType.SERVICE_TYPE_NAME)) NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.SERVICE_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.SRV, serviceName), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.SERVICE_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), } )); else if (type.equals(DataType.ENUM_TYPE_NAME)) NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.ENUM_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.ENUM_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), } )); else if (type.equals(DataType.STRUCT_TYPE_NAME)) NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.STRUCT_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.STRUCT_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), } )); else if (type.equals(DataType.EXCEPTION_TYPE_NAME)) NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.EXCEPTION_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.EXCEPTION_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), } )); else if (type.equals(DataType.POLY_STRUCT_TYPE_NAME)) NewDataTypeBasePanel.start(new DialogProperties( new DialogProperties.OneDataType[] { new DialogProperties.OneDataType<Integer>(DialogProperties.DATA_TYPE, new Integer(DataType.POLY_STRUCT_TYPE)), new DialogProperties.OneDataType<String>(DialogProperties.PKG, pkgName), new DialogProperties.OneDataType<String[]>(DialogProperties.SELECTION, new String[]{DataType.POLY_STRUCT_TYPE_NAME}), new DialogProperties.OneDataType<Object>(DialogProperties.PANEL, this.panel), } )); }//GEN-LAST:event_defineNewDataTypeActionPerformed private void addServiceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addServiceButtonActionPerformed // add service/interface NewTypeBrowserDialog.start(this, panel); }//GEN-LAST:event_addServiceButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addServiceButton; private javax.swing.JButton defineNewDataTypeButton; private javax.swing.JButton deleteDataTypeButton; private javax.swing.JButton deleteServiceButton; private javax.swing.JButton editDataTypeButton; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JPanel jPanel1; private javax.swing.JPopupMenu jPopupMenu1; private javax.swing.JScrollPane jScrollPane1; // End of variables declaration//GEN-END:variables public void addNotify() { super.addNotify(); try { manager.setSelectedNodes(new Node[]{manager.getRootContext()}); } catch (PropertyVetoException ex) { LogWriter.getLogWriter().printStackTrace(ex); } } boolean valid(WizardDescriptor wizardDescriptor) { org.openoffice.extensions.projecttemplates.component.datamodel.Service srv = getService(manager.getRootContext()); if (srv == null) { String message = NbBundle.getMessage(ComponentWizardIterator.class, "LBL_Error_MandatoryService"); wizardDescriptor.putProperty("WizardPanel_errorMessage", message); // NOI18N return false; } else { Collection c = srv.getInterfaces(); if (srv.isOwnDesign()) { if (c.size() == 0) { String message = NbBundle.getMessage(ComponentWizardIterator.class, "LBL_Error_MandatoryService"); wizardDescriptor.putProperty("WizardPanel_errorMessage", message); // NOI18N return false; } } } wizardDescriptor.putProperty("WizardPanel_errorMessage", ""); // NOI18N return true; } void store(WizardDescriptor d) { ComponentRootNode compRootNode = (ComponentRootNode)this.manager.getRootContext(); Hashtable<String,String[]> depTypeStructure = getDependentTypeStructure(compRootNode); Vector<String> dumpTypes = getTypes(compRootNode); Enumeration e = designedDataTypes.keys(); int ifcCounter = 0; int serviceCounter = 0; while (e.hasMoreElements()) { int objectCounter; String el = (String)e.nextElement(); NbNodeObject object = (NbNodeObject)designedDataTypes.get(el); // get info about the structure Object structureType = depTypeStructure.get(object.getDisplayName()); String[] depTypes = null; if (structureType != null) { depTypes = (String[])structureType; } if (object instanceof Interface) { Interface ifc = (Interface)object; if (depTypes != null) { for (int i=0; i<depTypes.length; i++) { Object o = designedDataTypes.get(depTypes[i]); if (o != null) ifc.addAggregatedInterface((Interface)o); } } } else if (object instanceof Service) { Service srvc = (Service)object; if (depTypes != null) { for (int i=0; i<depTypes.length; i++) { Object o = designedDataTypes.get(depTypes[i]); if (o != null) srvc.addSetObject("ifc".concat(new Integer(i).toString()), (Interface)o); // NOI18N } } } } d.putProperty("DesignedTypes", designedDataTypes); // NOI18N d.putProperty("DumpTypes", dumpTypes); // NOI18N } void read(WizardDescriptor settings) { designedDataTypes = new Hashtable<String,NbNodeObject>(); pkgName = (String)settings.getProperty("package"); // NOI18N serviceName = ((String)settings.getProperty("service")).concat("Service"); // NOI18N interfaceName = "X".concat((String)settings.getProperty("service")); // NOI18N initialize(); } void validate(WizardDescriptor d) throws WizardValidationException { // nothing to validate } public NbNodeObject[] getDesignedTypes() { if (designedDataTypes != null) { Collection<NbNodeObject> c = designedDataTypes.values(); return c.toArray(new NbNodeObject[c.size()]); } return null; } public void addNewDataType(String oldName, String newName, NbNodeObject object) { ComponentListPanel compListPanel = (ComponentListPanel)jPanel1; ExplorerManager compListManager = compListPanel.getExplorerManager(); TypeRootNode rootNode = (TypeRootNode)compListManager.getRootContext(); Node[] nodes = rootNode.getChildren().getNodes(); boolean updateUpperPanel = false; // remove from types if already there if (!newName.equals(oldName)) { designedDataTypes.remove(oldName); } // enter the new type into the list panel (again, if removed) // NbNodeObject object = (NbNodeObject)o; designedDataTypes.put(newName, object); // write into type node: own types can be used. Collection<NbNodeObject> c = designedDataTypes.values(); TypeNode.setDesignedTypes(c.toArray(new NbNodeObject[c.size()])); String dataTypeName = null; int type = 0; // get the type of object int nbNodeObjectType = object.getType(); switch (nbNodeObjectType) { case NbNodeObject.INTERFACE_TYPE: dataTypeName = DataType.INTERFACE_TYPE_NAME; type = DataType.INTERFACE_TYPE; updateUpperPanel = true; // this may affect upper panel break; case NbNodeObject.SERVICE_TYPE: dataTypeName = DataType.SERVICE_TYPE_NAME; type = DataType.SERVICE_TYPE; updateUpperPanel = true; // this may affect upper panel break; case NbNodeObject.ENUMERATION_TYPE: dataTypeName = DataType.ENUM_TYPE_NAME; type = DataType.ENUM_TYPE; break; case NbNodeObject.STRUCT_TYPE: dataTypeName = DataType.STRUCT_TYPE_NAME; type = DataType.STRUCT_TYPE; break; case NbNodeObject.EXCEPTION_TYPE: dataTypeName = DataType.EXCEPTION_TYPE_NAME; type = DataType.EXCEPTION_TYPE; break; case NbNodeObject.POLY_STRUCT_TYPE: dataTypeName = DataType.POLY_STRUCT_TYPE_NAME; type = DataType.POLY_STRUCT_TYPE; break; default: LogWriter.getLogWriter().log(LogWriter.LEVEL_CRITICAL, "Not handled object type: " + nbNodeObjectType); // NOI18N } // update lower panel for (int i=0; i<nodes.length; i++) { DataTypeNode dataTypeNode = (DataTypeNode)nodes[i]; DataType dataType = (DataType)dataTypeNode.getLookup().lookup(DataType.class); if (dataType.getType() == DataType.FOLDER_TYPE && dataType.getTypesName().equals(dataTypeName)) { if (!newName.equals(oldName)) { if (dataType.getTypeForName(oldName) != null) { dataType.deleteType(oldName); } } dataType.addTypeWithName(newName, new DataType(dataType, type, newName)); TypeNodeChildren children = (TypeNodeChildren)dataTypeNode.getChildren(); children.update(); // updates nodes // dataTypeNode.setPreferred(true); ComponentListPanel clPanel = (ComponentListPanel)this.jPanel1; Node node = children.findChild(newName); clPanel.selectNode(node); } } // update upper panel if (updateUpperPanel) { nodes = manager.getRootContext().getChildren().getNodes(); updateUpperPanel(nodes, oldName, newName); } } private void updateUpperPanel(Node[] nodes, String oldName, String newName) { if (nodes != null) { // step through nodes and update: should not be too much work for (int i = 0; i < nodes.length; i++) { Node selectedNode = nodes[i]; org.openoffice.extensions.projecttemplates.component.datamodel.Service srv = (org.openoffice.extensions.projecttemplates.component.datamodel.Service) selectedNode.getLookup().lookup(org.openoffice.extensions.projecttemplates.component.datamodel.Service.class); if (srv != null) { if (srv.getDisplayName().equals(oldName)) { srv.setHierarchicalName(newName); ServiceNode sNode = (ServiceNode)selectedNode; sNode.update(); panel.fireChangeEvent(); } else { updateUpperPanel(selectedNode.getChildren().getNodes(), oldName, newName); } } org.openoffice.extensions.projecttemplates.component.datamodel.Interface ifc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface) selectedNode.getLookup().lookup(org.openoffice.extensions.projecttemplates.component.datamodel.Interface.class); if (ifc != null) { if (ifc.getDisplayName().equals(oldName)) { ifc.setHierarchicalName(newName); InterfaceNode iNode = (InterfaceNode)selectedNode; iNode.update(); panel.fireChangeEvent(); } else { updateUpperPanel(selectedNode.getChildren().getNodes(), oldName, newName); } } } } } public void propertyChange(PropertyChangeEvent evt) { // because of TreeSelectionModel.SINGLE_TREE_SELECTION max. one node is selected Node[] selectedNodes = manager.getSelectedNodes(); if (selectedNodes.length > 0) { Node selectedNode = selectedNodes[0]; if (selectedNode instanceof ServiceNode || selectedNode instanceof InterfaceNode) { deleteServiceButton.setEnabled(true); // delete } else deleteServiceButton.setEnabled(false); } ComponentListPanel clPanel = (ComponentListPanel)this.jPanel1; selectedNodes = clPanel.getExplorerManager().getSelectedNodes(); if (selectedNodes != null && selectedNodes.length > 0) { Object o = selectedNodes[0].getLookup().lookup(DataType.class); if (o != null) { DataType set = (DataType)o; switch (set.getType()) { case DataType.FOLDER_TYPE: // folder: no edit, no delete editDataTypeButton.setEnabled(false); // edit deleteDataTypeButton.setEnabled(false); // delete break; default: editDataTypeButton.setEnabled(true); // edit deleteDataTypeButton.setEnabled(true); // delete break; } } } panel.fireChangeEvent(); // Notify that the panel changed } public void addNewServiceOrInterface(String hierarchicalName, int type, boolean isOwnDesign) { String displayName = hierarchicalName.substring(hierarchicalName.lastIndexOf('.') + 1); String pkg = hierarchicalName.substring(0, hierarchicalName.lastIndexOf('.')); if (type == UnoTypes.SERVICE_TYPE) { org.openoffice.extensions.projecttemplates.component.datamodel.Service srvc = new org.openoffice.extensions.projecttemplates.component.datamodel.Service(displayName, pkg, isOwnDesign); // get a specified interface from service Service s = (Service)this.designedDataTypes.get(hierarchicalName); if (s != null) { Interface i = (Interface)s.getSetObject(); if (i != null) { try { String ifcName = i.getSimpleProperty(i.PROPERTY_CONTAINER_NAME); String ifcPackage = i.getSimpleProperty(i.PROPERTY_CONTAINER_PACKAGE); boolean ifcIsOwnDesign = this.designedDataTypes.containsKey(ifcPackage.concat(".").concat(ifcName)); // NOI18N org.openoffice.extensions.projecttemplates.component.datamodel.Interface newIfc = new org.openoffice.extensions.projecttemplates.component.datamodel.Interface( ifcName, ifcPackage, ifcIsOwnDesign); srvc.addInterface(newIfc); } catch (UnknownOpenOfficeOrgPropertyException ex) { LogWriter.getLogWriter().printStackTrace(ex); } } } ComponentRootNode compRootNode = (ComponentRootNode)this.manager.getRootContext(); compRootNode.addSubType(srvc); ComponentNodeChildren ch = (ComponentNodeChildren)compRootNode.getChildren(); ch.update(); // update the nodes // compRootNode.update(); } else if (type == UnoTypes.INTERFACE_TYPE) { // find out what's selected Node[] selNodes = this.manager.getSelectedNodes(); if (selNodes != null && selNodes.length > 0) { // create an interface in any case org.openoffice.extensions.projecttemplates.component.datamodel.Interface newIfc = new org.openoffice.extensions.projecttemplates.component.datamodel.Interface(displayName, pkg, isOwnDesign); Node updateNode = selNodes[0]; if (updateNode instanceof ServiceNode) { org.openoffice.extensions.projecttemplates.component.datamodel.Service srvc = (org.openoffice.extensions.projecttemplates.component.datamodel.Service) updateNode.getLookup().lookup(org.openoffice.extensions.projecttemplates.component.datamodel.Service.class); if (srvc.isOwnDesign()) { // overwrite an existing one! srvc.addInterface(newIfc); } else { updateNode = manager.getRootContext(); ComponentRootNode rootNode = (ComponentRootNode)updateNode; rootNode.addSubType(newIfc); } } else if (updateNode instanceof InterfaceNode) { org.openoffice.extensions.projecttemplates.component.datamodel.Interface ifc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface) updateNode.getLookup().lookup(org.openoffice.extensions.projecttemplates.component.datamodel.Interface.class); if (ifc.isOwnDesign()) { ifc.addInterface(newIfc); } else { boolean foundNode = false; updateNode = updateNode.getParentNode(); while(!foundNode) { if (updateNode instanceof ComponentRootNode) { // root node foundNode = true; ComponentRootNode rootNode = (ComponentRootNode)updateNode; rootNode.addSubType(newIfc); } else if (updateNode instanceof InterfaceNode) { org.openoffice.extensions.projecttemplates.component.datamodel.Interface parentIfc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface) updateNode.getLookup().lookup(org.openoffice.extensions.projecttemplates.component.datamodel.Interface.class); if (parentIfc.isOwnDesign()) { foundNode = true; parentIfc.addInterface(newIfc); } else { updateNode = updateNode.getParentNode(); } } else { updateNode = updateNode.getParentNode(); } } } } else { // root node selected. ComponentRootNode rootNode = (ComponentRootNode)updateNode; rootNode.addSubType(newIfc); } ComponentNodeChildren ch = (ComponentNodeChildren)updateNode.getChildren(); ch.update(); // update the nodes } } } private Node getOwnDataTypesRootNode() { return TypeRootNode.createInitialNodeStructure(serviceName, interfaceName); } /** * analyse the structure of services and interfaces: search for own services and own multi-inheritance interfaces; * get dependent types for them */ private Hashtable<String,String[]> getDependentTypeStructure(ComponentRootNode compRootNode) { Hashtable<String,String[]> depTypes = new Hashtable<String,String[]>(); Collection<Object> c = compRootNode.getSubTypesAsCollection(); for (Iterator i = c.iterator(); i.hasNext();) { Object o = i.next(); if (o instanceof org.openoffice.extensions.projecttemplates.component.datamodel.Service) { org.openoffice.extensions.projecttemplates.component.datamodel.Service srv = (org.openoffice.extensions.projecttemplates.component.datamodel.Service)o; Collection ifcs = srv.getInterfaces(); for (Iterator ifcIterator = ifcs.iterator(); ifcIterator.hasNext();) { org.openoffice.extensions.projecttemplates.component.datamodel.Interface ifc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface)ifcIterator.next(); if (srv.isOwnDesign() && ifc.isOwnDesign()) depTypes.put(srv.getName(), new String[]{ifc.getName()}); putAllDependentIfcNames(ifc, depTypes); } } else if (o instanceof org.openoffice.extensions.projecttemplates.component.datamodel.Interface) { org.openoffice.extensions.projecttemplates.component.datamodel.Interface ifc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface)o; putAllDependentIfcNames(ifc, depTypes); } } return depTypes; } private void putAllDependentIfcNames(org.openoffice.extensions.projecttemplates.component.datamodel.Interface ifc, Hashtable<String,String[]> depTypes) { Collection c = ifc.getInterfaces(); Vector<String> depTypeNames = new Vector<String>(); int i=0; for (Iterator ifcIterator = c.iterator(); ifcIterator.hasNext(); i++) { org.openoffice.extensions.projecttemplates.component.datamodel.Interface nextIfc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface)ifcIterator.next(); if (nextIfc.isOwnDesign()) { if (!nextIfc.getName().equals(ifc.getName())) // just avoid endless recursion putAllDependentIfcNames(nextIfc, depTypes); depTypeNames.add(nextIfc.getName()); } } int size = depTypeNames.size(); if(size>0) depTypes.put(ifc.getName(), depTypeNames.toArray(new String[size])); } /** * get all types that need to be dumped by skeletonmaker: * own idls as well as office types * @parm compRootNode the root node of the types */ private Vector<String> getTypes(ComponentRootNode compRootNode) { Vector<String> officeTypes = new Vector<String>(); Collection c = compRootNode.getSubTypesAsCollection(); for (Iterator i = c.iterator(); i.hasNext();) { Object o = i.next(); if (o instanceof org.openoffice.extensions.projecttemplates.component.datamodel.Service) { org.openoffice.extensions.projecttemplates.component.datamodel.Service srv = (org.openoffice.extensions.projecttemplates.component.datamodel.Service)o; officeTypes.add(srv.getHierarchicalName()); } else if (o instanceof org.openoffice.extensions.projecttemplates.component.datamodel.Interface) { org.openoffice.extensions.projecttemplates.component.datamodel.Interface ifc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface)o; getTypesRecursively(ifc, officeTypes); } } return officeTypes; } /** * get types recursively from interface, when it's multi inherited, * stuff may be mentioned multiple times * @param ifc the interface * @param v the vector to put the datat types in; ifc is put in first */ private void getTypesRecursively(org.openoffice.extensions.projecttemplates.component.datamodel.Interface ifc, Vector<String> v) { v.add(ifc.getHierarchicalName()); Collection c = ifc.getInterfaces(); for (Iterator i = c.iterator(); i.hasNext();) { Object o = i.next(); org.openoffice.extensions.projecttemplates.component.datamodel.Interface newIfc = (org.openoffice.extensions.projecttemplates.component.datamodel.Interface)o; getTypesRecursively(newIfc, v); } } private org.openoffice.extensions.projecttemplates.component.datamodel.Service getService(Node node) { ComponentRootNode rootNode = (ComponentRootNode)node; Collection c = rootNode.getSubTypesAsCollection(); for (Iterator i = c.iterator(); i.hasNext();) { Object o = i.next(); if (o instanceof org.openoffice.extensions.projecttemplates.component.datamodel.Service) { return (org.openoffice.extensions.projecttemplates.component.datamodel.Service)o; } } return null; } static ComponentPanelVisual2IdlFiles componentPanelVisual2IdlFiles; static ComponentPanelVisual2IdlFiles getComponentPanelVisual2IdlFiles(ComponentWizardPanel2IdlFiles componentWizardPanel2IdlFiles) { componentPanelVisual2IdlFiles = new ComponentPanelVisual2IdlFiles(componentWizardPanel2IdlFiles); return componentPanelVisual2IdlFiles; } public static ComponentPanelVisual2IdlFiles getComponentPanelVisual2IdlFiles() { return componentPanelVisual2IdlFiles; } }