📄 hibernatecfeditor.java
字号:
package com.tanghan.plugin.hibernate.editor;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import org.apache.log4j.Logger;import org.eclipse.core.resources.IFile;import org.eclipse.core.resources.IProject;import org.eclipse.core.resources.IResource;import org.eclipse.core.resources.IResourceChangeEvent;import org.eclipse.core.resources.IResourceChangeListener;import org.eclipse.core.resources.IWorkspace;import org.eclipse.core.runtime.CoreException;import org.eclipse.core.runtime.IProgressMonitor;import org.eclipse.jface.text.IDocument;import org.eclipse.jface.util.IPropertyChangeListener;import org.eclipse.jface.util.PropertyChangeEvent;import org.eclipse.pde.core.IEditable;import org.eclipse.pde.core.IModel;import org.eclipse.pde.internal.core.IModelProvider;import org.eclipse.pde.internal.ui.editor.IPDEEditorPage;import org.eclipse.pde.internal.ui.editor.PDEMultiPageXMLEditor;import com.tanghan.plugin.TanghanPlugin;import com.tanghan.plugin.hibernate.editor.formpages.HibernateCFFormPage;import com.tanghan.plugin.hibernate.editor.formpages.HibernateCFSourcePage;import com.tanghan.util.Log;/** * 用户修改Hibernate的值对象配置文件的编辑器 * @author Jerry Tang * @version v0.1.0 * @createdate 2003-3-25 * @copyright (C) 2003 Tanghan工作组 * * @see PDEMultiPageXMLEditor */public class HibernateCFEditor extends PDEMultiPageXMLEditor implements IPropertyChangeListener, IResourceChangeListener { private static Logger log = Log.getInstanse().getLogger(HibernateCFEditor.class); private IProject project; /**Model 提供商*/ private IModelProvider modelProvider; public static final String SOURCE_PAGE = "SourcePage"; public static final String HIBERNATE_CONFIGFILE_PAGE = "HibernateConfigFilePage"; public static final String HIBERNATE_CONFIGFILE_TITLE = "Hibernate Config File"; public HibernateCFEditor() { super(); TanghanPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this); IWorkspace workspace = TanghanPlugin.getWorkspace(); workspace.addResourceChangeListener( this, IResourceChangeEvent.PRE_CLOSE); } /* (non-Javadoc) * @see org.eclipse.pde.internal.ui.editor.PDEMultiPageEditor#createModel(java.lang.Object) */ protected Object createModel(Object input) throws CoreException { log.debug("createModel(Object input)"); log.debug(input.getClass().getName()); //根据系统传入的文件判断其应该怎么样作处理 if(input!=null && input instanceof IFile){ IFile file =(IFile)input; log.debug(file.getFullPath().toOSString()); return createFileSystemModel((IFile) file); } return new HibernateCFModel(); } private IHibernateCFModel createFileSystemModel(IFile file) throws CoreException { InputStream stream = null; if(!file.isSynchronized(IResource.DEPTH_ZERO)){ file.refreshLocal(IResource.DEPTH_ZERO,null); } //得到该文件的项目 project = file.getProject(); //得到 stream = file.getContents(false); modelProvider = TanghanPlugin.getDefault().getHibernateCFModelManager(); modelProvider.connect(file, this); IHibernateCFModel model = (IHibernateCFModel) modelProvider.getModel(file, this); model.load(stream,true); try { stream.close(); } catch (IOException e) { log.debug(e.getMessage(),e); } //得到当前的Project if(file.getProject()!=null) model.setProject(file.getProject()); return model; } /* (non-Javadoc) * @see org.eclipse.pde.internal.ui.editor.PDEMultiPageEditor#createPages() */ protected void createPages() { log.debug("add source page"); this.firstPageId = HIBERNATE_CONFIGFILE_PAGE; formWorkbook.setFirstPageSelected(false); this.addPage(HIBERNATE_CONFIGFILE_PAGE,new HibernateCFFormPage(this,HIBERNATE_CONFIGFILE_TITLE)); this.addPage(SOURCE_PAGE,new HibernateCFSourcePage(this)); } /* (non-Javadoc) * @see org.eclipse.pde.internal.ui.editor.PDEMultiPageEditor#getHomePage() */ public IPDEEditorPage getHomePage() { log.debug("getHomePage()"); return this.getPage(HIBERNATE_CONFIGFILE_PAGE); } /* (non-Javadoc) * @see org.eclipse.pde.internal.ui.editor.PDEMultiPageEditor#getSourcePageId() */ protected String getSourcePageId() { log.debug("getSourcePageId()"); return SOURCE_PAGE; } /* (non-Javadoc) * @see org.eclipse.pde.internal.ui.editor.PDEMultiPageEditor#isModelDirty(java.lang.Object) */ protected boolean isModelDirty(Object model) { return model != null && model instanceof IEditable && model instanceof IModel && ((IModel) model).isEditable() && ((IEditable) model).isDirty(); } /* (non-Javadoc) * @see org.eclipse.pde.internal.ui.editor.PDEMultiPageEditor#updateModel() */ protected boolean updateModel() { log.debug("updateModel()"); IHibernateCFModel model = (IHibernateCFModel) getModel(); IDocument document = getDocumentProvider().getDocument(getEditorInput()); String text = document.get(); boolean cleanModel = true; try { InputStream stream = new ByteArrayInputStream(text.getBytes("UTF8")); try { model.reload(stream, false); } catch (CoreException e) { e.printStackTrace(); cleanModel = false; } try { stream.close(); } catch (IOException e) { ; } } catch (UnsupportedEncodingException e) { log.error(e.getMessage(),e); } return cleanModel; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { modelProvider.disconnect(getModel(), this); IWorkspace workspace = TanghanPlugin.getWorkspace(); workspace.removeResourceChangeListener(this); disposeSuperClass() ; } public final void disposeSuperClass() { super.dispose(); } /* (non-Javadoc) * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent event) { } /* (non-Javadoc) * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) */ public void resourceChanged(IResourceChangeEvent event) { } /* (非 Javadoc) * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) */ public void doSave(IProgressMonitor monitor) { super.doSave(monitor); IEditable editable = (IEditable)model; editable.setDirty(false); fireSaveNeeded(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -