blob: 186c79d42d145fb16e6ee812464450ac6dd094b4 [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.
*/
/*
* RESTResourcesPanel.java
*
* Created on 02-Feb-2010, 10:21:21
*/
package org.netbeans.modules.websvc.rest.client;
import java.io.IOException;
import javax.swing.DefaultComboBoxModel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.xml.bind.JAXBException;
import org.netbeans.modules.websvc.rest.model.api.RestServiceDescription;
import org.netbeans.modules.websvc.saas.model.WadlSaas;
import org.netbeans.modules.websvc.saas.model.WadlSaasResource;
import org.netbeans.modules.websvc.saas.model.jaxb.SaasMetadata.Authentication;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.WizardDescriptor;
import org.openide.nodes.Node;
import org.openide.util.NbBundle;
/**
*
* @author mkuchtiak
*/
public class RESTResourcesPanel extends javax.swing.JPanel {
private Object[] cbDefault = new Object[] {Security.Authentication.NONE, Security.Authentication.BASIC};
boolean securityDefault=true;
private Node resourceNode;
private DialogDescriptor descriptor;
private boolean nameChangedByUser = false;
private JerseyClientWizardPanel wizardPanel;
/** Creates new form RESTResourcesPanel */
public RESTResourcesPanel(JerseyClientWizardPanel wizardPanel) {
init();
this.wizardPanel = wizardPanel;
jLabel2.setVisible(false);
jTextField2.setVisible(false);
}
public RESTResourcesPanel() {
init();
jTextField2.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
nameChanged();
}
@Override
public void removeUpdate(DocumentEvent e) {
nameChanged();
}
@Override
public void changedUpdate(DocumentEvent e) {
nameChanged();
}
});
}
private void init() {
initComponents();
jTextField1.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
resourceChanged();
}
@Override
public void removeUpdate(DocumentEvent e) {
resourceChanged();
}
@Override
public void changedUpdate(DocumentEvent e) {
resourceChanged();
}
});
jComboBox1.setModel(new DefaultComboBoxModel(cbDefault));
}
/** 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jComboBox1 = new javax.swing.JComboBox();
jCheckBox1 = new javax.swing.JCheckBox();
jPanel1 = new javax.swing.JPanel();
jRadioButton1 = new javax.swing.JRadioButton();
jRadioButton2 = new javax.swing.JRadioButton();
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jLabel1.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jButton1.text")); // NOI18N
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel2.setLabelFor(jTextField2);
org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jLabel2.text")); // NOI18N
jLabel3.setLabelFor(jTextField1);
org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jLabel3.text")); // NOI18N
jTextField1.setEditable(false);
jLabel4.setLabelFor(jComboBox1);
org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jLabel4.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jCheckBox1, org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jCheckBox1.text")); // NOI18N
jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
buttonGroup1.add(jRadioButton1);
jRadioButton1.setSelected(true);
org.openide.awt.Mnemonics.setLocalizedText(jRadioButton1, org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jRadioButton1.text")); // NOI18N
jRadioButton1.setToolTipText(org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jRadioButton1_hint")); // NOI18N
jPanel1.add(jRadioButton1);
buttonGroup1.add(jRadioButton2);
org.openide.awt.Mnemonics.setLocalizedText(jRadioButton2, org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jRadioButton2.text")); // NOI18N
jRadioButton2.setToolTipText(org.openide.util.NbBundle.getMessage(RESTResourcesPanel.class, "RESTResourcesPanel.jRadioButton2_hint")); // NOI18N
jPanel1.add(jRadioButton2);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1))
.addComponent(jLabel3)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 358, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jComboBox1, 0, 198, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jCheckBox1))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addGap(28, 28, 28)
.addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 249, Short.MAX_VALUE))
.addComponent(jLabel1))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jButton1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(4, 4, 4)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jCheckBox1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
void setDescriptor(DialogDescriptor descriptor) {
this.descriptor = descriptor;
descriptor.setValid(false);
}
private void resourceChanged() {
WadlSaasResource saasResource = resourceNode.getLookup().lookup(WadlSaasResource.class);
if (saasResource != null) {
boolean isOauth = false;
try {
if (saasResource.getSaas().getOauthMetadata() != null) {
jComboBox1.setModel(new DefaultComboBoxModel(new Object[] {Security.Authentication.OAUTH}));
securityDefault = false;
isOauth = true;
}
} catch (IOException ex) {
} catch (JAXBException ex) {
}
if (!isOauth) {
Authentication auth = saasResource.getSaas().getSaasMetadata().getAuthentication();
if (auth != null) {
if (auth.getSessionKey().size() > 0) {
jComboBox1.setModel(new DefaultComboBoxModel(new Object[] {Security.Authentication.SESSION_KEY}));
securityDefault = false;
} else if (auth.getHttpBasic() != null) {
jComboBox1.setModel(new DefaultComboBoxModel(new Object[] {Security.Authentication.BASIC}));
securityDefault = false;
} else {
if (!securityDefault) {
jComboBox1.setModel(new DefaultComboBoxModel(cbDefault));
securityDefault = true;
}
}
} else {
if (!securityDefault) {
jComboBox1.setModel(new DefaultComboBoxModel(cbDefault));
securityDefault = true;
}
}
}
} else {
if (!securityDefault) {
jComboBox1.setModel(new DefaultComboBoxModel(cbDefault));
securityDefault = true;
}
}
jComboBox1.setEnabled(securityDefault);
if (wizardPanel == null) {
if (!nameChangedByUser
|| jTextField2.getText().trim().length() == 0)
{
if (saasResource != null) {
jTextField2.setText(Wadl2JavaHelper
.getClientClassName(saasResource));
}
else {
RestServiceDescription restServiceDesc = resourceNode
.getLookup().lookup(RestServiceDescription.class);
if (restServiceDesc != null) {
jTextField2.setText(restServiceDesc.getName()
+ "_JerseyClient"); // NOI18N
}
}
}
} else {
wizardPanel.fireChangeEvent();
}
}
private void nameChanged() {
if (wizardPanel == null) {
if (jTextField2.getText().trim().length() == 0) {
descriptor.setValid(false);
} else if (resourceNode == null) {
descriptor.setValid(false);
} else {
descriptor.setValid(true);
}
nameChangedByUser = true;
}
}
boolean isValid(WizardDescriptor wiz) {
if (wizardPanel != null && wiz != null) {
if (resourceNode != null) {
return true;
} else {
wiz.putProperty(WizardDescriptor.PROP_INFO_MESSAGE, NbBundle.getMessage(RESTResourcesPanel.class, "LBL_SelectRestResource")); //NOI18N
return false;
}
}
return true;
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
if (jRadioButton1.isSelected()) {
RESTExplorerPanel explorerPanel = new RESTExplorerPanel();
DialogDescriptor desc = new DialogDescriptor(explorerPanel,
NbBundle.getMessage(RESTResourcesPanel.class,"TTL_RESTResources")); //NOI18N
explorerPanel.setDescriptor(desc);
if (DialogDisplayer.getDefault().notify(desc).equals(NotifyDescriptor.OK_OPTION)) {
resourceNode = explorerPanel.getSelectedService();
boolean isChangedByUser = nameChangedByUser;
jTextField1.setText(resourceNode.getDisplayName());
if (!isChangedByUser) {
nameChangedByUser = false;
}
}
} else {
SaasExplorerPanel explorerPanel = new SaasExplorerPanel();
DialogDescriptor desc = new DialogDescriptor(explorerPanel,
NbBundle.getMessage(RESTResourcesPanel.class,"TTL_RESTResources")); //NOI18N
explorerPanel.setDescriptor(desc);
if (DialogDisplayer.getDefault().notify(desc).equals(NotifyDescriptor.OK_OPTION)) {
resourceNode = explorerPanel.getSelectedService();
boolean isChangedByUser = nameChangedByUser;
jTextField1.setText(getSaasResourceName(resourceNode));
if (!isChangedByUser) {
nameChangedByUser = false;
}
}
}
if (resourceNode != null && wizardPanel == null) {
descriptor.setValid(true);
}
}//GEN-LAST:event_jButton1ActionPerformed
public static String getSaasResourceName(Node node) {
WadlSaasResource saasResource = node.getLookup().lookup(WadlSaasResource.class);
String resourceName = saasResource.getResource().getPath();
if (resourceName.startsWith("/")) { //NOI18N
resourceName = resourceName.substring(1);
}
Node saasNode = node.getParentNode();
while (saasNode != null && saasNode.getLookup().lookup(WadlSaas.class) == null) {
saasResource = saasNode.getLookup().lookup(WadlSaasResource.class);
if (saasResource != null) {
String path = saasResource.getResource().getPath();
if (path.startsWith("/")) {
path = path.substring(1);
}
if (path.endsWith("/")) {
path = path.substring(0, path.length()-1);
}
if (path.length() > 0) {
resourceName = path+"/"+resourceName;
}
} else {
resourceName = saasNode.getDisplayName()+"/"+resourceName;
}
saasNode = saasNode.getParentNode();
}
if (saasNode != null) {
resourceName = saasNode.getDisplayName()+" ["+resourceName+"]"; //NOI18N
}
return resourceName;
}
public Node getResourceNode() {
return resourceNode;
}
public String getResourceName() {
return jTextField1.getText().trim();
}
public String getClassName() {
return jTextField2.getText().trim();
}
public Security getSecurity () {
return new Security(jCheckBox1.isSelected(), (Security.Authentication)jComboBox1.getSelectedItem());
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JButton jButton1;
private javax.swing.JCheckBox jCheckBox1;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JPanel jPanel1;
private javax.swing.JRadioButton jRadioButton1;
private javax.swing.JRadioButton jRadioButton2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration//GEN-END:variables
}