package com.hundsun.ares.studio.jres.basicdata.ui.wizard;
import java.io.File;
import java.io.FileFilter;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Text;
import com.hundsun.ares.studio.core.ARESCore;
import com.hundsun.ares.studio.core.IARESElement;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.ui.AresModelViewer;
public class ImportWizardPage extends WizardPage {
AresModelViewer viewer;
private Button btFile;
private Text txFile;
private Button btBrowserFile;
private Button btFolder;
private Text txFolder;
private Button btBrowserFolder;
public Button btNeedReport;
private IARESElement selection;
protected ImportWizardPage(String pageName, IARESElement selection) {
super(pageName);
this.selection = selection;
}
@Override
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridDataFactory.fillDefaults().applyTo(composite);
GridLayoutFactory.fillDefaults().applyTo(composite);
viewer = new AresModelViewer(composite, SWT.NONE);
viewer.addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof IARESProject) {
return true;
}
return false;
}
});
viewer.setInput(ARESCore.getModel());
if (selection != null) {
viewer.setSelection(new StructuredSelection(selection.getARESProject()));
}
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
validate();
}
});
GridDataFactory.fillDefaults().grab(true, true).applyTo(viewer.getControl());
Composite pathComp = new Composite(composite, SWT.NONE);
GridDataFactory.fillDefaults().grab(true, false).indent(0, 0).applyTo(pathComp);
GridLayoutFactory.fillDefaults().numColumns(3).applyTo(pathComp);
createFileSelector(pathComp);
createFolderSelector(pathComp);
createReportSelector(composite);
setControl(composite);
setPageComplete(false);
setMessage("��ѡ��Ҫ������ļ���Ŀ¼");
}
private void createFileSelector(Composite parent) {
btFile = new Button(parent, SWT.RADIO);
btFile.setText("ѡ���ļ�");
GridDataFactory.fillDefaults().applyTo(btFile);
txFile = new Text(parent, SWT.BORDER);
txFile.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
validate();
}
});
GridDataFactory.fillDefaults().grab(true, false).applyTo(txFile);
btBrowserFile = new Button(parent, SWT.PUSH);
GridDataFactory.fillDefaults().applyTo(btBrowserFile);
btBrowserFile.setText("���");
btBrowserFile.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
FileDialog dialog = new FileDialog(getShell());
String path = dialog.open();
if (path != null)
txFile.setText(path);
}
});
btFile.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (btFile.getSelection()) {
txFile.setEnabled(true);
btBrowserFile.setEnabled(true);
btFolder.setSelection(false);
} else {
txFile.setText(StringUtils.EMPTY);
txFile.setEnabled(false);
btBrowserFile.setEnabled(false);
}
}
});
btFile.setSelection(false);
}
private void createFolderSelector(Composite parent) {
btFolder = new Button(parent, SWT.RADIO);
btFolder.setText("ѡ��Ŀ¼");
GridDataFactory.fillDefaults().applyTo(btFolder);
txFolder = new Text(parent, SWT.BORDER);
txFolder.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
validate();
}
});
GridDataFactory.fillDefaults().grab(true, false).applyTo(txFolder);
btBrowserFolder = new Button(parent, SWT.PUSH);
GridDataFactory.fillDefaults().applyTo(btBrowserFolder);
btBrowserFolder.setText("���");
btBrowserFolder.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog dialog = new DirectoryDialog(getShell());
txFolder.setText(dialog.open());
}
});
btFolder.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (btFolder.getSelection()) {
txFolder.setEnabled(true);
btBrowserFolder.setEnabled(true);
btFile.setSelection(false);
} else {
txFolder.setText(StringUtils.EMPTY);
txFolder.setEnabled(false);
btBrowserFolder.setEnabled(false);
}
}
});
String selectionType = getDialogSettings().get("type");
if (StringUtils.equalsIgnoreCase(selectionType, "file")) {
btFolder.setSelection(false);
txFolder.setEnabled(false);
btBrowserFolder.setEnabled(false);
btFile.setSelection(true);
txFile.setEnabled(true);
btBrowserFile.setEnabled(true);
} else {
btFolder.setSelection(true);
txFolder.setEnabled(true);
btBrowserFolder.setEnabled(true);
btFile.setSelection(false);
txFile.setEnabled(false);
btBrowserFile.setEnabled(false);
}
}
@Override
public void dispose() {
if (btFile.getSelection()) {
getDialogSettings().put("type", "file");
} else {
getDialogSettings().put("type", "folder");
}
if (btNeedReport.getSelection()) {
getDialogSettings().put("report", true);
} else {
getDialogSettings().put("report", false);
}
super.dispose();
}
private void createReportSelector(Composite parent) {
btNeedReport = new Button(parent, SWT.CHECK);
btNeedReport.setText("���ɵ��뱨��");
GridDataFactory.fillDefaults().applyTo(btNeedReport);
if (getDialogSettings().get("report") == null || getDialogSettings().getBoolean("report")) {
btNeedReport.setSelection(true);
}
}
private void validate() {
IStructuredSelection ss = (IStructuredSelection) viewer.getSelection();
Object obj = ss.getFirstElement();
if (obj == null) {
setErrorMessage("��ѡ��Ҫ���뵽�ĸ���Ŀ��");
setPageComplete(false);
return;
}
if (btFile.getSelection()) {
if (StringUtils.isEmpty(txFile.getText())) {
setErrorMessage("��ѡ��Ҫ������ļ�");
setPageComplete(false);
return;
}
File file = new File(txFile.getText());
if (!file.exists()) {
setErrorMessage(String.format("�ļ�%s�����ڣ�", txFile.getText()));
setPageComplete(false);
return;
}
} else {
if (StringUtils.isEmpty(txFolder.getText())) {
setErrorMessage("��ѡ��Ҫ�����ļ����ڵ�Ŀ¼");
setPageComplete(false);
return;
}
File file = new File(txFolder.getText());
if (!file.exists()) {
setErrorMessage(String.format("Ŀ¼%s�����ڣ�", txFolder.getText()));
setPageComplete(false);
return;
}
}
setErrorMessage(null);
setPageComplete(true);
}
public File[] getFiles() {
if (btFile.getSelection()) {
File file = new File(txFile.getText());
File[] files = new File[] {file};
return files;
} else {
File folder = new File(txFolder.getText());
// �������һ���ļ��У�ȡ�������е��ļ���Ŀǰֻȡ��һ�㣬����ݹ�
if (folder.isDirectory()) {
return folder.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (!StringUtils.endsWith( pathname.getName(), ".xls")) {
return false;
}
if (pathname.isDirectory())
return false;
return true;
}
});
}
}
return null;
}
}