package com.hundsun.ares.studio.jres.basicdata.ui.wizard; /** * Դ�������ƣ�GenSQLSelectPage.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.database.ui * ����˵����$desc * ����ĵ��� * ���ߣ� */ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Stack; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; 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.custom.BusyIndicator; 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.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Text; import com.hundsun.ares.studio.core.IARESElement; import com.hundsun.ares.studio.core.IARESModule; import com.hundsun.ares.studio.core.IARESModuleRoot; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.util.ARESElementUtil; import com.hundsun.ares.studio.ui.ARESElementSorter; import com.hundsun.ares.studio.ui.CommonElementContentProvider; import com.hundsun.ares.studio.ui.CommonElementLabelProvider; import com.hundsun.ares.studio.ui.control.CheckboxTreeViewerEx; /** * @author wangxh * */ public class ExportWizardPage extends WizardPage { /**ѡ���б�*/ CheckboxTreeViewerEx viewer; /**�Ҽ�ѡ�е�Ԫ��*/ ISelection select; /**���ɵ�·��*/ String path; /**·��*/ protected Text txtPath; private String moduleRootName; CommonElementContentProvider cp; List<IARESResource> result = new ArrayList<IARESResource>(); /** * @param pageName */ public ExportWizardPage(String pageName,ISelection select ,String moduleRootName) { super(pageName); this.select = select; this.moduleRootName = moduleRootName; setTitle(pageName); setDescription("��ѡ��Ҫ���ɵĶ����·��"); } private IARESElement[] getCheckedElements(Object[] selected) { Set<IARESElement> checkedElements = new HashSet<IARESElement>(); IARESProject project = null; try { { Stack<IARESElement> elements = new Stack<IARESElement>(); elements.addAll(Arrays.asList(ARESElementUtil.toARESElement(selected))); while (!elements.isEmpty()) { IARESElement obj = elements.pop(); if(obj instanceof IARESProject){ project = (IARESProject) obj; }else if(obj instanceof IARESModuleRoot){ if(((IARESModuleRoot) obj).getElementName().equals(moduleRootName)){ // Collections.addAll(checkedElements, ((IARESModuleRoot) obj).getChildren()); elements.addAll(Arrays.asList(((IARESModuleRoot) obj).getChildren())); }else{ project = ((IARESModuleRoot) obj).getARESProject(); } }else if(obj instanceof IARESModule){ if(((IARESModule) obj).getRoot().getElementName().equals(moduleRootName)){ checkedElements.add((IARESModule) obj); elements.addAll(Arrays.asList(((IARESModule) obj).getChildren())); }else{ project = ((IARESModule) obj).getARESProject(); } }else if (obj instanceof IARESResource) { if(((IARESResource) obj).getRoot().getElementName().equals(moduleRootName)){ checkedElements.add((IARESResource) obj); }else{ project = ((IARESModule) obj).getARESProject(); } } } } if(project != null && checkedElements.isEmpty()){ for(IARESModuleRoot root : project.getModuleRoots()){ if(root.getElementName().equals(moduleRootName)){ checkedElements.add(root); } } } } catch (Exception e) { e.printStackTrace(); } return checkedElements.toArray(new IARESElement[checkedElements.size()]); } private IARESModuleRoot getModuleRoot(IARESElement element) { if (element instanceof IARESModuleRoot) { return (IARESModuleRoot) element; } else if (element instanceof IARESModule) { return ((IARESModule) element).getRoot(); } else if (element instanceof IARESResource) { return ((IARESResource) element).getRoot(); } return null; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ @Override public void createControl(Composite parent) { Composite client = new Composite(parent,SWT.None); Group viewerGroup = createResouceTreeviewer(client); Group buttonGroup = createButtons(client); // ��ѡ���Ԫ��ת��Ϊ����ѡ�е�Ԫ�� IARESElement[] elements = getCheckedElements(((IStructuredSelection)select).toArray()); if (elements.length != 0) { IARESModuleRoot root = getModuleRoot(elements[0]); Assert.isNotNull(root); viewer.setInput(root); viewer.setCheckedElementsWithNotify(elements); } viewer.setFilters(new ViewerFilter[]{new DBFilter()}); final Group pathGroup = new Group(client, SWT.None); pathGroup.setText("ѡ������·��"); pathGroup.setLayout(new GridLayout(2, false)); txtPath = new Text(pathGroup, SWT.BORDER); // ����ѡ��� Button dirButton = new Button(pathGroup, SWT.NONE); dirButton.setText("���..."); addDirButtonListener(dirButton,pathGroup); GridLayoutFactory.swtDefaults().numColumns(2).applyTo(client); GridDataFactory.fillDefaults().hint(200, 300).grab(true, true).applyTo(viewerGroup); GridDataFactory.fillDefaults().grab(false, true).hint(80, -1).applyTo(buttonGroup); GridDataFactory.fillDefaults().span(2, -1).grab(true, false).applyTo(pathGroup); GridDataFactory.fillDefaults().grab(true, false).applyTo(txtPath); GridDataFactory.fillDefaults().grab(false, false).applyTo(dirButton); setControl(client); UpdatePageComplete(); txtPath.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { path = txtPath.getText(); UpdatePageComplete(); } }); } /** * @param dirButton */ protected void addDirButtonListener(Button dirButton,final Group pathGroup) { dirButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { FileDialog dialog = new FileDialog(pathGroup.getShell(), SWT.OPEN); String filterExtension = "*.xls"; dialog.setFilterExtensions(new String[] { filterExtension }); dialog.setFilterNames(new String[] {"Excel�ļ�(*.xls)"}); String filePath = dialog.open(); txtPath.setText(filePath); // �����ļ�·���������ͺ�׺����� if(filterExtension != "All") { String fileSuffix = filterExtension.substring(1); if(!filePath.endsWith(fileSuffix)) { filePath = filePath + fileSuffix; txtPath.setText(filePath); } } } }); } private void setAllChecked(final boolean state) { BusyIndicator.showWhile(viewer.getTree().getShell().getDisplay(), new Runnable(){ @Override public void run() { for (Object obj : cp.getElements(viewer.getInput())) { viewer.checkChange(new CheckStateChangedEvent(viewer, obj, state)); } } }); } /** * @param client * @return */ private Group createButtons(Composite client) { Group buttonGroup = new Group(client, SWT.None); Button btnSelectAll = new Button(buttonGroup, SWT.PUSH); btnSelectAll.setText("ȫѡ"); btnSelectAll.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e) { setAllChecked(true); UpdatePageComplete(); }}); Button btnDeselectAll = new Button(buttonGroup, SWT.PUSH); btnDeselectAll.setText("ȡ��ȫѡ"); btnDeselectAll.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e) { setAllChecked(false); UpdatePageComplete(); }}); buttonGroup.setLayout(new GridLayout(1, true)); GridDataFactory.fillDefaults().grab(true, false).applyTo(btnSelectAll); GridDataFactory.fillDefaults().grab(true, false).applyTo(btnDeselectAll); return buttonGroup; } /** * @param client * @return */ private Group createResouceTreeviewer(Composite client) { Group viewerGroup = new Group(client, SWT.None); viewerGroup.setText("ѡ��ģ��"); viewerGroup.setLayout(new GridLayout(4,false)); viewerGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); viewer = new CheckboxTreeViewerEx(viewerGroup, SWT.CHECK |SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); cp= new CommonElementContentProvider(); viewer.setContentProvider(cp); viewer.setLabelProvider(new CommonElementLabelProvider(cp)); viewer.setComparator(new ARESElementSorter()); viewer.setUseHashlookup(true); GridData gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 4; gd.widthHint = 10; viewer.getTree().setLayoutData(gd); viewer.addCheckStateListener(new ICheckStateListener(){ public void checkStateChanged( final CheckStateChangedEvent event) { UpdatePageComplete(); //����ҳ���Ƿ���� }}); return viewerGroup; } private void UpdatePageComplete() { result = getSelectedResouces(); if(result.size() > 0 && StringUtils.isNotBlank(path)){ setPageComplete(true); }else{ setPageComplete(false); } } /** * ��ȡ��ѡ�е���Դ * @return */ private List<IARESResource> getSelectedResouces(){ List<IARESResource> reses = new ArrayList<IARESResource>(); Object obj[] = viewer.getCheckedElements(); for (Object object : obj) { if (object instanceof IARESResource) { reses.add((IARESResource) object); } } return reses; } /** * ��ȡ����ѡ�е���Դ * @return */ public List<IARESResource> getResult() { return result; } /** * ��ȡ·�� * @return the path */ public String getPath() { return StringUtils.defaultString(path); } class DBFilter extends ViewerFilter { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof IARESElement && StringUtils.equals("module.xml", ((IARESElement) element).getElementName())) { return false; } return true; } } }