/**
* <p>Copyright: Copyright (c) 2009</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.internal.ui.refactoring;
import java.util.List;
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.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.ltk.core.refactoring.Refactoring;
import org.eclipse.ltk.core.refactoring.participants.MoveRefactoring;
import org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring;
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
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 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.AresModelViewer;
import com.hundsun.ares.studio.ui.AresResourceCategoryFilter;
import com.hundsun.ares.studio.ui.AresResourceFilter;
import com.hundsun.ares.studio.ui.LibFilter;
/**
*
* @author sundl
*/
public class MoveAresElementWizardPage extends UserInputWizardPage {
private TreeViewer viewer;
private MoveRefactoring refactoring;
public MoveAresElementWizardPage(String name,MoveRefactoring refactoring) {
super(name);
this.refactoring = refactoring;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
initializeDialogUnits(parent);
Composite composite= new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
GridData gd = new GridData(GridData.FILL_BOTH);
gd.minimumHeight = 200;
composite.setLayoutData(gd);
composite.setFont(parent.getFont());
Label label= new Label(composite, SWT.NONE);
label.setText("ѡ��Ŀ��λ��:");
label.setLayoutData(new GridData());
viewer = new AresModelViewer(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
gd = new GridData(GridData.FILL_BOTH);
gd.minimumHeight = 200;
gd.widthHint = 260;
viewer.getTree().setLayoutData(gd);
viewer.addFilter(new AresResourceCategoryFilter());
final Object[] elements = refactoring.getMoveProcessor().getElements();
if (checkResourceOrModel(elements)) {
viewer.addFilter(new AresResourceFilter(){
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
for(Object obj : elements){
if (obj instanceof IARESModule) {
if (obj.equals(element)) {
return false;
}
}
}
if (element instanceof IARESResource) {
return false;
}
return true;
}
});
}else {
viewer.addFilter(new AresResourceFilter());
}
viewer.addFilter(new LibFilter());
viewer.setInput(getProject());
if (getDestination() != null)
viewer.setSelection(new StructuredSelection(getDestination()), true);
else
viewer.setSelection(new StructuredSelection(getParent()), true);
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
updateSelection();
}
});
setControl(composite);
updateSelection();
}
private boolean checkResourceOrModel(Object[] objects){
boolean status = false;
for (Object object :objects) {
if (object instanceof IARESModule) {
status = true;
break;
}
}
return status;
}
/**
* ȡelement�ڵ�����ϲ�moduleRoot�ڵ�
*
* @param element
* @return
*/
private IARESElement getParentModuleRoot(IARESElement element){
if(element instanceof IARESModuleRoot){
return element;
}
element = element.getParent();
if (element == null) {
return null;
}
return getParentModuleRoot(element);
}
protected void updateSelection() {
IStructuredSelection ss = (IStructuredSelection) viewer.getSelection();
Object obj = ss.getFirstElement();
setPageComplete(getProcessor().verifyDestination(obj));
}
@Override
protected boolean performFinish() {
IStructuredSelection ss = (IStructuredSelection) viewer.getSelection();
Object obj = ss.getFirstElement();
getProcessor().setDestination(obj);
return super.performFinish();
}
public IWizardPage getNextPage() {
IStructuredSelection ss = (IStructuredSelection) viewer.getSelection();
Object obj = ss.getFirstElement();
getProcessor().setDestination(obj);
return super.getNextPage();
}
// Ŀǰֻ�ܵ���Ŀ���ƶ�����������һ����Ŀ
private IARESProject getProject() {
ARESMoveProcessor processor = getProcessor();
List<IARESElement> elements = processor.getElementsToMove();
return ARESElementUtil.getParent(elements.toArray(new IARESElement[0])).getARESProject();
}
private Object getDestination() {
ARESMoveProcessor processor = getProcessor();
return processor.getDestination();
}
private IARESElement getParent() {
ARESMoveProcessor processor = getProcessor();
List<IARESElement> elements = processor.getElementsToMove();
return ARESElementUtil.getParent(elements.toArray(new IARESElement[0]));
}
private ARESMoveProcessor getProcessor() {
Refactoring refactoring = getRefactoring();
if (refactoring instanceof ProcessorBasedRefactoring) {
return (ARESMoveProcessor) ((ProcessorBasedRefactoring)refactoring).getProcessor();
}
return null;
}
}