Eclipse rcp 开发 : 创建普通工程和创建web工程

1。创建新建普通工程向导

  1.1 新建向导页

import org.eclipse.jface.dialogs.Dialog;
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.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.Text;
/**
 * 测试页
 * @author admin
 *
 */
public class TestPage extends WizardPage{

	private String projectName; 
	
	public TestPage(String pageName) {
		super(pageName);
	}

	@Override
	public void createControl(Composite parent) {
		 Composite composite = new Composite(parent, SWT.NULL);
		 composite.setLayout(new GridLayout(2, false));
		 Label label = new Label(composite,SWT.None);
		 label.setText("工程名称");
		 final Text text = new Text(composite,SWT.BORDER);
		 GridData gd = new GridData(GridData.FILL_HORIZONTAL);
		 text.setLayoutData(gd);
		 text.addModifyListener(new ModifyListener() {
			@Override
			public void modifyText(ModifyEvent e) {
				String textStr = text.getText();
				if(null != textStr && !textStr.trim().equals("") ){
					setPageComplete(true);
					setProjectName(textStr);
				}
			}
		});
		 
		 setPageComplete(false);//是否允许下一步
		 setControl(composite);//如果不加这句,不显示内容
		 Dialog.applyDialogFont(composite);
	}

	public String getProjectName() {
		return projectName;
	}
	public void setProjectName(String projectName) {
		this.projectName = projectName;
	}

}

1.2 创建向导

import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;

import com.daosh.field.ui.wizard.project.TestPage;

public class TestWizard extends Wizard implements INewWizard, IRunnableWithProgress{
	
	private TestPage testPage;
	
	public TestWizard(){
		super();
		setNeedsProgressMonitor(true);
	}
	
	/**
	 * 初始化
	 */
	@Override
	public void init(IWorkbench workbench, IStructuredSelection selection) {
		
	}
	
	@Override
	public void addPages() {
		testPage = new TestPage("test");
		addPage(testPage);//增加创建的页面到向导中
	}
	
	/**
	 * finish 执行的方法
	 */
	@Override
	public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
		try {
			IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
			IProject project = root.getProject("test");//工程名称随便写。具体的需要自定义对话框。然后输入。
			project.create(null);
			project.open(null);
		} catch (CoreException e) {
			SysOut.error(e);
			LogUtil.logError(e);
		}
	}
	/**
	 * 点击finish 执行的方法
	 */
	@Override
	public boolean performFinish() {
		if(this.getContainer().getCurrentPage() != testPage){//如果不等于test页面,则不允许finish 执行方法
			return false;
		}
		try {
			getContainer().run(false, true, this);
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		return true;
	}
	/**
	 * 是否可以finish
	 */
	@Override
	public boolean canFinish() {
		if(this.getContainer().getCurrentPage() != testPage){
			return false;
		}
		return super.canFinish();
	}
	
	
}

 1.3 配置mf文件

  增加org.eclipse.ui.newWizards 扩展点。

   -- 新建category 。该category最终会在new - project 中可以查看

   -- 新建wizard 。输入之前创建好的向导

123525_sveU_32533.png

 重启即可。



2. 创建web工程。

   2.1创建web 工程依赖wst的相关jar。如果没有。自行安装。

   2.2 依赖的jar,缺一不可:

             123652_iVXb_32533.png

    2.3。这个方法调用的是wst。可以动态扩展界面的个数等。。调用方法和普通的工程调用的方法一致

import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

import org.eclipse.core.runtime.Path;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jst.common.project.facet.IJavaFacetInstallDataModelProperties;
import org.eclipse.jst.common.project.facet.core.JavaFacetInstallConfig;
import org.eclipse.jst.j2ee.internal.web.archive.operations.WebFacetProjectCreationDataModelProvider;
import org.eclipse.jst.j2ee.web.project.facet.IWebFacetInstallDataModelProperties;
import org.eclipse.jst.servlet.ui.project.facet.WebProjectWizard;
import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.internal.datamodel.DataModelImpl;

import com.daosh.field.ui.wizard.project.TestWebPage;

public class TestWebWizard extends WebProjectWizard{

	private TestWebPage testPage;
	
	private final String SOURCE_PATH = "WEB-INF/classes";// 默认存放class的路径
	
	public TestWebWizard(){
		super();
		setWindowTitle("web向导");//重写对话框标题
	}
	
	/**
	 * 创建第一页
	 */
	@Override
	protected IWizardPage createFirstPage() {
		testPage = new TestWebPage(model,"test");
		return testPage;
	}
	
	/**
	 * 获取所有的page。
	 */
	@Override
	public IWizardPage[] getPages() {
		IWizardPage[] pages = super.getPages();
		return pages;
	}
	/**
	 * 结束需要执行的方法
	 */
	@Override
	protected void postPerformFinish() throws InvocationTargetException {
		
	}

