📄 hibernatecfmodelmanager.java
字号:
/* * Created on 2003-7-25 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */package com.tanghan.plugin.hibernate.editor;import java.util.Hashtable;import java.util.List;import java.util.Vector;import org.apache.log4j.Logger;import org.eclipse.core.resources.IFile;import org.eclipse.core.resources.IResourceChangeEvent;import org.eclipse.core.resources.IResourceChangeListener;import org.eclipse.core.resources.IResourceDelta;import org.eclipse.core.resources.IResourceDeltaVisitor;import org.eclipse.core.resources.IWorkspace;import org.eclipse.core.runtime.CoreException;import org.eclipse.pde.core.IModel;import org.eclipse.pde.internal.core.IModelProvider;import org.eclipse.pde.internal.core.IModelProviderListener;import com.tanghan.plugin.TanghanPlugin;import com.tanghan.util.Log;/** * @author Jerry Tang * @version v0.1.0 * @copyright (C) 2003 Tanghan Studio */public class HibernateCFModelManager implements IModelProvider, IResourceChangeListener ,IResourceDeltaVisitor{ private static Logger log = Log.getInstanse().getLogger(HibernateCFModelManager.class); /** Workspace hibernate models */ private List hibernateModels; protected List listeners; protected Hashtable models; protected List modelChanges; /** init flag */ private boolean initialized = false; class ModelChange { IModel model; boolean added; public ModelChange(IModel model, boolean added) { this.model = model; this.added = added; } } class ModelInfo { int count; IModel model; IModel readOnlyModel; Object consumer; public boolean isExclusiveAccess() { return true; } } /** * */ public HibernateCFModelManager() { hibernateModels = new Vector(); models = new Hashtable(); listeners = new Vector(); IWorkspace workspace = TanghanPlugin.getWorkspace(); workspace.addResourceChangeListener( this,IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.PRE_AUTO_BUILD); } /* (non-Javadoc) * @see org.eclipse.pde.internal.core.IModelProvider#addModelProviderListener(org.eclipse.pde.internal.core.IModelProviderListener) */ public void addModelProviderListener(IModelProviderListener listener) { listeners.add(listener); } /* (non-Javadoc) * @see org.eclipse.pde.internal.core.IModelProvider#connect(java.lang.Object, java.lang.Object) */ public void connect(Object element, Object consumer) { this.connect(element, consumer, true); } /* (non-Javadoc) * @see org.eclipse.pde.internal.core.IModelProvider#connect(java.lang.Object, java.lang.Object, boolean) */ public void connect( Object element, Object consumer, boolean editableCopy) { //得到一个编辑器和模型之间的连接 ModelInfo info = (ModelInfo) models.get(element); if (info == null) { info = new ModelInfo(); info.count = 0; models.put(element, info); } info.count++; if (info.model == null && editableCopy) { info.model = createModel(element); info.consumer = consumer; } else { info.readOnlyModel = createModel(element, false); } } /** * Method createModel. * @param element * @return IModel */ protected IModel createModel(Object element) { return createModel(element, true); } /** * Method createModel. * @param element * @param editable * @return IModel */ protected IModel createModel(Object element, boolean editable) { if (element instanceof IFile) { IFile file = (IFile) element; HibernateCFModel model = new HibernateCFModel(file); model.setEditable(true); return model; } return null; } /* (non-Javadoc) * @see org.eclipse.pde.internal.core.IModelProvider#disconnect(java.lang.Object, java.lang.Object) */ public void disconnect(Object element, Object consumer) { ModelInfo info = (ModelInfo) models.get(element); if (info != null) { info.count--; if (info.consumer != null && info.consumer.equals(consumer)) { // editable copy can go info.model.dispose(); info.model = null; } if (info.count == 0) { if (info.model != null) info.model.dispose(); info.readOnlyModel = null; models.remove(element); } } } /* (non-Javadoc) * @see org.eclipse.pde.internal.core.IModelProvider#getModel(java.lang.Object, java.lang.Object) */ public IModel getModel(Object element, Object consumer) { ModelInfo info = (ModelInfo) models.get(element); if (info != null) { if (info.consumer != null && info.consumer.equals(consumer)) return info.model; else { return info.readOnlyModel; } } return null; } /* (non-Javadoc) * @see org.eclipse.pde.internal.core.IModelProvider#removeModelProviderListener(org.eclipse.pde.internal.core.IModelProviderListener) */ public void removeModelProviderListener(IModelProviderListener listener) { listeners.remove(listener); } /* 暂时没有用到 * (non-Javadoc) * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) */ public void resourceChanged(IResourceChangeEvent event) { // No need to do anything if nobody has the models if (hibernateModels == null) return; switch (event.getType()) { case IResourceChangeEvent.PRE_AUTO_BUILD : if (modelChanges == null) modelChanges = new Vector(); break; case IResourceChangeEvent.PRE_CLOSE : // project about to close if (modelChanges == null) modelChanges = new Vector(); break; case IResourceChangeEvent.PRE_DELETE : // project about to be deleted if (modelChanges == null) modelChanges = new Vector(); break; } } /* 暂时没有用到 * (non-Javadoc) * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta) */ public boolean visit(IResourceDelta delta) throws CoreException { switch (delta.getKind()) { case IResourceDelta.ADDED : log.debug("// handle added resource"); break; case IResourceDelta.REMOVED : log.debug("// handle removed resource"); break; case IResourceDelta.CHANGED : log.debug("// handle changed resource"); break; default: log.debug("// handle resource type "+delta.getKind()); } return true; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -