提交 1a9bf0ce 编写于 作者: S serge-rider

#2462 ER diagram datasources info

上级 0225de07
......@@ -19,7 +19,9 @@
*/
package org.jkiss.dbeaver.ext.erd.model;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.draw2d.AbsoluteBendpoint;
import org.eclipse.draw2d.Bendpoint;
import org.eclipse.draw2d.RelativeBendpoint;
......@@ -27,12 +29,10 @@ import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.jface.resource.StringConverter;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.ext.erd.ERDConstants;
import org.jkiss.dbeaver.ext.erd.part.*;
import org.jkiss.dbeaver.model.*;
......@@ -143,6 +143,39 @@ public class DiagramLoader
List<ERDEntity> entities = new ArrayList<>();
}
public static List<DBPDataSourceContainer> extractContainers(IFile resource)
throws IOException, XMLException, DBException
{
List<DBPDataSourceContainer> containers = new ArrayList<>();
final DataSourceRegistry dsRegistry = DBeaverCore.getInstance().getProjectRegistry().getDataSourceRegistry(resource.getProject());
if (dsRegistry == null) {
return containers;
}
try (InputStream is = resource.getContents()) {
final Document document = XMLUtils.parseDocument(is);
final Element diagramElem = document.getDocumentElement();
final Element entitiesElem = XMLUtils.getChildElement(diagramElem, TAG_ENTITIES);
if (entitiesElem != null) {
// Parse data source
for (Element dsElem : XMLUtils.getChildElementList(entitiesElem, TAG_DATA_SOURCE)) {
String dsId = dsElem.getAttribute(ATTR_ID);
if (!CommonUtils.isEmpty(dsId)) {
// Get connected datasource
final DataSourceDescriptor dataSourceContainer = dsRegistry.getDataSource(dsId);
if (dataSourceContainer != null) {
containers.add(dataSourceContainer);
}
}
}
}
} catch (CoreException e) {
throw new DBException("Error reading resource contents", e);
}
return containers;
}
public static void load(DBRProgressMonitor monitor, IProject project, DiagramPart diagramPart, InputStream in)
throws IOException, XMLException, DBException
{
......
......@@ -23,12 +23,14 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.ext.erd.editor.ERDEditorInput;
import org.jkiss.dbeaver.ext.erd.editor.ERDEditorStandalone;
import org.jkiss.dbeaver.ext.erd.model.DiagramLoader;
import org.jkiss.dbeaver.ext.erd.model.EntityDiagram;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.navigator.DBNResource;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
......@@ -43,12 +45,15 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
/**
* Bookmarks handler
* ERD resource handler
*/
public class ERDResourceHandler extends AbstractResourceHandler {
private static final Log log = Log.getLog(ERDResourceHandler.class);
private static final String ERD_EXT = "erd"; //$NON-NLS-1$
public static IFolder getDiagramsFolder(IProject project, boolean forceCreate) throws CoreException
......@@ -170,5 +175,16 @@ public class ERDResourceHandler extends AbstractResourceHandler {
return file;
}
@Override
public Collection<DBPDataSourceContainer> getAssociatedDataSources(IResource resource) {
if (resource instanceof IFile) {
try {
return DiagramLoader.extractContainers((IFile)resource);
} catch (Exception e) {
log.error(e);
return null;
}
}
return super.getAssociatedDataSources(resource);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册