	@SuppressWarnings({ "unchecked", "restriction" })
	@Override
	public boolean performFinish() {
		testPage.setPageComplete(false);
		
		Map<String, DataModelImpl> map = (Map<String, DataModelImpl>) this.model.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
		if (map != null) {
			// 获得web文件夹名称
			DataModelImpl webImpl = (DataModelImpl) map.get("jst.web");
			String webContentName = webImpl.getStringProperty(IWebFacetInstallDataModelProperties.CONFIG_FOLDER);
			// 获得source folder设置,并改变设置
			DataModelImpl impl = (DataModelImpl) map.get("jst.java");
			if (impl != null) {
				JavaFacetInstallConfig config = (JavaFacetInstallConfig) impl.getProperty(IJavaFacetInstallDataModelProperties.JAVA_FACET_INSTALL_CONFIG);
				config.setDefaultOutputFolder(new Path(webContentName+ File.separator + SOURCE_PATH));
				impl.setProperty(IJavaFacetInstallDataModelProperties.JAVA_FACET_INSTALL_CONFIG,config);
				map.put("jst.java", impl);
			}
		}
		this.model.setProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP, map);
		return super.performFinish();
	}

	
	/**
	 * 创建数据模型
	 */
	@SuppressWarnings("restriction")
	protected IDataModel createDataModel() {
		return DataModelFactory.createDataModel(new WebFacetProjectCreationDataModelProvider());
	}
	
	
	public boolean needsProgressMonitor() {
		return true;
	}
	/**
	 * 是否需要上一步下一步按钮
	 */
	public boolean needsPreviousAndNextButtons() {
		return false;
	}
}

  2.4  web向导的第一个页面

 

import java.util.Iterator;
import java.util.Set;
import java.util.SortedSet;

import org.eclipse.jst.servlet.ui.project.facet.WebProjectFirstPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.internal.operations.IProjectCreationPropertiesNew;
import org.eclipse.wst.common.frameworks.internal.ui.WTPCommonUIResourceHandler;
import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
import org.eclipse.wst.common.project.facet.ui.ModifyFacetedProjectWizard;

/**
 * 新建工程第一个页面设置和预加载设置
 * @author admin
 *
 */
@SuppressWarnings("restriction")
public class TestWebPage extends WebProjectFirstPage {
	protected Text projectNameField;
	public TestWebPage(IDataModel model, String pageName) {
		super(model, pageName);
	}

	public IProjectFacetVersion getPrimaryFacetVersion() {
		primaryProjectFacet = ProjectFacetsManager.getProjectFacet(getModuleTypeID());
		IProjectFacetVersion fv = this.primaryProjectFacet.getVersion("2.5");
		return fv;
	}

	protected Composite createTopLevelComposite(Composite parent) {
		Composite top = new Composite(parent, SWT.NONE);

		top.setLayout(new GridLayout());
		top.setLayoutData(new GridData(GridData.FILL_BOTH));
		createProjectGroup(top);
		final IProjectFacetVersion fv = getPrimaryFacetVersion();
		IFacetedProjectWorkingCopy fpjwc = (IFacetedProjectWorkingCopy) this.model
				.getProperty(FACETED_PROJECT_WORKING_COPY);
		final Set<IProjectFacetVersion> facets = getFacetConfiguration(fv);
		fpjwc.setProjectFacets(facets);
		return top;
	}

	/**
	 * 设置facet版本
	 * 
	 */
	public void setFacetVersion() {
		primaryProjectFacet = ProjectFacetsManager
				.getProjectFacet(getModuleTypeID());
		IFacetedProjectWorkingCopy fpjwc = ((ModifyFacetedProjectWizard) getWizard())
				.getFacetedProjectWorkingCopy();

		SortedSet<IProjectFacetVersion> initialVersions = fpjwc
				.getAvailableVersions(primaryProjectFacet);
		String[] items = new String[initialVersions.size() - 1];
		int i = 0;
		int selectedVersionIndex = -1;
		for (Iterator<IProjectFacetVersion> iterator = initialVersions
				.iterator(); iterator.hasNext(); i++) {
			if (i == 4) {
				break;
			}
			items[i] = iterator.next().getVersionString();
			if (selectedVersionIndex == -1 && items[i].equals("2.5")) {
				selectedVersionIndex = i;
			}
		}
		primaryVersionCombo.clearSelection();
		primaryVersionCombo.setItems(items);
		primaryVersionCombo.select(selectedVersionIndex);

	}


	@Override
	protected void createProjectGroup(Composite parent) {

		Font font = parent.getFont();
		Composite projectGroup = new Composite(parent, SWT.NONE);
		GridLayout layout = new GridLayout();
		layout.numColumns = 2;
		projectGroup.setLayout(layout);
		projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

		Group group = new Group(projectGroup, SWT.None);
		group.setText("");
		group.setLayout(new GridLayout(2, false));
		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
		gd.horizontalSpan = 2;
		group.setLayoutData(gd);

		// new project label
		Label projectLabel = new Label(group, SWT.NONE);
		projectLabel.setFont(font);
		projectLabel.setText(WTPCommonUIResourceHandler.Name_);

		// new project name entry field
		projectNameField = new Text(group, SWT.BORDER);
		GridData data = new GridData(GridData.FILL_HORIZONTAL
				| GridData.FILL_BOTH);
		projectNameField.setLayoutData(data);
		projectNameField.setFont(font);
		synchHelper.synchText(projectNameField,
				IProjectCreationPropertiesNew.PROJECT_NAME,
				new Control[] { projectLabel });

		projectNameField.addModifyListener(new ModifyListener() {
			public void modifyText(ModifyEvent e) {
				if (e.getSource().equals(projectNameField)) {
				}
			}
		});
	}

	public String getProjectNameField() {
		return projectNameField.getText();
	}
}

3.  代码调用向导方法。

        TestWizard testWizard = new TestWizard();
	WizardDialog dialog = new WizardDialog(WorkbenchUtil.getShell(),testWizard );
	dialog.open();


转载于:https://my.oschina.net/liuyi126/blog/402312

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值