58,452
社区成员




public class DiagramOutlinePage extends ContentOutlinePage
public Object getAdapter(Class type) {
if (type == IShowInTargetList.class) {
return new IShowInTargetList() {
public String[] getShowInTargetIds() {
return new String[] { ProjectExplorer.VIEW_ID };
}
};
}
// **** modify start zhujia 2008/06/17 ****
if (type == IContentOutlinePage.class) {
DMTreeViewer viewer = new DMTreeViewer(this);
diagramOutlinePage = new DiagramOutlinePage(viewer, this);
PluginUtil.setOutlinePage(diagramOutlinePage);
viewer.setRootEditPart(new DiagramRootTreeEditPart());
return diagramOutlinePage;
}
// **** modify end zhujia 2008/06/17 ****
return super.getAdapter(type);
}
public EditPartFactory getOutlineViewEditPartFactory() {
return new EditPartFactory() {
public EditPart createEditPart(EditPart context, Object model) {
//下面这几个if是按顺序执行的,就是说前一个if返回的值为后一个所用
//模型关系一层比一层小
if (model instanceof Resource) {
//这一层得到当前编辑区中所有模型的EditPart
Resource resource = (Resource) model;
String editorInputName = ((FileEditorInput) DMDiagramEditor.this.getEditorInput()).getName();
editorInputName = editorInputName.substring(0, editorInputName.lastIndexOf("."));
return new RootDiagramTreeEditPart(DMDiagramEditorUtil.getActiveDiagram(resource), resource,
editorInputName);
}
if (model instanceof Diagram) {
//底层模型(容器)
return new DiagramContainerEditPart(model);
}
if (model instanceof Node) {
//子模型,这样就能跟底层模型形成结构关系
EObject obj = ((Node) model).getElement();
if (obj instanceof Entity) {
return new EntityTreeEditPart(model);
} else if (obj instanceof jp.co.intramart.app.producer.db.dm.model.View) {
return new ViewTreeEditPart(model);
}
}
return null;
}
};
}
//定义EditPart的例子
public class DiagramContainerEditPart extends TreeContainerEditPart {
private static String lblLogicalDataModel = ResourceMessages.getString("OutLineLabel_LogicalDataModel");
private static String lblPhycalDataModel = ResourceMessages.getString("OutLineLabel_PhysicalDataModel");
public DiagramContainerEditPart(Object model) {
super(model);
}
protected Image getImage() {//outline中节点的图形在这得到
return FigureUtil.getImage(DMDiagramEditorPlugin.ID, "images/opration.gif");
}
protected List<Node> getModelChildren() {//得到该模型的子节点
Object model = getModel();
boolean isLogical = ModelUtil.isLogicalEditType();
int cnt = 1;
if (model instanceof Diagram) {
List<Node> listAll = new ArrayList<Node>();
SortedMap<String, Node> sortMapEntity = new TreeMap<String, Node>();
SortedMap<String, Node> sortMapView = new TreeMap<String, Node>();
// get sorted entity and view list
for (Object child : ((Diagram) model).getChildren()) {
Node node = (Node) child;
EObject obj = node.getElement();
if (obj instanceof Entity) {
if (!(obj instanceof SubEntity)) {
Entity entity = (Entity) obj;
// let same name entity different
String name = NamedItemUtil.getDisplayName(entity, isLogical) + " " + cnt++;
sortMapEntity.put(name, node);
}
}
if (node.getElement() instanceof jp.co.intramart.app.producer.db.dm.model.View) {
jp.co.intramart.app.producer.db.dm.model.View view = (jp.co.intramart.app.producer.db.dm.model.View) obj;
// let same name view different
String name = NamedItemUtil.getDisplayName(view, isLogical) + " " + cnt++;
sortMapView.put(name, node);
}
}
// add views after all entities
listAll.addAll(sortMapEntity.values());
listAll.addAll(sortMapView.values());
return listAll;
}
return null;
}
protected String getText() {//在outline上显示的文本
if (ModelUtil.isLogicalEditType()) {
return lblLogicalDataModel;
} else {
return lblPhycalDataModel;
}
}
@Override
protected void handleNotificationEvent(Notification event) {
if (event.getEventType() == Notification.ADD || event.getEventType() == Notification.REMOVE) {
this.refreshChildren();
} else {
super.handleNotificationEvent(event);
}
}
public void setText(String text) {
((TreeItem) super.getWidget()).setText(text);
}
}