Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
3efeea88
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dbeaver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3efeea88
编写于
2月 28, 2018
作者:
A
Alexander Fedorov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#2556 editor vertical ruler should show breakpoints
Former-commit-id:
58a91ae2
上级
b0967e8c
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
427 addition
and
382 deletion
+427
-382
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageEditor.java
.../ui/editors/entity/properties/TabbedFolderPageEditor.java
+6
-0
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorNested.java
...src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorNested.java
+387
-376
plugins/org.jkiss.dbeaver.debug.ui/META-INF/MANIFEST.MF
plugins/org.jkiss.dbeaver.debug.ui/META-INF/MANIFEST.MF
+3
-1
plugins/org.jkiss.dbeaver.debug.ui/plugin.xml
plugins/org.jkiss.dbeaver.debug.ui/plugin.xml
+3
-3
plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/ui/actions/DebugActionAdapterFactory.java
...s/dbeaver/debug/ui/actions/DebugActionAdapterFactory.java
+1
-2
plugins/org.jkiss.dbeaver.ext.postgresql.debug.ui/plugin.xml
plugins/org.jkiss.dbeaver.ext.postgresql.debug.ui/plugin.xml
+27
-0
未找到文件。
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/properties/TabbedFolderPageEditor.java
浏览文件 @
3efeea88
...
...
@@ -252,6 +252,12 @@ public class TabbedFolderPageEditor extends TabbedFolderPage implements IDatabas
public
TabbedFolderPageEditorSite
(
MultiPageEditorPart
multiPageEditor
,
IEditorPart
editor
)
{
super
(
multiPageEditor
,
editor
);
}
@Override
public
String
getId
()
{
String
id
=
editorDescriptor
.
getId
();
return
id
;
}
@NotNull
@Override
...
...
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorNested.java
浏览文件 @
3efeea88
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui.editors.sql
;
import
org.eclipse.core.runtime.CoreException
;
import
org.eclipse.core.runtime.IProgressMonitor
;
import
org.eclipse.core.runtime.IStatus
;
import
org.eclipse.core.runtime.Status
;
import
org.eclipse.core.runtime.jobs.IJobChangeEvent
;
import
org.eclipse.core.runtime.jobs.JobChangeAdapter
;
import
org.eclipse.jface.action.Action
;
import
org.eclipse.jface.action.IContributionManager
;
import
org.eclipse.jface.action.Separator
;
import
org.eclipse.jface.text.BadLocationException
;
import
org.eclipse.jface.text.Document
;
import
org.eclipse.jface.text.IDocument
;
import
org.eclipse.jface.text.IRegion
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.custom.SashForm
;
import
org.eclipse.swt.events.FocusEvent
;
import
org.eclipse.swt.events.FocusListener
;
import
org.eclipse.swt.widgets.Composite
;
import
org.eclipse.swt.widgets.Control
;
import
org.eclipse.ui.IEditorSite
;
import
org.eclipse.ui.PartInitException
;
import
org.eclipse.ui.part.MultiPageEditorSite
;
import
org.eclipse.ui.texteditor.IDocumentProvider
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.core.CoreCommands
;
import
org.jkiss.dbeaver.core.DBeaverUI
;
import
org.jkiss.dbeaver.model.exec.DBCExecutionContext
;
import
org.jkiss.dbeaver.model.exec.compile.DBCCompileLog
;
import
org.jkiss.dbeaver.model.exec.compile.DBCSourceHost
;
import
org.jkiss.dbeaver.model.runtime.AbstractJob
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.sql.SQLUtils
;
import
org.jkiss.dbeaver.model.struct.DBSObject
;
import
org.jkiss.dbeaver.ui.*
;
import
org.jkiss.dbeaver.ui.controls.ObjectCompilerLogViewer
;
import
org.jkiss.dbeaver.ui.controls.ProgressPageControl
;
import
org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput
;
import
org.jkiss.dbeaver.ui.editors.entity.EntityEditor
;
import
org.jkiss.dbeaver.ui.editors.text.BaseTextDocumentProvider
;
import
org.jkiss.dbeaver.utils.RuntimeUtils
;
/**
* SQLEditorNested
*/
public
abstract
class
SQLEditorNested
<
T
extends
DBSObject
>
extends
SQLEditorBase
implements
IActiveWorkbenchPart
,
IRefreshablePart
,
DBCSourceHost
{
private
EditorPageControl
pageControl
;
private
ObjectCompilerLogViewer
compileLog
;
private
Control
editorControl
;
private
SashForm
editorSash
;
private
boolean
activated
;
public
SQLEditorNested
()
{
super
();
setDocumentProvider
(
new
ObjectDocumentProvider
());
//setHasVerticalRuler(false);
}
@Override
public
IDatabaseEditorInput
getEditorInput
()
{
return
(
IDatabaseEditorInput
)
super
.
getEditorInput
();
}
@Override
public
T
getSourceObject
()
{
IDatabaseEditorInput
editorInput
=
getEditorInput
();
if
(
editorInput
==
null
)
{
return
null
;
}
return
(
T
)
editorInput
.
getDatabaseObject
();
}
@Override
public
DBCExecutionContext
getExecutionContext
()
{
IDatabaseEditorInput
editorInput
=
getEditorInput
();
if
(
editorInput
==
null
)
{
return
null
;
}
return
editorInput
.
getExecutionContext
();
}
@Override
public
void
createPartControl
(
Composite
parent
)
{
pageControl
=
new
EditorPageControl
(
parent
,
SWT
.
SHEET
);
boolean
hasCompiler
=
getCompileCommandId
()
!=
null
;
if
(
hasCompiler
)
{
editorSash
=
new
SashForm
(
pageControl
.
createContentContainer
(),
SWT
.
VERTICAL
|
SWT
.
SMOOTH
);
super
.
createPartControl
(
editorSash
);
editorControl
=
editorSash
.
getChildren
()[
0
];
compileLog
=
new
ObjectCompilerLogViewer
(
editorSash
,
false
);
}
else
{
super
.
createPartControl
(
pageControl
.
createContentContainer
());
}
// Create new or substitute progress control
pageControl
.
createOrSubstituteProgressPanel
(
getSite
());
pageControl
.
setInfo
(
"Source"
);
if
(
hasCompiler
)
{
editorSash
.
setWeights
(
new
int
[]{
70
,
30
});
editorSash
.
setMaximizedControl
(
editorControl
);
}
// Use focus to activate page control
final
Control
editorControl
=
getEditorControl
();
assert
editorControl
!=
null
;
editorControl
.
addFocusListener
(
new
FocusListener
()
{
@Override
public
void
focusGained
(
FocusEvent
e
)
{
if
(
pageControl
!=
null
&&
!
pageControl
.
isDisposed
())
{
pageControl
.
activate
(
true
);
}
}
@Override
public
void
focusLost
(
FocusEvent
e
)
{
if
(
pageControl
!=
null
&&
!
pageControl
.
isDisposed
())
{
pageControl
.
activate
(
false
);
}
}
});
}
@Override
public
void
doSave
(
final
IProgressMonitor
progressMonitor
)
{
DBeaverUI
.
syncExec
(
new
Runnable
()
{
@Override
public
void
run
()
{
SQLEditorNested
.
super
.
doSave
(
progressMonitor
);
}
});
}
@Override
public
void
activatePart
()
{
if
(!
activated
)
{
reloadSyntaxRules
();
activated
=
true
;
}
}
@Override
public
void
deactivatePart
()
{
}
@Override
public
void
refreshPart
(
Object
source
,
boolean
force
)
{
// Check if we are in saving process
// If so then no refresh needed (source text was updated during save)
IEditorSite
editorSite
=
getEditorSite
();
if
(
editorSite
instanceof
MultiPageEditorSite
&&
((
MultiPageEditorSite
)
editorSite
).
getMultiPageEditor
()
instanceof
EntityEditor
&&
((
EntityEditor
)
((
MultiPageEditorSite
)
editorSite
).
getMultiPageEditor
()).
isSaveInProgress
())
{
return
;
}
final
IDocumentProvider
documentProvider
=
getDocumentProvider
();
if
(
documentProvider
instanceof
SQLEditorNested
.
ObjectDocumentProvider
)
{
((
SQLEditorNested
.
ObjectDocumentProvider
)
documentProvider
).
sourceText
=
null
;
}
if
(
force
)
{
try
{
super
.
init
(
editorSite
,
getEditorInput
());
//setFocus();
}
catch
(
PartInitException
e
)
{
log
.
error
(
e
);
}
}
reloadSyntaxRules
();
}
protected
String
getCompileCommandId
()
{
return
null
;
}
public
boolean
isDocumentLoaded
()
{
final
IDocumentProvider
documentProvider
=
getDocumentProvider
();
if
(
documentProvider
instanceof
SQLEditorNested
.
ObjectDocumentProvider
)
{
return
((
SQLEditorNested
.
ObjectDocumentProvider
)
documentProvider
).
sourceLoaded
;
}
return
true
;
}
private
class
ObjectDocumentProvider
extends
BaseTextDocumentProvider
{
private
String
sourceText
;
private
boolean
sourceLoaded
;
@Override
public
boolean
isReadOnly
(
Object
element
)
{
return
SQLEditorNested
.
this
.
isReadOnly
();
}
@Override
public
boolean
isModifiable
(
Object
element
)
{
return
!
SQLEditorNested
.
this
.
isReadOnly
();
}
@Override
protected
IDocument
createDocument
(
Object
element
)
throws
CoreException
{
final
Document
document
=
new
Document
();
if
(
sourceText
==
null
)
{
sourceText
=
SQLUtils
.
generateCommentLine
(
getDataSource
(),
"Loading '"
+
getEditorInput
().
getName
()
+
"' source..."
);
document
.
set
(
sourceText
);
AbstractJob
job
=
new
AbstractJob
(
"Load SQL source"
)
{
{
setUser
(
true
);
}
@Override
protected
IStatus
run
(
DBRProgressMonitor
monitor
)
{
try
{
sourceText
=
getSourceText
(
monitor
);
if
(
sourceText
==
null
)
{
sourceText
=
SQLUtils
.
generateCommentLine
(
getDataSource
(),
"Empty source"
);
}
return
Status
.
OK_STATUS
;
}
catch
(
Exception
e
)
{
sourceText
=
"/* ERROR WHILE READING SOURCE:\n\n"
+
e
.
getMessage
()
+
"\n*/"
;
return
Status
.
CANCEL_STATUS
;
}
}
};
job
.
addJobChangeListener
(
new
JobChangeAdapter
()
{
@Override
public
void
done
(
IJobChangeEvent
event
)
{
DBeaverUI
.
asyncExec
(
new
Runnable
()
{
@Override
public
void
run
()
{
try
{
SQLEditorNested
.
this
.
init
(
getEditorSite
(),
getEditorInput
());
SQLEditorNested
.
this
.
reloadSyntaxRules
();
}
catch
(
PartInitException
e
)
{
log
.
error
(
e
);
}
}
});
super
.
done
(
event
);
}
});
job
.
schedule
();
}
// Set text
document
.
set
(
sourceText
);
sourceLoaded
=
true
;
return
document
;
}
@Override
protected
void
doSaveDocument
(
IProgressMonitor
monitor
,
Object
element
,
IDocument
document
,
boolean
overwrite
)
throws
CoreException
{
setSourceText
(
RuntimeUtils
.
makeMonitor
(
monitor
),
document
.
get
());
}
}
@Override
public
DBCCompileLog
getCompileLog
()
{
return
compileLog
;
}
@Override
public
void
setCompileInfo
(
String
message
,
boolean
error
)
{
pageControl
.
setInfo
(
message
);
}
@Override
public
void
positionSource
(
int
line
,
int
position
)
{
try
{
final
IRegion
lineInfo
=
getTextViewer
().
getDocument
().
getLineInformation
(
line
-
1
);
final
int
offset
=
lineInfo
.
getOffset
()
+
position
-
1
;
super
.
selectAndReveal
(
offset
,
1
);
//textEditor.setFocus();
}
catch
(
BadLocationException
e
)
{
log
.
warn
(
e
);
// do nothing
}
}
@Override
public
void
showCompileLog
()
{
editorSash
.
setMaximizedControl
(
null
);
compileLog
.
layoutLog
();
}
protected
abstract
String
getSourceText
(
DBRProgressMonitor
monitor
)
throws
DBException
;
protected
abstract
void
setSourceText
(
DBRProgressMonitor
monitor
,
String
sourceText
);
protected
void
contributeEditorCommands
(
IContributionManager
toolBarManager
)
{
toolBarManager
.
add
(
ActionUtils
.
makeCommandContribution
(
getSite
().
getWorkbenchWindow
(),
CoreCommands
.
CMD_OPEN_FILE
));
toolBarManager
.
add
(
ActionUtils
.
makeCommandContribution
(
getSite
().
getWorkbenchWindow
(),
CoreCommands
.
CMD_SAVE_FILE
));
String
compileCommandId
=
getCompileCommandId
();
if
(
compileCommandId
!=
null
)
{
toolBarManager
.
add
(
new
Separator
());
toolBarManager
.
add
(
ActionUtils
.
makeCommandContribution
(
getSite
().
getWorkbenchWindow
(),
compileCommandId
));
toolBarManager
.
add
(
new
ViewLogAction
());
}
}
@Override
public
void
doSaveAs
()
{
saveToExternalFile
();
}
private
class
EditorPageControl
extends
ProgressPageControl
{
public
EditorPageControl
(
Composite
parent
,
int
style
)
{
super
(
parent
,
style
);
}
@Override
protected
void
fillCustomActions
(
IContributionManager
contributionManager
)
{
contributeEditorCommands
(
contributionManager
);
}
}
public
class
ViewLogAction
extends
Action
{
public
ViewLogAction
()
{
super
(
"View compile log"
,
DBeaverIcons
.
getImageDescriptor
(
UIIcon
.
COMPILE_LOG
));
//$NON-NLS-2$
}
@Override
public
void
run
()
{
if
(
getTextViewer
().
getControl
().
isDisposed
())
{
return
;
}
if
(
editorSash
.
getMaximizedControl
()
==
null
)
{
editorSash
.
setMaximizedControl
(
editorControl
);
}
else
{
showCompileLog
();
}
}
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jkiss.dbeaver.ui.editors.sql
;
import
org.eclipse.core.resources.IResource
;
import
org.eclipse.core.runtime.CoreException
;
import
org.eclipse.core.runtime.IProgressMonitor
;
import
org.eclipse.core.runtime.IStatus
;
import
org.eclipse.core.runtime.Status
;
import
org.eclipse.core.runtime.jobs.IJobChangeEvent
;
import
org.eclipse.core.runtime.jobs.JobChangeAdapter
;
import
org.eclipse.jface.action.Action
;
import
org.eclipse.jface.action.IContributionManager
;
import
org.eclipse.jface.action.Separator
;
import
org.eclipse.jface.text.BadLocationException
;
import
org.eclipse.jface.text.Document
;
import
org.eclipse.jface.text.IDocument
;
import
org.eclipse.jface.text.IRegion
;
import
org.eclipse.jface.text.source.IAnnotationModel
;
import
org.eclipse.swt.SWT
;
import
org.eclipse.swt.custom.SashForm
;
import
org.eclipse.swt.events.FocusEvent
;
import
org.eclipse.swt.events.FocusListener
;
import
org.eclipse.swt.widgets.Composite
;
import
org.eclipse.swt.widgets.Control
;
import
org.eclipse.ui.IEditorSite
;
import
org.eclipse.ui.PartInitException
;
import
org.eclipse.ui.part.MultiPageEditorSite
;
import
org.eclipse.ui.texteditor.IDocumentProvider
;
import
org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel
;
import
org.jkiss.dbeaver.DBException
;
import
org.jkiss.dbeaver.core.CoreCommands
;
import
org.jkiss.dbeaver.core.DBeaverCore
;
import
org.jkiss.dbeaver.core.DBeaverUI
;
import
org.jkiss.dbeaver.model.exec.DBCExecutionContext
;
import
org.jkiss.dbeaver.model.exec.compile.DBCCompileLog
;
import
org.jkiss.dbeaver.model.exec.compile.DBCSourceHost
;
import
org.jkiss.dbeaver.model.runtime.AbstractJob
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.sql.SQLUtils
;
import
org.jkiss.dbeaver.model.struct.DBSObject
;
import
org.jkiss.dbeaver.ui.*
;
import
org.jkiss.dbeaver.ui.controls.ObjectCompilerLogViewer
;
import
org.jkiss.dbeaver.ui.controls.ProgressPageControl
;
import
org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput
;
import
org.jkiss.dbeaver.ui.editors.entity.EntityEditor
;
import
org.jkiss.dbeaver.ui.editors.text.BaseTextDocumentProvider
;
import
org.jkiss.dbeaver.utils.RuntimeUtils
;
/**
* SQLEditorNested
*/
public
abstract
class
SQLEditorNested
<
T
extends
DBSObject
>
extends
SQLEditorBase
implements
IActiveWorkbenchPart
,
IRefreshablePart
,
DBCSourceHost
{
private
EditorPageControl
pageControl
;
private
ObjectCompilerLogViewer
compileLog
;
private
Control
editorControl
;
private
SashForm
editorSash
;
private
boolean
activated
;
public
SQLEditorNested
()
{
super
();
setDocumentProvider
(
new
ObjectDocumentProvider
());
//setHasVerticalRuler(false);
}
@Override
public
IDatabaseEditorInput
getEditorInput
()
{
return
(
IDatabaseEditorInput
)
super
.
getEditorInput
();
}
@Override
public
T
getSourceObject
()
{
IDatabaseEditorInput
editorInput
=
getEditorInput
();
if
(
editorInput
==
null
)
{
return
null
;
}
return
(
T
)
editorInput
.
getDatabaseObject
();
}
@Override
public
DBCExecutionContext
getExecutionContext
()
{
IDatabaseEditorInput
editorInput
=
getEditorInput
();
if
(
editorInput
==
null
)
{
return
null
;
}
return
editorInput
.
getExecutionContext
();
}
@Override
public
void
createPartControl
(
Composite
parent
)
{
pageControl
=
new
EditorPageControl
(
parent
,
SWT
.
SHEET
);
boolean
hasCompiler
=
getCompileCommandId
()
!=
null
;
if
(
hasCompiler
)
{
editorSash
=
new
SashForm
(
pageControl
.
createContentContainer
(),
SWT
.
VERTICAL
|
SWT
.
SMOOTH
);
super
.
createPartControl
(
editorSash
);
editorControl
=
editorSash
.
getChildren
()[
0
];
compileLog
=
new
ObjectCompilerLogViewer
(
editorSash
,
false
);
}
else
{
super
.
createPartControl
(
pageControl
.
createContentContainer
());
}
// Create new or substitute progress control
pageControl
.
createOrSubstituteProgressPanel
(
getSite
());
pageControl
.
setInfo
(
"Source"
);
if
(
hasCompiler
)
{
editorSash
.
setWeights
(
new
int
[]{
70
,
30
});
editorSash
.
setMaximizedControl
(
editorControl
);
}
// Use focus to activate page control
final
Control
editorControl
=
getEditorControl
();
assert
editorControl
!=
null
;
editorControl
.
addFocusListener
(
new
FocusListener
()
{
@Override
public
void
focusGained
(
FocusEvent
e
)
{
if
(
pageControl
!=
null
&&
!
pageControl
.
isDisposed
())
{
pageControl
.
activate
(
true
);
}
}
@Override
public
void
focusLost
(
FocusEvent
e
)
{
if
(
pageControl
!=
null
&&
!
pageControl
.
isDisposed
())
{
pageControl
.
activate
(
false
);
}
}
});
}
@Override
public
void
doSave
(
final
IProgressMonitor
progressMonitor
)
{
DBeaverUI
.
syncExec
(
new
Runnable
()
{
@Override
public
void
run
()
{
SQLEditorNested
.
super
.
doSave
(
progressMonitor
);
}
});
}
@Override
public
void
activatePart
()
{
if
(!
activated
)
{
reloadSyntaxRules
();
activated
=
true
;
}
}
@Override
public
void
deactivatePart
()
{
}
@Override
public
void
refreshPart
(
Object
source
,
boolean
force
)
{
// Check if we are in saving process
// If so then no refresh needed (source text was updated during save)
IEditorSite
editorSite
=
getEditorSite
();
if
(
editorSite
instanceof
MultiPageEditorSite
&&
((
MultiPageEditorSite
)
editorSite
).
getMultiPageEditor
()
instanceof
EntityEditor
&&
((
EntityEditor
)
((
MultiPageEditorSite
)
editorSite
).
getMultiPageEditor
()).
isSaveInProgress
())
{
return
;
}
final
IDocumentProvider
documentProvider
=
getDocumentProvider
();
if
(
documentProvider
instanceof
SQLEditorNested
.
ObjectDocumentProvider
)
{
((
SQLEditorNested
.
ObjectDocumentProvider
)
documentProvider
).
sourceText
=
null
;
}
if
(
force
)
{
try
{
super
.
init
(
editorSite
,
getEditorInput
());
//setFocus();
}
catch
(
PartInitException
e
)
{
log
.
error
(
e
);
}
}
reloadSyntaxRules
();
}
protected
String
getCompileCommandId
()
{
return
null
;
}
public
boolean
isDocumentLoaded
()
{
final
IDocumentProvider
documentProvider
=
getDocumentProvider
();
if
(
documentProvider
instanceof
SQLEditorNested
.
ObjectDocumentProvider
)
{
return
((
SQLEditorNested
.
ObjectDocumentProvider
)
documentProvider
).
sourceLoaded
;
}
return
true
;
}
private
class
ObjectDocumentProvider
extends
BaseTextDocumentProvider
{
private
String
sourceText
;
private
boolean
sourceLoaded
;
@Override
public
boolean
isReadOnly
(
Object
element
)
{
return
SQLEditorNested
.
this
.
isReadOnly
();
}
@Override
public
boolean
isModifiable
(
Object
element
)
{
return
!
SQLEditorNested
.
this
.
isReadOnly
();
}
@Override
protected
IAnnotationModel
createAnnotationModel
(
Object
element
)
throws
CoreException
{
//FIXME:AF: provide common way to retrieve IResource for remote object
IResource
resource
=
DBeaverCore
.
getInstance
().
getProjectManager
().
getActiveProject
();
return
new
ResourceMarkerAnnotationModel
(
resource
);
}
@Override
protected
IDocument
createDocument
(
Object
element
)
throws
CoreException
{
final
Document
document
=
new
Document
();
if
(
sourceText
==
null
)
{
sourceText
=
SQLUtils
.
generateCommentLine
(
getDataSource
(),
"Loading '"
+
getEditorInput
().
getName
()
+
"' source..."
);
document
.
set
(
sourceText
);
AbstractJob
job
=
new
AbstractJob
(
"Load SQL source"
)
{
{
setUser
(
true
);
}
@Override
protected
IStatus
run
(
DBRProgressMonitor
monitor
)
{
try
{
sourceText
=
getSourceText
(
monitor
);
if
(
sourceText
==
null
)
{
sourceText
=
SQLUtils
.
generateCommentLine
(
getDataSource
(),
"Empty source"
);
}
return
Status
.
OK_STATUS
;
}
catch
(
Exception
e
)
{
sourceText
=
"/* ERROR WHILE READING SOURCE:\n\n"
+
e
.
getMessage
()
+
"\n*/"
;
return
Status
.
CANCEL_STATUS
;
}
}
};
job
.
addJobChangeListener
(
new
JobChangeAdapter
()
{
@Override
public
void
done
(
IJobChangeEvent
event
)
{
DBeaverUI
.
asyncExec
(
new
Runnable
()
{
@Override
public
void
run
()
{
try
{
SQLEditorNested
.
this
.
init
(
getEditorSite
(),
getEditorInput
());
SQLEditorNested
.
this
.
reloadSyntaxRules
();
}
catch
(
PartInitException
e
)
{
log
.
error
(
e
);
}
}
});
super
.
done
(
event
);
}
});
job
.
schedule
();
}
// Set text
document
.
set
(
sourceText
);
sourceLoaded
=
true
;
return
document
;
}
@Override
protected
void
doSaveDocument
(
IProgressMonitor
monitor
,
Object
element
,
IDocument
document
,
boolean
overwrite
)
throws
CoreException
{
setSourceText
(
RuntimeUtils
.
makeMonitor
(
monitor
),
document
.
get
());
}
}
@Override
public
DBCCompileLog
getCompileLog
()
{
return
compileLog
;
}
@Override
public
void
setCompileInfo
(
String
message
,
boolean
error
)
{
pageControl
.
setInfo
(
message
);
}
@Override
public
void
positionSource
(
int
line
,
int
position
)
{
try
{
final
IRegion
lineInfo
=
getTextViewer
().
getDocument
().
getLineInformation
(
line
-
1
);
final
int
offset
=
lineInfo
.
getOffset
()
+
position
-
1
;
super
.
selectAndReveal
(
offset
,
1
);
//textEditor.setFocus();
}
catch
(
BadLocationException
e
)
{
log
.
warn
(
e
);
// do nothing
}
}
@Override
public
void
showCompileLog
()
{
editorSash
.
setMaximizedControl
(
null
);
compileLog
.
layoutLog
();
}
protected
abstract
String
getSourceText
(
DBRProgressMonitor
monitor
)
throws
DBException
;
protected
abstract
void
setSourceText
(
DBRProgressMonitor
monitor
,
String
sourceText
);
protected
void
contributeEditorCommands
(
IContributionManager
toolBarManager
)
{
toolBarManager
.
add
(
ActionUtils
.
makeCommandContribution
(
getSite
().
getWorkbenchWindow
(),
CoreCommands
.
CMD_OPEN_FILE
));
toolBarManager
.
add
(
ActionUtils
.
makeCommandContribution
(
getSite
().
getWorkbenchWindow
(),
CoreCommands
.
CMD_SAVE_FILE
));
String
compileCommandId
=
getCompileCommandId
();
if
(
compileCommandId
!=
null
)
{
toolBarManager
.
add
(
new
Separator
());
toolBarManager
.
add
(
ActionUtils
.
makeCommandContribution
(
getSite
().
getWorkbenchWindow
(),
compileCommandId
));
toolBarManager
.
add
(
new
ViewLogAction
());
}
}
@Override
public
void
doSaveAs
()
{
saveToExternalFile
();
}
private
class
EditorPageControl
extends
ProgressPageControl
{
public
EditorPageControl
(
Composite
parent
,
int
style
)
{
super
(
parent
,
style
);
}
@Override
protected
void
fillCustomActions
(
IContributionManager
contributionManager
)
{
contributeEditorCommands
(
contributionManager
);
}
}
public
class
ViewLogAction
extends
Action
{
public
ViewLogAction
()
{
super
(
"View compile log"
,
DBeaverIcons
.
getImageDescriptor
(
UIIcon
.
COMPILE_LOG
));
//$NON-NLS-2$
}
@Override
public
void
run
()
{
if
(
getTextViewer
().
getControl
().
isDisposed
())
{
return
;
}
if
(
editorSash
.
getMaximizedControl
()
==
null
)
{
editorSash
.
setMaximizedControl
(
editorControl
);
}
else
{
showCompileLog
();
}
}
}
}
plugins/org.jkiss.dbeaver.debug.ui/META-INF/MANIFEST.MF
浏览文件 @
3efeea88
...
...
@@ -14,4 +14,6 @@ Require-Bundle: org.eclipse.core.runtime,
org.jkiss.dbeaver.core,
org.jkiss.dbeaver.ui,
org.jkiss.dbeaver.debug.core
Export-Package: org.jkiss.dbeaver.debug.ui
Export-Package: org.jkiss.dbeaver.debug.ui,
org.jkiss.dbeaver.debug.ui.actions,
org.jkiss.dbeaver.debug.ui.details
plugins/org.jkiss.dbeaver.debug.ui/plugin.xml
浏览文件 @
3efeea88
...
...
@@ -23,21 +23,21 @@
point=
"org.eclipse.core.runtime.adapters"
>
<factory
adaptableType=
"org.jkiss.dbeaver.ui.editors.entity.EntityEditor"
class=
"org.jkiss.dbeaver.debug.
internal.
ui.actions.DebugActionAdapterFactory"
>
class=
"org.jkiss.dbeaver.debug.ui.actions.DebugActionAdapterFactory"
>
<adapter
type=
"org.eclipse.debug.ui.actions.IToggleBreakpointsTarget"
>
</adapter>
</factory>
<factory
adaptableType=
"org.jkiss.dbeaver.ui.editors.entity.EntityEditorInput"
class=
"org.jkiss.dbeaver.debug.
internal.
ui.actions.DebugActionAdapterFactory"
>
class=
"org.jkiss.dbeaver.debug.ui.actions.DebugActionAdapterFactory"
>
<adapter
type=
"org.eclipse.debug.ui.actions.ILaunchable"
>
</adapter>
</factory>
<factory
adaptableType=
"org.jkiss.dbeaver.model.navigator.DBNDatabaseObject"
class=
"org.jkiss.dbeaver.debug.
internal.
ui.actions.DebugActionAdapterFactory"
>
class=
"org.jkiss.dbeaver.debug.ui.actions.DebugActionAdapterFactory"
>
<adapter
type=
"org.eclipse.debug.ui.actions.ILaunchable"
>
</adapter>
...
...
plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/
internal/
ui/actions/DebugActionAdapterFactory.java
→
plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/ui/actions/DebugActionAdapterFactory.java
浏览文件 @
3efeea88
package
org.jkiss.dbeaver.debug.
internal.
ui.actions
;
package
org.jkiss.dbeaver.debug.ui.actions
;
import
org.eclipse.core.runtime.IAdapterFactory
;
import
org.eclipse.debug.ui.actions.ILaunchable
;
import
org.eclipse.debug.ui.actions.IToggleBreakpointsTarget
;
import
org.jkiss.dbeaver.debug.ui.actions.ToggleProcedureBreakpointTarget
;
public
class
DebugActionAdapterFactory
implements
IAdapterFactory
{
...
...
plugins/org.jkiss.dbeaver.ext.postgresql.debug.ui/plugin.xml
浏览文件 @
3efeea88
...
...
@@ -77,4 +77,31 @@
</shortcut>
</extension>
<extension
point=
"org.eclipse.core.runtime.adapters"
>
<factory
adaptableType=
"org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgreSourceViewEditor"
class=
"org.jkiss.dbeaver.debug.ui.actions.DebugActionAdapterFactory"
>
<adapter
type=
"org.eclipse.debug.ui.actions.IToggleBreakpointsTarget"
>
</adapter>
</factory>
</extension>
<extension
point=
"org.eclipse.ui.editorActions"
>
<editorContribution
id=
"org.jkiss.dbeaver.debug.ui.editorContribution"
targetID=
"postgresql.source.view"
>
<action
actionID=
"RulerDoubleClick"
class=
"org.eclipse.debug.ui.actions.RulerToggleBreakpointActionDelegate"
icon=
"platform:/plugin/org.eclipse.debug.ui/$nl$/icons/full/obj16/brkp_obj.png"
id=
"org.jkiss.dbeaver.debug.ui.actions.ManageBreakpointRulerAction"
label=
"Toggle &Breakpoint"
style=
"push"
>
</action>
</editorContribution>
</extension>
</plugin>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录