baseeditor.java

来自「一个eclipse插件源代码。用于web开发」· Java 代码 · 共 376 行

JAVA
376
字号
/*
 * $Header: /home/cvs/WEBPUMP2.0/WebPumpIDE_Src/WebPumpIDE/src/com/webpump/ui/base/gui/BaseEditor.java,v 1.2 2004/12/29 09:45:30 wang_j Exp $
 * $Revision: 1.2 $
 * $Date: 2004/12/29 09:45:30 $
 *
 * ====================================================================
 *
 * The NanJing HopeRun(IT-FOREST) Software License, Version 2.0.0
 *
 * Copyright 2003-2004 by NanJing HopeRun(IT-FOREST) Information System Co., Ltd, CHINA and
 *                        IT Forest Corporation
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * HopeRun(IT-FOREST) Information System Co., Ltd, CHINA and IT Forest Corporation.
 * You shall not disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into with
 * HopeRun(IT-FOREST) Information System Co., Ltd, CHINA and IT Forest Corporation.
 */
package com.webpump.ui.base.gui;


import java.io.*;

import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.rules.DefaultPartitioner;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.pde.core.*;
import org.eclipse.pde.internal.ui.editor.*;
import org.eclipse.pde.internal.ui.editor.text.PDEPartitionScanner;

import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.dialogs.ContainerGenerator;
import org.eclipse.ui.editors.text.FileDocumentProvider;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel;

import com.webpump.ui.base.data.BaseDataTransfer;
import com.webpump.ui.base.data.BaseModel;
import com.webpump.ui.perspective.WebpumpIDEPlugin;
import com.webpump.ui.project.ProjectInfo;
import com.webpump.ui.project.ProjectModel;

/**
 * @author wang_j
 *
 * ?改所生成类型注释的模板为
 * 窗口 > 首选? > Java > 代?生成 > 代?和注释
 */
public class BaseEditor extends PDEMultiPageXMLEditor
{

	protected IFile m_objFile = null;

	public BaseEditor() 
	{
			super();
	}
	
	protected BaseModel createResourceModel(IFile file)
		throws CoreException
	{
		return null;
	}

	protected BaseModel createStorageModel(IStorage storage) {
		
		return null;
	}
	
	protected IModelUndoManager createModelUndoManager() {
		return new BaseUndoManager(this);
	}	
	
	protected Object createModel(Object input) throws CoreException {
				
		if(input instanceof IFile)
			return createResourceModel((IFile)input);
		if (input instanceof IStorage)
			return createStorageModel((IStorage) input);
		return null;
			
	}

	protected void createPages() 
	{
	}

	/* (非 Javadoc)
	 * @see org.eclipse.pde.internal.ui.editor.PDEMultiPageEditor#getHomePage()
	 */
	public IPDEEditorPage getHomePage() {

		return null;
	}

	/* (非 Javadoc)
	 * @see org.eclipse.pde.internal.ui.editor.PDEMultiPageEditor#getSourcePageId()
	 */
	protected String getSourcePageId() {

		return "Source Page";
	}
	
	protected IPDEEditorPage getSourcePage() {

		return getPage(getSourcePageId());
	}	

	protected boolean isModelDirty(Object model) {

			return model != null && (model instanceof IEditable) && (model instanceof IModel) && ((IModel)model).isEditable() && ((IEditable)model).isDirty();
	}

	protected boolean updateModel() {

		BaseModel model = (BaseModel)getModel();
    	IDocument document = getDocumentProvider().getDocument(getEditorInput());
		String text = document.get();
		boolean cleanModel = true;
		try
			{
				
				ProjectModel objProjectModel = WebpumpIDEPlugin.getProjectModel(m_objFile,false);
				String strCharset = ((ProjectInfo)objProjectModel.getDataObject()).getProjectInfo()[5];
								
				InputStream stream = new ByteArrayInputStream(text.getBytes(strCharset));
				try
				{
				  model.reload(stream, false);
				}
				catch(CoreException _ex)
				{
				  cleanModel = false;
				}
				try
				{
					stream.close();
				}
				  catch(IOException _ex) { }
			  }
			  catch(UnsupportedEncodingException e)
			  {
				//  EasyStrutsPlugin.log(e);
			  }
			  return cleanModel;

		}

	/**
	 * @see org.eclipse.pde.internal.ui.editor.PDEMultiPageEditor#canCopy(ISelection)
	 */
	public boolean canCopy(ISelection selection) {
		
		return ((getCurrentPage() instanceof BasePage)&&(selection!=null))
			? true
			: super.canCopy(selection);
	}
	
	
	protected void performGlobalAction(String id) {
		// preserve selection
		ISelection selection = getSelection();
		boolean handled = getCurrentPage().performGlobalAction(id);

		if (!handled) {
			IPDEEditorPage page = getCurrentPage();
			if (page instanceof PDEFormPage) {
				if (id.equals(ITextEditorActionConstants.UNDO)) {
					undoManager.undo();
					return;
				}
				if (id.equals(ITextEditorActionConstants.REDO)) {
					undoManager.redo();
					return;
				}
				if (id.equals(ITextEditorActionConstants.CUT)
					|| id.equals(ITextEditorActionConstants.COPY)) {
					copyToClipboard(selection);
					return;
				}
			}
		}
	}	

