public static IValueEditor openContentEditor(@NotNull IValueController controller) { Object value = controller.getValue(); IValueController.EditType binaryEditType = IValueController.EditType.valueOf( controller .getExecutionContext() .getDataSource() .getContainer() .getPreferenceStore() .getString(DBeaverPreferences.RESULT_SET_BINARY_EDITOR_TYPE)); if (binaryEditType != IValueController.EditType.EDITOR && value instanceof DBDContentCached) { // Use string editor for cached content return new TextViewDialog(controller); } else if (value instanceof DBDContent) { DBDContent content = (DBDContent) value; boolean isText = ContentUtils.isTextContent(content); List<ContentEditorPart> parts = new ArrayList<>(); if (isText) { parts.add(new ContentTextEditorPart()); if (ContentUtils.isXML(content)) { parts.add(new ContentXMLEditorPart()); } } else { parts.add(new ContentBinaryEditorPart()); parts.add(new ContentTextEditorPart()); parts.add(new ContentImageEditorPart()); } return ContentEditor.openEditor( controller, parts.toArray(new ContentEditorPart[parts.size()])); } else { controller.showMessage(CoreMessages.model_jdbc_unsupported_content_value_type_, true); return null; } }
@Override public void contributeProperties( @NotNull DBPPropertyManager propertySource, @NotNull IValueController controller) { super.contributeProperties(propertySource, controller); try { Object value = controller.getValue(); if (value instanceof DBDContent) { propertySource.addProperty( PROP_CATEGORY_CONTENT, "content_type", //$NON-NLS-1$ CoreMessages.model_jdbc_content_type, ((DBDContent) value).getContentType()); final long contentLength = ((DBDContent) value).getContentLength(); if (contentLength >= 0) { propertySource.addProperty( PROP_CATEGORY_CONTENT, "content_length", //$NON-NLS-1$ CoreMessages.model_jdbc_content_length, contentLength); } } } catch (Exception e) { log.warn("Can't extract CONTENT value information", e); // $NON-NLS-1$ } }
@Override public IValueEditor createEditor(@NotNull final IValueController controller) throws DBException { switch (controller.getEditType()) { case INLINE: // Open inline/panel editor if (controller.getValue() instanceof DBDContentCached) { return new ContentInlineEditor(controller); } else { return null; } case EDITOR: return openContentEditor(controller); case PANEL: Object value = controller.getValue(); if (value instanceof DBDContent && ContentUtils.isXML((DBDContent) value)) { return new XMLPanelEditor(controller); } else { return new ContentPanelEditor(controller); } default: return null; } }
public static void contributeContentActions( @NotNull IContributionManager manager, @NotNull final IValueController controller) throws DBCException { if (controller.getValue() instanceof DBDContent && !((DBDContent) controller.getValue()).isNull()) { manager.add( new Action( CoreMessages.model_jdbc_save_to_file_, DBeaverIcons.getImageDescriptor(UIIcon.SAVE_AS)) { @Override public void run() { DialogUtils.saveToFile(controller); } }); } manager.add( new Action( CoreMessages.model_jdbc_load_from_file_, DBeaverIcons.getImageDescriptor(UIIcon.LOAD)) { @Override public void run() { DialogUtils.loadFromFile(controller); } }); }
@Override protected Control createDialogArea(Composite parent) { IValueController valueController = getValueController(); Object value = valueController.getValue(); Composite dialogGroup = (Composite) super.createDialogArea(parent); Composite panel = UIUtils.createPlaceholder(dialogGroup, 3); panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); int style = SWT.BORDER; if (valueController.isReadOnly()) { style |= SWT.READ_ONLY; } UIUtils.createControlLabel(panel, "Time") .setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); DBDDataFormatter formatter = helper.getFormatter(valueController, valueController.getValueType()); timeEditor = new CustomTimeEditor(panel, style, formatter); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalAlignment = GridData.CENTER; timeEditor.getControl().setLayoutData(gd); primeEditorValue(value); Button button = UIUtils.createPushButton(panel, "Set Current", null); button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); button.setEnabled(!valueController.isReadOnly()); button.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { primeEditorValue(new Date()); } }); return dialogGroup; }