📄 hibernatecftreesection.java
字号:
/* * Created on 2003-7-29 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */package com.tanghan.plugin.hibernate.editor.formpages;import java.util.ArrayList;import java.util.List;import java.util.ResourceBundle;import org.apache.log4j.Logger;import org.eclipse.core.resources.ResourcesPlugin;import org.eclipse.jface.action.Action;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.action.Separator;import org.eclipse.jface.dialogs.MessageDialog;import org.eclipse.jface.viewers.IStructuredSelection;import org.eclipse.jface.viewers.ITreeContentProvider;import org.eclipse.jface.viewers.TreeViewer;import org.eclipse.pde.core.IEditable;import org.eclipse.pde.core.IModel;import org.eclipse.pde.core.IModelChangedEvent;import org.eclipse.pde.internal.ui.editor.PDEFormPage;import org.eclipse.pde.internal.ui.editor.TreeSection;import org.eclipse.pde.internal.ui.parts.TreePart;import org.eclipse.swt.SWT;import org.eclipse.swt.widgets.Composite;import org.eclipse.ui.IPageLayout;import org.eclipse.ui.ISharedImages;import org.eclipse.ui.IViewPart;import org.eclipse.ui.PlatformUI;import org.eclipse.ui.part.DrillDownAdapter;import org.eclipse.ui.views.properties.PropertySheet;import org.eclipse.update.ui.forms.internal.FormWidgetFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import com.tanghan.plugin.TanghanPlugin;import com.tanghan.plugin.hibernate.editor.IHibernateCFModel;import com.tanghan.plugin.hibernate.editor.config.HibernateMappingScanner;import com.tanghan.plugin.hibernate.editor.elements.HibernateElementAttributes;import com.tanghan.plugin.hibernate.editor.elements.HibernateTreeObject;import com.tanghan.plugin.hibernate.editor.elements.HibernateTreeParent;import com.tanghan.plugin.hibernate.editor.elements.HibernateViewContentProvider;import com.tanghan.plugin.hibernate.editor.elements.HibernateViewLabelProvider;import com.tanghan.util.Log;/** * @author Jerry Tang * @version v0.1.0 * @copyright (C) 2003 Tanghan Studio */public class HibernateCFTreeSection extends TreeSection { private static ResourceBundle res = TanghanPlugin.getDefault().getResourceBundle(); private static Logger log = Log.getInstanse().getLogger(HibernateCFTreeSection.class); protected TreeViewer hibernateCFTree; private HibernateTreeObject treeSelection; private HibernateTreeObject copyObject; private Composite container; private DrillDownAdapter drillDownAdapter; public HibernateCFTreeSection(PDEFormPage page) { super(page, new String[0] ); setHeaderText(res.getString("Tanghan.Plugin.Hibernate.Edit.TreeSection.Title")); //$NON-NLS-1$ setDescription(res.getString("Tanghan.Plugin.Hibernate.Edit.TreeSection.Description")); //$NON-NLS-1$ } /** * @param formPage * @param buttonLabels */ public HibernateCFTreeSection( PDEFormPage formPage, String[] buttonLabels) { super(formPage, new String[0]); } /* (non-Javadoc) * @see org.eclipse.update.ui.forms.internal.FormSection#createClient(org.eclipse.swt.widgets.Composite, org.eclipse.update.ui.forms.internal.FormWidgetFactory) */ public Composite createClient( Composite parent, FormWidgetFactory factory) { container = createClientContainer(parent, 2, factory); TreePart treePart = getTreePart(); createViewerPartControl(container, SWT.MULTI, 2, factory); hibernateCFTree = treePart.getTreeViewer(); hibernateCFTree.setAutoExpandLevel(2); hibernateCFTree.setContentProvider(new HibernateViewContentProvider()); hibernateCFTree.setLabelProvider(new HibernateViewLabelProvider()); hibernateCFTree.setInput(ResourcesPlugin.getWorkspace()); drillDownAdapter = new DrillDownAdapter(hibernateCFTree); createMenuAction(); factory.paintBordersFor(container); return container; } /* (non-Javadoc) * @see org.eclipse.update.ui.forms.internal.FormSection#initialize(java.lang.Object) */ public void initialize(Object input) { //super.initialize(input); loadObject(input); } protected void loadObject(Object input){ if(input instanceof IHibernateCFModel){ //清空树 HibernateTreeParent hTreeRoot = null; ITreeContentProvider treePr = (ITreeContentProvider)this.getTreePart().getTreeViewer().getContentProvider(); hTreeRoot = (HibernateTreeParent)(treePr.getElements(ResourcesPlugin.getWorkspace())[0]); hTreeRoot.setObject(null); hTreeRoot.emptyChildren(); //重新装载树 IHibernateCFModel model = (IHibernateCFModel)input; Document doc = model.getHibernateCFDocument(); if(doc!=null){ hTreeRoot = (HibernateTreeParent)(treePr.getElements(ResourcesPlugin.getWorkspace())[0]); HibernateMappingScanner hMScanner = new HibernateMappingScanner(); hMScanner.visitDocument(doc,hTreeRoot); getTreePart().getTreeViewer().refresh(); } } } /* (non-Javadoc) * @see org.eclipse.pde.internal.ui.editor.TreeSection#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection) */ protected void selectionChanged(IStructuredSelection selection) { super.selectionChanged(selection); IViewPart part = getFormPage().getEditor().getSite().getPage().findView(IPageLayout.ID_PROP_SHEET); if (part instanceof PropertySheet){ ((PropertySheet) part).selectionChanged(HibernateCFTreeSection.this.getFormPage(),selection); } for(int i = 0 ;i <selectionChangeList.size();i++){ IHibernateSelectionChange selectChange = (IHibernateSelectionChange)selectionChangeList.get(i); selectChange.selectionChanged(selection.getFirstElement()); } if(selection.getFirstElement()!=null && (selection.getFirstElement() instanceof HibernateTreeObject)){ this.treeSelection = (HibernateTreeObject)selection.getFirstElement(); } } private List selectionChangeList = new ArrayList() ; public void addSelectionChanged(IHibernateSelectionChange selectChange){ selectionChangeList.add(selectChange); } public void dispose() { if ( !container.isDisposed() && !container.getParent().isDisposed() ) { container.getParent().dispose(); } super.dispose(); } /* (非 Javadoc) * @see org.eclipse.update.ui.forms.internal.FormSection#update() */ public void update() { reflow(); } /* (非 Javadoc) * @see org.eclipse.pde.core.IModelChangedListener#modelChanged(org.eclipse.pde.core.IModelChangedEvent) */ public void modelChanged(IModelChangedEvent e) { log.debug(this.getClass().getName()+"::modelChanged(IModelChangedEvent e)"); //$NON-NLS-1$ loadObject(this.getFormPage().getModel()); copyObject=null; } public void refreshTree(Object obj){ if(obj==null){ getTreePart().getTreeViewer().refresh(); }else{ getTreePart().getTreeViewer().refresh(obj); } } /* (非 Javadoc) * @see org.eclipse.pde.internal.ui.editor.StructuredViewerSection#fillContextMenu(org.eclipse.jface.action.IMenuManager) */ protected void fillContextMenu(IMenuManager manager) { super.fillContextMenu(manager); if(treeSelection!=null && (treeSelection instanceof HibernateTreeParent)){ final HibernateTreeParent parent = (HibernateTreeParent)treeSelection; if(parent.getObject()!=null){ final HibernateElementAttributes heAttr = (HibernateElementAttributes)parent.getObject(); final List childElemList = heAttr.getAllChildElement(); for(int i=0;i<childElemList.size();i++){ final String elemName =(String)childElemList.get(i); Action action = new Action() { public void run() { Element element = heAttr.getElement(); Element child = element.getOwnerDocument().createElement(elemName); element.appendChild(element.getOwnerDocument().createTextNode("\t")); element.appendChild(child); element.appendChild(element.getOwnerDocument().createTextNode("\n")); HibernateMappingScanner hMScanner = new HibernateMappingScanner(); hMScanner.visitDocument(child,parent); forceDirty(); refreshTree(parent); } }; action.setText(res.getString("Tanghan.Plugin.Hibernate.Edit.New")+elemName); //$NON-NLS-1$ action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); manager.add(action); } manager.add(new Separator()); if(treeSelection.getType()!=HibernateTreeObject.HIBERNATE_MAPPING_ROOT){ manager.add(copyAction); } boolean bPast = false; pastAction.setText(res.getString("Tanghan.Plugin.Hibernate.Edit.Past")); //$NON-NLS-1$ manager.add(pastAction); if(this.copyObject!=null&©Object.getObject()!=null){ HibernateElementAttributes heAttrCopy = (HibernateElementAttributes)copyObject.getObject(); pastAction.setText(res.getString("Tanghan.Plugin.Hibernate.Edit.Past.Space")+heAttrCopy.getElement().getNodeName()); //$NON-NLS-1$ if(heAttr.getAllChildElement().contains(heAttrCopy.getElement().getNodeName())){ bPast = true; } //heAttrCopy.getElement().cloneNode() } pastAction.setEnabled(bPast); if(treeSelection.getType()!=HibernateTreeObject.HIBERNATE_MAPPING_ROOT){ manager.add(deleteAction); } } } } //copy一个元素时的Action private Action copyAction; //Delete一个元素时的Action private Action deleteAction; //past一个元素时的Action private Action pastAction; private void createMenuAction(){ //创建copy用的Action copyAction = new Action() { public void run() { copyObject = treeSelection; } }; copyAction.setText(res.getString("Tanghan.Plugin.Hibernate.Edit.Copy")); //$NON-NLS-1$ copyAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); //创建copy用的Action pastAction = new Action() { public void run() { copyElement(); } }; pastAction.setText(res.getString("Tanghan.Plugin.Hibernate.Edit.Past")); //$NON-NLS-1$ pastAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); //创建delete用的Action deleteAction = new Action() { public void run() { deleteElement(); } }; deleteAction.setText(res.getString("Tanghan.Plugin.Hibernate.Edit.Delete")); //$NON-NLS-1$ deleteAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); } private void copyElement(){ //HibernateTreeParent parent = (HibernateTreeParent)treeSelection; HibernateElementAttributes heAttr = (HibernateElementAttributes)treeSelection.getObject(); HibernateElementAttributes heAttrCopy = (HibernateElementAttributes)copyObject.getObject(); Node child = heAttrCopy.getElement().cloneNode(true); heAttr.getElement().appendChild(heAttr.getElement().getOwnerDocument().createTextNode("\t")); heAttr.getElement().appendChild(child); heAttr.getElement().appendChild(heAttr.getElement().getOwnerDocument().createTextNode("\n")); HibernateMappingScanner hMScanner = new HibernateMappingScanner(); hMScanner.visitDocument(child,(HibernateTreeParent)treeSelection); forceDirty(); refreshTree(treeSelection); log.debug("copy "); //$NON-NLS-1$ } private void deleteElement(){ if(MessageDialog.openConfirm(container.getShell(),res.getString("Tanghan.Plugin.Hibernate.Edit.Delete.Sure"),res.getString("Tanghan.Plugin.Hibernate.Edit.Delete.Sure.Message"))){ //$NON-NLS-1$ //$NON-NLS-2$ HibernateTreeParent parent = treeSelection.getParent(); HibernateElementAttributes parentAttr = (HibernateElementAttributes)parent.getObject(); HibernateElementAttributes childAttr = (HibernateElementAttributes)treeSelection.getObject(); parentAttr.getElement().removeChild(childAttr.getElement()); parent.removeChild(treeSelection); hibernateCFTree.refresh(parent); for(int i = 0 ;i <selectionChangeList.size();i++){ IHibernateSelectionChange selectChange = (IHibernateSelectionChange)selectionChangeList.get(i); selectChange.selectionChanged(null); } forceDirty(); if(copyObject == treeSelection){ copyObject = null; } this.treeSelection = null; log.debug(res.getString("Tanghan.Plugin.Hibernate.Edit.delete.Space")+treeSelection.getName()); //$NON-NLS-1$ } } public void forceDirty() { setDirty(true); IModel model = (IModel)getFormPage().getModel(); if (model instanceof IEditable) { IEditable editable = (IEditable)model; editable.setDirty(true); getFormPage().getEditor().fireSaveNeeded(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -