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 + -
显示快捷键?