/*******************************************************************************
* Copyright (c) 2004 Ferenc Hechler - ferenc_hechler@users.sourceforge.net
*
* This file is part of the Fat Jar Eclipse Plug-In
*
* The Fat Jar Eclipse Plug-In is free software;
* you can redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation;
* either version 2 of the License, or (at your option) any later version.
*
* The Fat Jar Eclipse Plug-In is distributed
* in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the Fat Jar Eclipse Plug-In;
* if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*******************************************************************************/
package net.sf.fjep.fatjar.wizard;
import java.util.Vector;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.core.JavaModelManager;
import org.eclipse.jface.dialogs.IDialogPage;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Tree;
import thahn.java.agui.ide.eclipse.wizard.export.AguiExportWizard;
/**
* The "New" wizard page allows setting the container for
* the new file as well as the file name. The page
* will only accept file name without the extension OR
* with the extension that matches the expected one (mpe).
*/
public class FJExportWizardProjectSeletPage extends WizardPage {
private String[] currentSelection;
CheckboxTreeViewer projectTree;
/**
* Constructor for SampleNewWizardPage.
* @param pageName
*/
public FJExportWizardProjectSeletPage(String[] currentSelection) {
super("wizardPage");
setTitle("Select one Java Project");
setDescription("This project will be deployed as Fat Jar");
this.currentSelection = currentSelection;
}
public class JavaProjectsTreeContentProvider implements ITreeContentProvider {
private Object[] root;
public Object[] getChildren(Object element) {
return (element == root) ? root : new Object[0];
}
public Object[] getElements(Object element) {
return (element == root) ? root : new Object[0];
}
public boolean hasChildren(Object element) {
return (element == root);
}
public Object getParent(Object element) {
return (element == root) ? null : root;
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object old_input, Object new_input) {
root = (Object[]) new_input;
}
}
/**
* @see IDialogPage#createControl(Composite)
*/
public void createControl(Composite parent) {
try {
GridData gd;
Label label;
Composite comp = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
comp.setLayout(layout);
layout.numColumns = 3;
layout.verticalSpacing = 9;
label = new Label(comp, SWT.NULL);
label.setText("Java Project:");
//
Tree tree = new Tree(comp, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI | SWT.CHECK | SWT.V_SCROLL );
gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = tree.getItemHeight() * 10;
tree.setLayoutData(gd);
projectTree = new CheckboxTreeViewer(tree);
JavaProjectsTreeContentProvider cp = new JavaProjectsTreeContentProvider();
projectTree.setContentProvider(cp);
projectTree.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
dialogChanged();
}
});
//
label = new Label(comp, SWT.NULL);
label.setVisible(false);
initialize();
projectTree.setCheckedElements(currentSelection);
dialogChanged();
setControl(comp);
}
catch (Exception e) {
e.printStackTrace();
}
}
private String[] getJProjectList() {
Vector result = new Vector();
IJavaProject[] jprojects = null;
try {
jprojects = JavaModelManager.getJavaModelManager().getJavaModel().getJavaProjects();
} catch (JavaModelException e) { e.printStackTrace(); }
for (int i=0; i<jprojects.length; i++) {
result.add(jprojects[i].getProject().getName());
}
String[] resultArray = (String[]) result.toArray(new String[result.size()]);
return resultArray;
}
private void initialize() {
String[] projectList = getJProjectList();
projectTree.setInput(projectList);
}
/**
* Ensures that exactly one project is selected
*/
private void dialogChanged() {
int cnt = projectTree.getCheckedElements().length;
if (cnt == 0) {
updateStatus("No Java project has been selected");
}
else if (cnt == 1)
updateStatus(null);
else
updateStatus("Only one Java project can be selected");
}
private void updateStatus(String message) {
setErrorMessage(message);
setPageComplete(message == null);
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.IWizardPage#canFlipToNextPage()
*/
public boolean canFlipToNextPage() {
boolean ok = false;
if (isPageComplete()) {
AguiExportWizard fjew = (AguiExportWizard)getWizard();
fjew.setJProject(getSelectedJavaProject());
ok = true;
}
return (ok && super.canFlipToNextPage());
}
public IJavaProject getSelectedJavaProject() {
IJavaProject result = null;
Object[] checked = projectTree.getCheckedElements();
if (checked.length == 1) {
String projectName = (String)checked[0];
result = JavaModelManager.getJavaModelManager().getJavaModel().getJavaProject(projectName);
}
return result;
}
}