Search in sources :

Example 1 with ScriptablePropertyDescriptor

use of com.twinsoft.convertigo.eclipse.views.projectexplorer.ScriptablePropertyDescriptor in project convertigo by convertigo.

the class DatabaseObjectTreeObject method findPropertyDescriptor.

private PropertyDescriptor findPropertyDescriptor(final String name, String displayName, java.beans.PropertyDescriptor databaseObjectPropertyDescriptor, Object value, final Class<?> pec, boolean isExtractionRule, boolean isMasked) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    PropertyDescriptor propertyDescriptor = null;
    // Primitive types
    if (pec == null) {
        if (value instanceof Boolean) {
            String[] values = new String[] { "true", "false" };
            propertyDescriptor = new DynamicComboBoxPropertyDescriptor(name, displayName, values, this, name);
        } else if (value instanceof Number) {
            propertyDescriptor = new TextPropertyDescriptor(name, displayName);
        // propertyDescriptor.setValidator(new CompilableValueValidator(new NumberValidator(value.getClass())));
        }
    } else // Complex types
    {
        if (PropertyWithValidatorEditor.class.isAssignableFrom(pec)) {
            propertyDescriptor = new TextPropertyDescriptor(name, displayName);
            propertyDescriptor.setValidator(getValidator(name));
        } else if (PropertyWithTagsEditor.class.isAssignableFrom(pec)) {
            String[] tags;
            if (PropertyWithDynamicTagsEditor.class.isAssignableFrom(pec)) {
                Method getTags = pec.getMethod("getTags", new Class[] { DatabaseObjectTreeObject.class, String.class });
                tags = (String[]) getTags.invoke(null, new Object[] { this, name });
                propertyDescriptor = new DynamicComboBoxPropertyDescriptor(name, displayName, getTags, this, name);
            } else if (PropertyWithTagsEditorAdvance.class.isAssignableFrom(pec)) {
                Method getTags = pec.getDeclaredMethod("getTags", new Class[] { DatabaseObjectTreeObject.class, String.class });
                tags = (String[]) getTags.invoke(null, new Object[] { this, name });
                propertyDescriptor = new DynamicComboBoxPropertyDescriptor(name, displayName, tags, this, name);
            } else {
                Method getTags = pec.getDeclaredMethod("getTags", new Class[] { DatabaseObjectTreeObject.class });
                tags = (String[]) getTags.invoke(null, new Object[] { this });
                propertyDescriptor = new DynamicComboBoxPropertyDescriptor(name, displayName, tags, this, name);
            }
        } else if (StringComboBoxPropertyDescriptor.class.isAssignableFrom(pec)) {
            Method getTags = pec.getDeclaredMethod("getTags", new Class[] { DatabaseObjectTreeObject.class, String.class });
            String[] tags = (String[]) getTags.invoke(null, new Object[] { this, name });
            propertyDescriptor = new StringComboBoxPropertyDescriptor(name, displayName, tags, false);
        } else if (com.twinsoft.convertigo.eclipse.property_editors.MobileSmartSourcePropertyDescriptor.class.isAssignableFrom(pec)) {
            Method getTags = pec.getDeclaredMethod("getTags", new Class[] { DatabaseObjectTreeObject.class, String.class });
            String[] tags = (String[]) getTags.invoke(null, new Object[] { this, name });
            propertyDescriptor = new com.twinsoft.convertigo.eclipse.property_editors.MobileSmartSourcePropertyDescriptor(name, displayName, tags, false);
            ((com.twinsoft.convertigo.eclipse.property_editors.MobileSmartSourcePropertyDescriptor) propertyDescriptor).databaseObjectTreeObject = this;
        } else if (com.twinsoft.convertigo.eclipse.property_editors.NgxSmartSourcePropertyDescriptor.class.isAssignableFrom(pec)) {
            Method getTags = pec.getDeclaredMethod("getTags", new Class[] { DatabaseObjectTreeObject.class, String.class });
            String[] tags = (String[]) getTags.invoke(null, new Object[] { this, name });
            propertyDescriptor = new com.twinsoft.convertigo.eclipse.property_editors.NgxSmartSourcePropertyDescriptor(name, displayName, tags, false);
            ((com.twinsoft.convertigo.eclipse.property_editors.NgxSmartSourcePropertyDescriptor) propertyDescriptor).databaseObjectTreeObject = this;
        } else if (PropertyWithDynamicInfoEditor.class.isAssignableFrom(pec)) {
            Method getInfo = pec.getMethod("getInfo", new Class[] { DatabaseObjectTreeObject.class, String.class });
            propertyDescriptor = new DynamicInfoPropertyDescriptor(name, displayName, getInfo, this, name);
        } else if (AbstractDialogCellEditor.class.isAssignableFrom(pec)) {
            propertyDescriptor = new PropertyDescriptor(name, displayName) {

                @Override
                public CellEditor createPropertyEditor(Composite parent) {
                    try {
                        Constructor<?> constructor = pec.getConstructor(new Class[] { Composite.class });
                        AbstractDialogCellEditor editor = (AbstractDialogCellEditor) constructor.newInstance(new Object[] { parent });
                        editor.propertyDescriptor = this;
                        editor.databaseObjectTreeObject = DatabaseObjectTreeObject.this;
                        if (getValidator() != null) {
                            editor.setValidator(getValidator());
                        }
                        return editor;
                    } catch (Exception e) {
                        ConvertigoPlugin.logException(e, "Unexpected exception");
                        return null;
                    }
                }
            };
        } else if (Enum.class.isAssignableFrom(pec)) {
            String[] tags = EnumUtils.toStrings(pec);
            propertyDescriptor = new DynamicComboBoxPropertyDescriptor(name, displayName, tags, this, name);
        }
    }
    // Special cases
    if (propertyDescriptor == null) {
        // editor for scriptable properties
        Object scriptable = databaseObjectPropertyDescriptor.getValue("scriptable");
        if ((scriptable != null) && (scriptable.equals(Boolean.TRUE)))
            propertyDescriptor = new ScriptablePropertyDescriptor(name, displayName);
        // editor for nillable properties
        if (propertyDescriptor == null) {
            Object nillable = databaseObjectPropertyDescriptor.getValue("nillable");
            if ((nillable != null) && (nillable.equals(Boolean.TRUE))) {
                int style = isMasked ? SWT.PASSWORD : SWT.NONE;
                if (value instanceof String) {
                    propertyDescriptor = new DataOrNullPropertyDescriptor(name, displayName, StringOrNullEditor.class, style);
                } else if (value instanceof XMLVector) {
                    propertyDescriptor = new DataOrNullPropertyDescriptor(name, displayName, ArrayOrNullEditor.class, style);
                }
            }
        }
        // editor for disabled properties
        Object disable = databaseObjectPropertyDescriptor.getValue("disable");
        if ((disable != null) && (disable.equals(Boolean.TRUE)))
            propertyDescriptor = new InfoPropertyDescriptor(name, displayName);
    }
    // Default case
    if (propertyDescriptor == null) {
        propertyDescriptor = new TextPropertyDescriptor(name, displayName);
    // propertyDescriptor.setValidator(new CompilableValueValidator(getValidator(name)));
    }
    if (propertyDescriptor != null) {
        ICellEditorValidator validator = getValidator(name);
        if (validator != null) {
            propertyDescriptor.setValidator(validator);
        }
        final ILabelProvider labelProvider = propertyDescriptor.getLabelProvider();
        propertyDescriptor.setLabelProvider(new ILabelProvider() {

            @Override
            public void removeListener(ILabelProviderListener listener) {
                labelProvider.removeListener(listener);
            }

            @Override
            public boolean isLabelProperty(Object element, String property) {
                return labelProvider.isLabelProperty(element, property);
            }

            @Override
            public void dispose() {
                labelProvider.dispose();
            }

            @Override
            public void addListener(ILabelProviderListener listener) {
                labelProvider.addListener(listener);
            }

            @Override
            public String getText(Object element) {
                String text = labelProvider.getText(element);
                try {
                    String compiled = Engine.theApp.databaseObjectsManager.getCompiledValue(text);
                    if (!text.equals(compiled)) {
                        text += "  => " + compiled;
                    }
                } catch (UndefinedSymbolsException e) {
                    text += "  /!\\ undefined symbol /!\\";
                }
                return text;
            }

            @Override
            public Image getImage(Object element) {
                return labelProvider.getImage(element);
            }
        });
        String beanDescription = databaseObjectPropertyDescriptor.getShortDescription();
        int id = beanDescription.indexOf("|");
        if (id != -1) {
            beanDescription = beanDescription.substring(0, id);
        }
        if (isExtractionRule) {
            propertyDescriptor.setCategory(databaseObjectPropertyDescriptor.isExpert() ? "Selection" : "Configuration");
        } else {
            Object categoryValue = databaseObjectPropertyDescriptor.getValue("category");
            String category = categoryValue == null ? "Base properties" : String.valueOf(categoryValue);
            propertyDescriptor.setCategory(databaseObjectPropertyDescriptor.isExpert() ? "Expert" : category);
        }
        beanDescription = cleanDescription(beanDescription);
        propertyDescriptor.setDescription(beanDescription);
    }
    return propertyDescriptor;
}
Also used : PropertyWithTagsEditor(com.twinsoft.convertigo.eclipse.property_editors.PropertyWithTagsEditor) XMLVector(com.twinsoft.convertigo.beans.common.XMLVector) CellEditor(org.eclipse.jface.viewers.CellEditor) AbstractDialogCellEditor(com.twinsoft.convertigo.eclipse.property_editors.AbstractDialogCellEditor) ComboBoxCellEditor(org.eclipse.jface.viewers.ComboBoxCellEditor) InfoPropertyDescriptor(com.twinsoft.convertigo.eclipse.views.projectexplorer.InfoPropertyDescriptor) DynamicInfoPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.DynamicInfoPropertyDescriptor) Image(org.eclipse.swt.graphics.Image) AbstractDialogCellEditor(com.twinsoft.convertigo.eclipse.property_editors.AbstractDialogCellEditor) DynamicComboBoxPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.DynamicComboBoxPropertyDescriptor) DynamicInfoPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.DynamicInfoPropertyDescriptor) InfoPropertyDescriptor(com.twinsoft.convertigo.eclipse.views.projectexplorer.InfoPropertyDescriptor) DynamicComboBoxPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.DynamicComboBoxPropertyDescriptor) PropertyDescriptor(org.eclipse.ui.views.properties.PropertyDescriptor) StringComboBoxPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.StringComboBoxPropertyDescriptor) TextPropertyDescriptor(org.eclipse.ui.views.properties.TextPropertyDescriptor) ScriptablePropertyDescriptor(com.twinsoft.convertigo.eclipse.views.projectexplorer.ScriptablePropertyDescriptor) IPropertyDescriptor(org.eclipse.ui.views.properties.IPropertyDescriptor) DynamicInfoPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.DynamicInfoPropertyDescriptor) DataOrNullPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.DataOrNullPropertyDescriptor) Composite(org.eclipse.swt.widgets.Composite) PropertyWithDynamicInfoEditor(com.twinsoft.convertigo.eclipse.property_editors.PropertyWithDynamicInfoEditor) Constructor(java.lang.reflect.Constructor) UndefinedSymbolsException(com.twinsoft.convertigo.engine.UndefinedSymbolsException) PropertyWithDynamicTagsEditor(com.twinsoft.convertigo.eclipse.property_editors.PropertyWithDynamicTagsEditor) Method(java.lang.reflect.Method) ILabelProvider(org.eclipse.jface.viewers.ILabelProvider) CoreException(org.eclipse.core.runtime.CoreException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ConvertigoException(com.twinsoft.convertigo.engine.ConvertigoException) UndefinedSymbolsException(com.twinsoft.convertigo.engine.UndefinedSymbolsException) ILabelProviderListener(org.eclipse.jface.viewers.ILabelProviderListener) StringOrNullEditor(com.twinsoft.convertigo.eclipse.property_editors.StringOrNullEditor) ICellEditorValidator(org.eclipse.jface.viewers.ICellEditorValidator) StringComboBoxPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.StringComboBoxPropertyDescriptor) TextPropertyDescriptor(org.eclipse.ui.views.properties.TextPropertyDescriptor) ScreenClass(com.twinsoft.convertigo.beans.core.ScreenClass) DatabaseObject(com.twinsoft.convertigo.beans.core.DatabaseObject) DataOrNullPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.DataOrNullPropertyDescriptor) ScriptablePropertyDescriptor(com.twinsoft.convertigo.eclipse.views.projectexplorer.ScriptablePropertyDescriptor)

