blob: 48c3dfbbb030b826c2d4fbc8289744257b64b36b [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.
*/
/*
* TestRestTargetPanel.java
*
* Created on 06.05.2011, 14:58:15
*/
package org.netbeans.modules.websvc.rest.support;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectUtils;
import org.netbeans.api.project.SourceGroup;
import org.netbeans.modules.web.api.webmodule.WebProjectConstants;
import org.netbeans.modules.websvc.rest.client.RESTExplorerPanel;
import org.netbeans.modules.websvc.rest.client.RESTExplorerPanel.ProjectNodeFactory;
import org.netbeans.modules.websvc.rest.spi.RestSupport;
import org.netbeans.spi.project.ui.LogicalViewProvider;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.nodes.Children;
import org.openide.nodes.FilterNode;
import org.openide.nodes.Node;
import org.openide.util.NbBundle;
/**
*
* @author den
*/
public class TestRestTargetPanel extends javax.swing.JPanel {
private static final String TEST_CLIENT_PROJECT ="test.client.project"; // NOI18N
private static final ProjectNodeFactory WEB_PROJECT_FACTORY = new WebProjectFactory();
public TestRestTargetPanel(Project project) {
myProject = project;
initComponents();
myNotice.setText( NbBundle.getMessage(TestRestTargetPanel.class,
"TXT_Notice"));
myNotice.putClientProperty(javax.swing.JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
myRemote.setSelected(true);
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed( ActionEvent event ) {
Object source = event.getSource();
if ( source == myLocal ){
myBrowse.setEnabled( false );
setTargetProject(myProject, false);
storeSelectedProject();
}
else if ( source == myRemote ){
myBrowse.setEnabled( true );
setTargetProject(null, false);
storeSelectedProject();
}
}
};
myLocal.addActionListener(listener);
myRemote.addActionListener(listener);
myBrowse.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
RESTExplorerPanel explorerPanel = new RESTExplorerPanel(
WEB_PROJECT_FACTORY);
DialogDescriptor desc = new DialogDescriptor(explorerPanel,
NbBundle.getMessage(TestRestTargetPanel.class,
"TTL_Projects")); //NOI18N
explorerPanel.setDescriptor(desc);
if (DialogDisplayer.getDefault().notify(desc).equals(
NotifyDescriptor.OK_OPTION))
{
Node node = explorerPanel.getSelectedService();
setTargetProject( node.getLookup().lookup(Project.class), true);
storeSelectedProject();
}
}
});
initTargetProject();
}
Project getProject(){
return myChosenProject;
}
boolean isRemote(){
return isRemote;
}
void setDescriptor( DialogDescriptor descriptor ) {
myDescriptor = descriptor;
}
/** 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() {
myButtonGroup = new javax.swing.ButtonGroup();
myLocal = new javax.swing.JRadioButton();
myRemote = new javax.swing.JRadioButton();
myBrowse = new javax.swing.JButton();
myTargetLbl = new javax.swing.JLabel();
myTarget = new javax.swing.JTextField();
myNoticeLbl = new javax.swing.JLabel();
myScrollPane = new javax.swing.JScrollPane();
myNotice = new javax.swing.JEditorPane();
myButtonGroup.add(myLocal);
org.openide.awt.Mnemonics.setLocalizedText(myLocal, org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "LBL_Local")); // NOI18N
myButtonGroup.add(myRemote);
org.openide.awt.Mnemonics.setLocalizedText(myRemote, org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "LBL_Remote")); // NOI18N
myRemote.setActionCommand(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "TestRestTargetPanel.myRemote.actionCommand")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(myBrowse, org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "LBL_Browse")); // NOI18N
myTargetLbl.setLabelFor(myTarget);
org.openide.awt.Mnemonics.setLocalizedText(myTargetLbl, org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "LBL_Target")); // NOI18N
myTarget.setEditable(false);
myNoticeLbl.setLabelFor(myNotice);
org.openide.awt.Mnemonics.setLocalizedText(myNoticeLbl, org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "LBL_Notion")); // NOI18N
myNotice.setEditable(false);
myNotice.setContentType("text/html"); // NOI18N
myScrollPane.setViewportView(myNotice);
myNotice.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSN_NoticeDescr")); // NOI18N
myNotice.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSD_NoticeDescr")); // NOI18N
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)
.addComponent(myScrollPane, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(myLocal)
.addGroup(layout.createSequentialGroup()
.addComponent(myRemote)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(myBrowse))
.addGroup(layout.createSequentialGroup()
.addComponent(myTargetLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(myTarget, javax.swing.GroupLayout.DEFAULT_SIZE, 544, Short.MAX_VALUE))
.addComponent(myNoticeLbl))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(myLocal)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(myRemote)
.addComponent(myBrowse))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(myTargetLbl)
.addComponent(myTarget, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(myNoticeLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(myScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 225, Short.MAX_VALUE)
.addContainerGap())
);
myLocal.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSN_Local")); // NOI18N
myLocal.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSD_Local")); // NOI18N
myRemote.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSN_Remote")); // NOI18N
myRemote.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSD_Remote")); // NOI18N
myBrowse.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSN_Browse")); // NOI18N
myBrowse.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSD_Browse")); // NOI18N
myTargetLbl.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSN_Target")); // NOI18N
myTargetLbl.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSD_Target")); // NOI18N
myTarget.getAccessibleContext().setAccessibleName(myTargetLbl.getAccessibleContext().getAccessibleName());
myTarget.getAccessibleContext().setAccessibleDescription(myTargetLbl.getAccessibleContext().getAccessibleDescription());
myNoticeLbl.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSN_Notice")); // NOI18N
myNoticeLbl.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(TestRestTargetPanel.class, "ACSD_Notice")); // NOI18N
}// </editor-fold>//GEN-END:initComponents
private static class WebProjectFactory implements ProjectNodeFactory {
/* (non-Javadoc)
* @see org.netbeans.modules.websvc.rest.client.RESTExplorerPanel.ProjectNodeFactory#createNode(org.netbeans.api.project.Project)
*/
@Override
public Node createNode( Project project ) {
LogicalViewProvider logicalProvider = (LogicalViewProvider)project.
getLookup().lookup(LogicalViewProvider.class);
RestSupport support = project.getLookup().lookup(RestSupport.class);
SourceGroup[] sourceGroups = ProjectUtils.getSources(project).
getSourceGroups(WebProjectConstants.TYPE_DOC_ROOT);
if (logicalProvider!=null && support != null && sourceGroups != null &&
sourceGroups.length >0 )
{
Node rootNode = logicalProvider.createLogicalView();
return new FilterNode( rootNode , Children.LEAF );
}
return null;
}
/* (non-Javadoc)
* @see org.netbeans.modules.websvc.rest.client.RESTExplorerPanel.ProjectNodeFactory#canSelect(org.openide.nodes.Node)
*/
@Override
public boolean canSelect( Node node ) {
return true;
}
}
private void initTargetProject(){
RestSupport support = myProject.getLookup().lookup(RestSupport.class);
String clientProject = support.getProjectProperty(TEST_CLIENT_PROJECT);
if ( clientProject == null ){
setTargetProject(myProject, true);
}
else {
myLocal.setSelected(false);
myRemote.setSelected(true);
myBrowse.setEnabled(true);
File file = new File( clientProject );
if ( file.exists() ){
FileObject fileObject = FileUtil.toFileObject(
FileUtil.normalizeFile(file));
Project project = FileOwnerQuery.getOwner(fileObject);
setTargetProject(project, true);
}
}
}
private void storeSelectedProject(){
RestSupport support = myProject.getLookup().lookup(RestSupport.class);
if (isRemote) {
FileObject projectDir = myChosenProject.getProjectDirectory();
try {
String path = FileUtil.toFile(projectDir).getCanonicalPath();
support.setPrivateProjectProperty(TEST_CLIENT_PROJECT, path);
}
catch (IOException e) {
Logger.getLogger(TestRestTargetPanel.class.getCanonicalName())
.log(Level.INFO, null, e);
}
}
else {
support.removeProjectProperties(new String[]{ TEST_CLIENT_PROJECT});
}
}
private void setTargetProject(Project project, boolean remote ){
isRemote = remote;
myChosenProject = project;
if ( myDescriptor != null ){
myDescriptor.setValid( project != null );
}
if (project == null){
myTarget.setText( "" );
return;
}
if ( remote ){
SourceGroup[] sourceGroups = ProjectUtils.getSources(project).
getSourceGroups(WebProjectConstants.TYPE_DOC_ROOT);
SourceGroup sourceGroup = sourceGroups[0];
FileObject rootFolder = sourceGroup.getRootFolder();
File file = FileUtil.toFile(rootFolder);
myTarget.setText( file.getPath());
}
else {
RestSupport support = project.getLookup().lookup(RestSupport.class);
File file = support.getLocalTargetTestRest();
if ( file!=null){
myTarget.setText( file.getPath());
}
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton myBrowse;
private javax.swing.ButtonGroup myButtonGroup;
private javax.swing.JRadioButton myLocal;
private javax.swing.JEditorPane myNotice;
private javax.swing.JLabel myNoticeLbl;
private javax.swing.JRadioButton myRemote;
private javax.swing.JScrollPane myScrollPane;
private javax.swing.JTextField myTarget;
private javax.swing.JLabel myTargetLbl;
// End of variables declaration//GEN-END:variables
private Project myProject;
private Project myChosenProject;
private DialogDescriptor myDescriptor;
private boolean isRemote;
}