blob: bf67ba5df17dfb2df4973031b29c512bd9b2e779 [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.websvc.rest.wizard;
import java.awt.event.KeyAdapter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.lang.model.element.TypeElement;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;
import org.netbeans.api.java.source.ClassIndex.NameKind;
import org.netbeans.api.java.source.ClassIndex.SearchScope;
import org.netbeans.api.java.source.ClasspathInfo;
import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.ui.TypeElementFinder;
import org.openide.util.Utilities;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectUtils;
import org.netbeans.api.project.SourceGroup;
import org.netbeans.modules.websvc.rest.codegen.Constants;
import org.netbeans.modules.websvc.rest.codegen.Constants.MimeType;
import org.netbeans.modules.websvc.rest.codegen.model.GenericResourceBean;
import org.netbeans.modules.websvc.rest.support.SourceGroupSupport;
import org.netbeans.spi.java.project.support.ui.PackageView;
import org.netbeans.spi.project.ui.templates.support.Templates;
import org.openide.WizardDescriptor;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.Exceptions;
/**
*
* @author Nam Nguyen
*/
public class SingletonSetupPanelVisual extends javax.swing.JPanel
implements AbstractPanel.Settings, SourcePanel
{
private Project project;
private List<ChangeListener> listeners;
private boolean resourceClassNameOveridden;
/** Creates new form CrudSetupPanel */
public SingletonSetupPanelVisual(String name) {
setName(name);
this.listeners = new ArrayList<ChangeListener>();
initComponents();
packageComboBox.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
fireChange();
}
});
medaTypeComboBox.setModel(new DefaultComboBoxModel(GenericResourceBean.getSupportedMimeTypes()));
((JTextComponent) packageComboBox.getEditor().getEditorComponent()).getDocument().addDocumentListener(
new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
fireChange();
}
@Override
public void removeUpdate(DocumentEvent e) {
fireChange();
}
@Override
public void changedUpdate(DocumentEvent e) {
fireChange();
}
});
}
/** 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() {
classLabel = new javax.swing.JLabel();
classTextField = new javax.swing.JTextField();
uriLabel = new javax.swing.JLabel();
uriTextField = new javax.swing.JTextField();
projectLabel = new javax.swing.JLabel();
projectTextField = new javax.swing.JTextField();
locationLabel = new javax.swing.JLabel();
locationComboBox = new javax.swing.JComboBox();
packageLabel = new javax.swing.JLabel();
packageComboBox = new javax.swing.JComboBox();
medaTypeComboBox = new javax.swing.JComboBox();
mediaTypeLabel = new javax.swing.JLabel();
contentClassLabel = new javax.swing.JLabel();
selectClassButton = new javax.swing.JButton();
contentClassTextField = new javax.swing.JTextField();
jSeparator2 = new javax.swing.JSeparator();
setName(""); // NOI18N
setPreferredSize(new java.awt.Dimension(450, 193));
classLabel.setLabelFor(classTextField);
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/netbeans/modules/websvc/rest/wizard/Bundle"); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(classLabel, bundle.getString("MSG_ClassName")); // NOI18N
classTextField.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
classTextFieldKeyReleased(evt);
}
});
uriLabel.setLabelFor(uriTextField);
org.openide.awt.Mnemonics.setLocalizedText(uriLabel, org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "LBL_UriTemplate")); // NOI18N
uriTextField.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
uriTextFieldKeyReleased(evt);
}
});
projectLabel.setLabelFor(projectTextField);
org.openide.awt.Mnemonics.setLocalizedText(projectLabel, org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "LBL_Project")); // NOI18N
projectTextField.setEditable(false);
locationLabel.setLabelFor(locationComboBox);
org.openide.awt.Mnemonics.setLocalizedText(locationLabel, org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "LBL_SrcLocation")); // NOI18N
locationComboBox.setMinimumSize(new java.awt.Dimension(4, 20));
locationComboBox.setPreferredSize(new java.awt.Dimension(130, 25));
locationComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
locationComboBoxActionPerformed(evt);
}
});
packageLabel.setLabelFor(packageComboBox);
org.openide.awt.Mnemonics.setLocalizedText(packageLabel, org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "LBL_Package")); // NOI18N
packageComboBox.setEditable(true);
packageComboBox.setMinimumSize(new java.awt.Dimension(4, 20));
packageComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
packageChanged(evt);
}
});
packageComboBox.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
packageComboBoxKeyReleased(evt);
}
});
medaTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
medaTypeComboBox.setMinimumSize(new java.awt.Dimension(4, 20));
mediaTypeLabel.setLabelFor(medaTypeComboBox);
org.openide.awt.Mnemonics.setLocalizedText(mediaTypeLabel, org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "LBL_MimeType")); // NOI18N
contentClassLabel.setLabelFor(contentClassTextField);
org.openide.awt.Mnemonics.setLocalizedText(contentClassLabel, org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "LBL_RepresentationClass")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(selectClassButton, org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "LBL_Select")); // NOI18N
selectClassButton.setHorizontalAlignment(javax.swing.SwingConstants.LEADING);
selectClassButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
selectClassButtonActionPerformed(evt);
}
});
selectClassButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
mouseClickHandler(evt);
}
});
contentClassTextField.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
representationClassChanged(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(projectLabel)
.addComponent(contentClassLabel)
.addComponent(classLabel)
.addComponent(uriLabel)
.addComponent(mediaTypeLabel)
.addComponent(packageLabel)
.addComponent(locationLabel))
.addGap(7, 7, 7)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(classTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 303, Short.MAX_VALUE)
.addComponent(medaTypeComboBox, javax.swing.GroupLayout.Alignment.TRAILING, 0, 303, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(contentClassTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 218, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(selectClassButton))
.addComponent(uriTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 303, Short.MAX_VALUE)
.addComponent(locationComboBox, javax.swing.GroupLayout.Alignment.TRAILING, 0, 303, Short.MAX_VALUE)
.addComponent(packageComboBox, javax.swing.GroupLayout.Alignment.TRAILING, 0, 303, Short.MAX_VALUE)
.addComponent(projectTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 303, Short.MAX_VALUE))
.addContainerGap())
.addComponent(jSeparator2, javax.swing.GroupLayout.DEFAULT_SIZE, 454, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(projectLabel)
.addComponent(projectTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(3, 3, 3)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(locationComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(locationLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(packageComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(packageLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator2, 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(uriLabel)
.addComponent(uriTextField, 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(classLabel)
.addComponent(classTextField, 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(mediaTypeLabel)
.addComponent(medaTypeComboBox, 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.LEADING)
.addComponent(contentClassTextField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(contentClassLabel)
.addComponent(selectClassButton))))
);
classLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "ClassName")); // NOI18N
classLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_ClassName")); // NOI18N
classTextField.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "ClassName")); // NOI18N
classTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_ClassName")); // NOI18N
uriLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "UirTemplate")); // NOI18N
uriLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_Uri")); // NOI18N
uriTextField.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "UriTemplate")); // NOI18N
uriTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_Uri")); // NOI18N
projectLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "Project")); // NOI18N
projectLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_Project")); // NOI18N
projectTextField.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "Project")); // NOI18N
projectTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_Project")); // NOI18N
locationLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "Location")); // NOI18N
locationLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_Location")); // NOI18N
locationComboBox.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "Location")); // NOI18N
locationComboBox.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_Location")); // NOI18N
packageLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "ResourcePackage")); // NOI18N
packageLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_ResourcePackage")); // NOI18N
packageComboBox.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "ResourcePackage")); // NOI18N
packageComboBox.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_ResourcePackage")); // NOI18N
medaTypeComboBox.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "MimeType")); // NOI18N
medaTypeComboBox.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_MimeType")); // NOI18N
mediaTypeLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "MimeType")); // NOI18N
mediaTypeLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_MimeType")); // NOI18N
contentClassLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "RepresentationClass")); // NOI18N
contentClassLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_RepresentationClass")); // NOI18N
selectClassButton.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "SelectRepresentationClass")); // NOI18N
selectClassButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_SelectRepresenationClass")); // NOI18N
contentClassTextField.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "RepresentationClass")); // NOI18N
contentClassTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "DESC_RepresentationClass")); // NOI18N
getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "LBL_Specify_Resource_Class")); // NOI18N
getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SingletonSetupPanelVisual.class, "LBL_Specify_Resource_Class")); // NOI18N
}// </editor-fold>//GEN-END:initComponents
private void containerTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_containerTextFieldActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_containerTextFieldActionPerformed
private void representationClassChanged(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_representationClassChanged
fireChange();
}//GEN-LAST:event_representationClassChanged
private void selectClassButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectClassButtonActionPerformed
fireChange();
}//GEN-LAST:event_selectClassButtonActionPerformed
private void mouseClickHandler(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mouseClickHandler
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final ElementHandle<TypeElement> handle = TypeElementFinder.find(Util.getClasspathInfo(project), new TypeElementFinder.Customizer() {
public Set<ElementHandle<TypeElement>> query(ClasspathInfo classpathInfo, String textForQuery, NameKind nameKind, Set<SearchScope> searchScopes) {
return classpathInfo.getClassIndex().getDeclaredTypes(textForQuery, nameKind, searchScopes);
}
public boolean accept(ElementHandle<TypeElement> typeHandle) {
return true;
}
});
if (handle != null) {
contentClassTextField.setText(handle.getQualifiedName());
fireChange();
}
}
});
}//GEN-LAST:event_mouseClickHandler
private void locationComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_locationComboBoxActionPerformed
locationChanged();
}//GEN-LAST:event_locationComboBoxActionPerformed
private void classTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_classTextFieldKeyReleased
resourceClassNameOveridden = true;
fireChange();
}//GEN-LAST:event_classTextFieldKeyReleased
private void packageComboBoxKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_packageComboBoxKeyReleased
fireChange();
}//GEN-LAST:event_packageComboBoxKeyReleased
private void uriTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_uriTextFieldKeyReleased
// TODO add your handling code here:
String uri = uriTextField.getText();
if (!resourceClassNameOveridden) {
classTextField.setText(findFreeClassName(uri));
}
fireChange();
}//GEN-LAST:event_uriTextFieldKeyReleased
private void packageChanged(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_packageChanged
fireChange();
}//GEN-LAST:event_packageChanged
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel classLabel;
private javax.swing.JTextField classTextField;
private javax.swing.JLabel contentClassLabel;
private javax.swing.JTextField contentClassTextField;
private javax.swing.JSeparator jSeparator2;
private javax.swing.JComboBox locationComboBox;
private javax.swing.JLabel locationLabel;
private javax.swing.JComboBox medaTypeComboBox;
private javax.swing.JLabel mediaTypeLabel;
private javax.swing.JComboBox packageComboBox;
private javax.swing.JLabel packageLabel;
private javax.swing.JLabel projectLabel;
private javax.swing.JTextField projectTextField;
private javax.swing.JButton selectClassButton;
private javax.swing.JLabel uriLabel;
private javax.swing.JTextField uriTextField;
// End of variables declaration//GEN-END:variables
public void addChangeListener(ChangeListener listener) {
listeners.add(listener);
}
public void fireChange() {
ChangeEvent event = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(event);
}
}
public boolean valid(WizardDescriptor wizard) {
AbstractPanel.clearErrorMessage(wizard);
String resourceUri = uriTextField.getText().trim();
String packageName = getPackage();
String className = classTextField.getText().trim();
SourceGroup[] groups = SourceGroupSupport.getJavaSourceGroups(project);
if (groups == null || groups.length < 1) {
AbstractPanel.setErrorMessage(wizard, "MSG_NoJavaSourceRoots");
return false;
} else if (className.length() == 0 || !Utilities.isJavaIdentifier(className)) {
AbstractPanel.setErrorMessage(wizard, "MSG_InvalidResourceClassName");
return false;
} else if (resourceUri.length() == 0) {
AbstractPanel.setErrorMessage(wizard, "MSG_EmptyUriTemplate");
return false;
} else if (!Util.isValidPackageName(packageName)) {
AbstractPanel.setErrorMessage(wizard, "MSG_InvalidPackageName");
return false;
} else if (getResourceClassFile() != null) {
AbstractPanel.setErrorMessage(wizard, "MSG_ExistingClass");
return false;
} else if (!Util.isValidUri(resourceUri)) {
AbstractPanel.setErrorMessage(wizard, "MSG_IncorrectUriTemplate");
return false;
}
return true;
}
public SourceGroup getLocationValue() {
return (SourceGroup) locationComboBox.getSelectedItem();
}
public String getPackage() {
return ((JTextComponent) packageComboBox.getEditor().getEditorComponent()).getText();
}
private void locationChanged() {
updateSourceGroupPackages();
fireChange();
}
private String getResourceClassName() {
return classTextField.getText();
}
private FileObject getResourceClassFile() {
FileObject folder = null;
try {
folder = SourceGroupSupport.getFolderForPackage(getLocationValue(), getPackage());
if (folder != null) {
return folder.getFileObject(getResourceClassName(), Constants.JAVA_EXT);
}
} catch (IOException ex) {
//OK just return null
}
return null;
}
public static final String DEFAULT_URI = "generic";
public void read(WizardDescriptor settings) {
project = Templates.getProject(settings);
FileObject targetFolder = Templates.getTargetFolder(settings);
projectTextField.setText(ProjectUtils.getInformation(project).getDisplayName());
SourceGroup[] sourceGroups = SourceGroupSupport.getJavaSourceGroups(project);
SourceGroupUISupport.connect(locationComboBox, sourceGroups);
packageComboBox.setRenderer(PackageView.listRenderer());
updateSourceGroupPackages();
// set default source group and package cf. targetFolder
if (targetFolder != null) {
SourceGroup targetSourceGroup = SourceGroupSupport.findSourceGroupForFile(sourceGroups, targetFolder);
// if (targetSourceGroup == null) {
// targetSourceGroup = getLocationValue();
// targetFolder = targetSourceGroup.getRootFolder();
// }
if (targetSourceGroup != null) {
locationComboBox.setSelectedItem(targetSourceGroup);
String targetPackage = SourceGroupSupport.getPackageForFolder(targetSourceGroup, targetFolder);
if (targetPackage != null) {
((JTextComponent) packageComboBox.getEditor().getEditorComponent()).setText(targetPackage);
}
}
} else {
String targetPackage = (String) settings.getProperty(WizardProperties.TARGET_PACKAGE);
if (targetPackage != null) {
((JTextComponent) packageComboBox.getEditor().getEditorComponent()).setText(targetPackage);
}
}
String value = (String) settings.getProperty(WizardProperties.RESOURCE_URI);
if (value == null || value.trim().length() == 0) {
uriTextField.setText(DEFAULT_URI);
classTextField.setText(findFreeClassName(DEFAULT_URI));
//uriTextField.setText("/" + Util.pluralize(Util.lowerFirstChar(getResourceName())) + "/{name}"); //NOI18N
contentClassTextField.setText(GenericResourceBean.getDefaultRepresetationClass((MimeType) medaTypeComboBox.getSelectedItem()));
} else {
uriTextField.setText(value);
classTextField.setText((String) settings.getProperty(WizardProperties.RESOURCE_CLASS));
medaTypeComboBox.setSelectedItem(((MimeType[]) settings.getProperty(WizardProperties.MIME_TYPES))[0]);
String[] types = (String[]) settings.getProperty(WizardProperties.REPRESENTATION_TYPES);
if (types != null && types.length > 0) {
contentClassTextField.setText(types[0]);
}
}
}
public void store(WizardDescriptor settings) {
settings.putProperty(WizardProperties.RESOURCE_PACKAGE, getPackage());
settings.putProperty(WizardProperties.RESOURCE_CLASS, classTextField.getText());
settings.putProperty(WizardProperties.RESOURCE_URI, uriTextField.getText());
settings.putProperty(WizardProperties.MIME_TYPES, new MimeType[]{(MimeType) medaTypeComboBox.getSelectedItem()});
settings.putProperty(WizardProperties.REPRESENTATION_TYPES, new String[]{contentClassTextField.getText()});
settings.putProperty(WizardProperties.SOURCE_GROUP, getLocationValue());
try {
FileObject packageFO = SourceGroupSupport.getFolderForPackage(getLocationValue(), getPackage(), false);
if (packageFO != null) {
Templates.setTargetFolder(settings, packageFO);
} else {
Templates.setTargetFolder(settings, null);
settings.putProperty(WizardProperties.TARGET_PACKAGE, getPackage());
}
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
}
@Override
public SourceGroup getSourceGroup() {
return (SourceGroup) locationComboBox.getSelectedItem();
}
@Override
public String getPackageName() {
return ((JTextComponent) packageComboBox.getEditor().getEditorComponent()).getText();
}
public double getRenderedHeight(){
return selectClassButton.getLocation().getY()+
selectClassButton.getSize().getHeight()+getGap();
}
private double getGap(){
double gap = contentClassTextField.getLocation().getY();
gap = gap - (medaTypeComboBox.getLocation().getY() +medaTypeComboBox.getHeight());
return gap;
}
private void updateSourceGroupPackages() {
SourceGroup sourceGroup = getSourceGroup();
if (sourceGroup != null) {
ComboBoxModel model = PackageView.createListView(sourceGroup);
if (model.getSelectedItem() != null && model.getSelectedItem().toString().startsWith("META-INF") && model.getSize() > 1) { // NOI18N
model.setSelectedItem(model.getElementAt(1));
}
packageComboBox.setModel(model);
}
}
private String findFreeClassName(String uri) {
try {
FileObject folder = SourceGroupSupport.getFolderForPackage(getLocationValue(), getPackage());
if (folder != null) {
return FileUtil.findFreeFileName(folder, Util.deriveResourceClassName(uri), Constants.JAVA_EXT);
}
} catch (IOException ex) {
//OK just return null
Exceptions.printStackTrace(ex);
}
return null;
}
}