Aggregations

XMLVector (com.twinsoft.convertigo.beans.common.XMLVector)1 DatabaseObject (com.twinsoft.convertigo.beans.core.DatabaseObject)1 ScreenClass (com.twinsoft.convertigo.beans.core.ScreenClass)1 AbstractDialogCellEditor (com.twinsoft.convertigo.eclipse.property_editors.AbstractDialogCellEditor)1 DataOrNullPropertyDescriptor (com.twinsoft.convertigo.eclipse.property_editors.DataOrNullPropertyDescriptor)1 DynamicComboBoxPropertyDescriptor (com.twinsoft.convertigo.eclipse.property_editors.DynamicComboBoxPropertyDescriptor)1 DynamicInfoPropertyDescriptor (com.twinsoft.convertigo.eclipse.property_editors.DynamicInfoPropertyDescriptor)1 PropertyWithDynamicInfoEditor (com.twinsoft.convertigo.eclipse.property_editors.PropertyWithDynamicInfoEditor)1 PropertyWithDynamicTagsEditor (com.twinsoft.convertigo.eclipse.property_editors.PropertyWithDynamicTagsEditor)1 PropertyWithTagsEditor (com.twinsoft.convertigo.eclipse.property_editors.PropertyWithTagsEditor)1 StringComboBoxPropertyDescriptor (com.twinsoft.convertigo.eclipse.property_editors.StringComboBoxPropertyDescriptor)1 StringOrNullEditor (com.twinsoft.convertigo.eclipse.property_editors.StringOrNullEditor)1 InfoPropertyDescriptor (com.twinsoft.convertigo.eclipse.views.projectexplorer.InfoPropertyDescriptor)1 ScriptablePropertyDescriptor (com.twinsoft.convertigo.eclipse.views.projectexplorer.ScriptablePropertyDescriptor)1 ConvertigoException (com.twinsoft.convertigo.engine.ConvertigoException)1 UndefinedSymbolsException (com.twinsoft.convertigo.engine.UndefinedSymbolsException)1 Constructor (java.lang.reflect.Constructor)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Method (java.lang.reflect.Method)1 CoreException (org.eclipse.core.runtime.CoreException)1