	private void copyToClipboard(ISelection selection) {
		IStructuredSelection ssel = (IStructuredSelection) selection;
		Object[] objects = ssel.toArray();
		StringWriter writer = new StringWriter();
		PrintWriter pwriter = new PrintWriter(writer);


		Class objClass = null;

		for (int i = 0; i < objects.length; i++) {
			Object obj = objects[i];
			/*if (objClass == null)
				objClass = obj.getClass();
			else if (objClass.equals(obj.getClass()) == false)
				return;*/
			if (obj instanceof IWritable) {
				((IWritable) obj).write("", pwriter);
			}
		}
		pwriter.flush();
		String textVersion = writer.toString();
		try {
			pwriter.close();
			writer.close();
		} catch (IOException e) {
		}
		// set the clipboard contents
		clipboard.setContents(
			new Object[] { objects, textVersion },
			new Transfer[] {
				BaseDataTransfer.getInstance(),
				TextTransfer.getInstance()});

							
	}	
	
	public class CharsetFileDocumentProvider extends FileDocumentProvider {
		public IDocument createDocument(Object element) throws CoreException {
			IDocument document = super.createDocument(element);
			if (document != null) {
				IDocumentPartitioner partitioner = createDocumentPartitioner();
				if (partitioner != null) {
					partitioner.connect(document);
					document.setDocumentPartitioner(partitioner);
				}
			}
			return document;
		}
		protected void setDocumentContent(
			IDocument document,
			InputStream contentStream,
			String encoding)
			throws CoreException {

			Reader in = null;
			try {			
				//取字符集
				ProjectModel objProjectModel = WebpumpIDEPlugin.getProjectModel(m_objFile,false);
				String strCharset = ((ProjectInfo)objProjectModel.getDataObject()).getProjectInfo()[5];

				in = new InputStreamReader(new BufferedInputStream(contentStream) , strCharset);

				StringBuffer buffer = new StringBuffer();
				char[] readBuffer = new char[8096];
				int n = in.read(readBuffer);
				while (n > 0) {
					buffer.append(readBuffer, 0, n);
					n = in.read(readBuffer);
				}

				document.set(buffer.toString());

			} catch (IOException x) {
				WebpumpIDEPlugin.log(x);
			} finally {
				if (in != null) {
					try {
						in.close();
					} catch (IOException x) {
					}
				}
			}
		}
		public void doSaveDocument(
			IProgressMonitor monitor,
			Object element,
			IDocument document,
			boolean overwrite)
			throws CoreException {
			if (element instanceof IFileEditorInput) {

				IFileEditorInput input = (IFileEditorInput) element;
				InputStream stream = null;
				try {
					
					ProjectModel objProjectModel = WebpumpIDEPlugin.getProjectModel(m_objFile,false);
					String strCharset = ((ProjectInfo)objProjectModel.getDataObject()).getProjectInfo()[5];
										
					stream =
						new ByteArrayInputStream(
							document.get().getBytes(strCharset));

					IFile file = input.getFile();

					if (file.exists()) {

						FileInfo info = (FileInfo) getElementInfo(element);

						if (info != null && !overwrite)
							checkSynchronizationState(
								info.fModificationStamp,
								file);

						file.setContents(stream, overwrite, true, monitor);

						if (info != null) {

							ResourceMarkerAnnotationModel model =
								(ResourceMarkerAnnotationModel) info.fModel;
							model.updateMarkers(info.fDocument);

							info.fModificationStamp =
								computeModificationStamp(file);
						}

					} else {
						try {
							//monitor.beginTask(TextEditorMessages.getString("FileDocumentProvider.task.saving"), 2000); //$NON-NLS-1$
							monitor.beginTask("Saving", 2000);
							ContainerGenerator generator =
								new ContainerGenerator(
									file.getParent().getFullPath());
							generator.generateContainer(
								new SubProgressMonitor(monitor, 1000));
							file.create(
								stream,
								false,
								new SubProgressMonitor(monitor, 1000));
						} finally {
							monitor.done();
						}
					}
				} catch (UnsupportedEncodingException e) {
				} finally {
					try {
						stream.close();
					} catch (IOException e) {
					}
				}
			} else {
				super.doSaveDocument(monitor, element, document, overwrite);
			}
		}
	}	
	
	protected IDocumentPartitioner createDocumentPartitioner() {
		DefaultPartitioner partitioner =
			new DefaultPartitioner(
				new PDEPartitionScanner(),
				new String[] {
					PDEPartitionScanner.XML_TAG,
					PDEPartitionScanner.XML_COMMENT });
		return partitioner;
	}
		

	public IDocumentProvider createDocumentProvider(Object input) {
		IDocumentProvider documentProvider = null;
		if (input instanceof IFile)
			documentProvider = new CharsetFileDocumentProvider();
		else if (input instanceof File)
			documentProvider =
				new SystemFileDocumentProvider(
					createDocumentPartitioner(),
					"UTF8");
		else if (input instanceof IStorage)
			documentProvider =
				new StorageDocumentProvider(
					createDocumentPartitioner(),
					"UTF8");
		return documentProvider;
	}	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?