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

dbeaver/dbeaver-ee#587 ERD property viewer


Former-commit-id: 3fa82efc
上级 d4425464
......@@ -89,7 +89,9 @@ public abstract class ERDObject<OBJECT> implements IAdaptable, DBPNamedObject {
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter == DBPPropertySource.class) {
return adapter.cast(new PropertyCollector(object, false));
PropertyCollector propertyCollector = new PropertyCollector(object, false);
propertyCollector.collectProperties();
return adapter.cast(propertyCollector);
}
return null;
}
......
......@@ -88,6 +88,7 @@ import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.controls.ProgressLoaderVisualizer;
import org.jkiss.dbeaver.ui.controls.ProgressPageControl;
import org.jkiss.dbeaver.ui.controls.PropertyPageStandard;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.ui.editors.IDatabaseModellerEditor;
import org.jkiss.dbeaver.ui.navigator.actions.ToggleViewAction;
......@@ -281,7 +282,7 @@ public abstract class ERDEditorPart extends GraphicalEditorWithFlyoutPalette
} else if (adapter == ActionRegistry.class) {
return getActionRegistry();
} else if (adapter == IPropertySheetPage.class) {
return getPropertySheetPage();
return new PropertyPageStandard();
} else if (adapter == IContentOutlinePage.class) {
return getOverviewOutlinePage();
} else if (adapter == ZoomManager.class) {
......
......@@ -24,6 +24,7 @@ import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.views.properties.IPropertySource;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.erd.model.ERDObject;
......@@ -32,7 +33,11 @@ import org.jkiss.dbeaver.erd.ui.editor.ERDGraphicalViewer;
import org.jkiss.dbeaver.erd.ui.model.EntityDiagram;
import org.jkiss.dbeaver.model.DBPNamedObject;
import org.jkiss.dbeaver.model.edit.DBECommandContext;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.runtime.properties.PropertyCollector;
import org.jkiss.dbeaver.runtime.properties.PropertySourceEditable;
import org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput;
import org.jkiss.dbeaver.ui.properties.PropertySourceDelegate;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
......@@ -319,5 +324,28 @@ public abstract class PropertyAwarePart extends AbstractGraphicalEditPart implem
refreshVisuals();
}
@Override
public Object getAdapter(Class key) {
if (key == IPropertySource.class) {
Object model = getModel();
if (model instanceof ERDObject) {
Object object = ((ERDObject) model).getObject();
if (object instanceof DBSObject) {
if (isEditEnabled()) {
DBECommandContext commandContext = getCommandContext();
if (commandContext != null) {
PropertySourceEditable pse = new PropertySourceEditable(commandContext, object, object);
pse.collectProperties();
return new PropertySourceDelegate(pse);
}
}
PropertyCollector propertyCollector = new PropertyCollector(object, false);
propertyCollector.collectProperties();
return new PropertySourceDelegate(propertyCollector);
}
}
return null;
}
return super.getAdapter(key);
}
}
\ No newline at end of file
......@@ -438,9 +438,9 @@ public class ObjectPropertyDescriptor extends ObjectAttributeDescriptor implemen
// Use void monitor because this object already read by readValue
object = getParent().getGroupObject(object, new VoidProgressMonitor());
}
final Class<?> argType = setter.getParameterTypes()[0];
if (value == null) {
// Check for primitive argument
final Class<?> argType = setter.getParameterTypes()[0];
if (argType == Integer.TYPE) {
value = 0;
} else if (argType == Short.TYPE) {
......@@ -456,6 +456,10 @@ public class ObjectPropertyDescriptor extends ObjectAttributeDescriptor implemen
} else if (argType == Character.TYPE) {
value = ' ';
}
} else {
if (argType == Boolean.TYPE || argType == Boolean.class && !(value instanceof Boolean)) {
value = CommonUtils.toBoolean(value);
}
}
setter.invoke(object, value);
} else {
......
......@@ -39,9 +39,11 @@ public class CustomCheckboxCellEditor extends CellEditor {
private Label checkBox;
private boolean checked;
private boolean isPropertySheet;
public CustomCheckboxCellEditor(Composite parent) {
public CustomCheckboxCellEditor(Composite parent, int style, boolean isPropertySheet) {
this(parent, SWT.NONE);
this.isPropertySheet = isPropertySheet;
}
public CustomCheckboxCellEditor(Composite parent, int style) {
......
......@@ -16,6 +16,7 @@
*/
package org.jkiss.dbeaver.ui.controls;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
......@@ -132,7 +133,12 @@ public class PropertyPageStandard extends PropertySheetPage implements ILazyProp
for (PropertySourceCache cache : curSelection) {
if (cache.object == object) {
if (!cache.cached) {
cache.propertySource = RuntimeUtils.getObjectAdapter(object, IPropertySource.class);
if (object instanceof IAdaptable) {
cache.propertySource = ((IAdaptable) object).getAdapter(IPropertySource.class);
}
if (cache.propertySource == null) {
cache.propertySource = RuntimeUtils.getObjectAdapter(object, IPropertySource.class);
}
cache.cached = true;
}
return cache.propertySource;
......
......@@ -78,7 +78,7 @@ public class PropertyDescriptorDelegate implements IPropertyDescriptor
if (!delegate.isEditable(propSource.getEditableValue())) {
return null;
}
return PropertyEditorUtils.createCellEditor(parent, propSource.getEditableValue(), delegate, SWT.NONE);
return PropertyEditorUtils.createCellEditor(parent, propSource.getEditableValue(), delegate, SWT.SHEET);
}
@Override
......
......@@ -61,6 +61,8 @@ public class PropertyEditorUtils {
public static CellEditor createCellEditor(Composite parent, Object object, DBPPropertyDescriptor property, int style)
{
boolean isPropertySheet = (style & SWT.SHEET) != 0;
style &= ~SWT.SHEET;
// List
if (property instanceof IPropertyValueListProvider) {
final IPropertyValueListProvider listProvider = (IPropertyValueListProvider) property;
......@@ -93,7 +95,11 @@ public class PropertyEditorUtils {
setValidator(editor, property, object);
return editor;
} else if (BeanUtils.isBooleanType(propertyType)) {
return new CustomCheckboxCellEditor(parent, style);
if (isPropertySheet) {
return new CustomComboBoxCellEditor(parent, new String[] { Boolean.TRUE.toString(), Boolean.FALSE.toString()} , SWT.DROP_DOWN | SWT.READ_ONLY);
} else {
return new CustomCheckboxCellEditor(parent, style);
}
//return new CheckboxCellEditor(parent);
} else if (propertyType.isEnum()) {
final Object[] enumConstants = propertyType.getEnumConstants();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册