Search in sources :

Example 1 with INillableProperty

use of com.twinsoft.convertigo.beans.core.INillableProperty in project convertigo by convertigo.

the class DatabaseObjectTreeObject method setPropertyValue.

public void setPropertyValue(Object id, Object value) {
    MobileBuilder mb = null;
    IEditorPart editorPart = ConvertigoPlugin.getDefault().getApplicationComponentEditor();
    if (editorPart != null) {
        IEditorInput input = editorPart.getEditorInput();
        if (input instanceof com.twinsoft.convertigo.eclipse.editors.mobile.ApplicationComponentEditorInput) {
            com.twinsoft.convertigo.eclipse.editors.mobile.ApplicationComponentEditorInput editorInput = GenericUtils.cast(input);
            mb = editorInput.getApplication().getProject().getMobileBuilder();
        }
        if (input instanceof com.twinsoft.convertigo.eclipse.editors.ngx.ApplicationComponentEditorInput) {
            com.twinsoft.convertigo.eclipse.editors.ngx.ApplicationComponentEditorInput editorInput = GenericUtils.cast(input);
            mb = editorInput.getApplication().getProject().getMobileBuilder();
        }
    }
    DatabaseObject databaseObject = getObject();
    Object oldValue = getPropertyValue(id);
    String propertyName = (String) id;
    ComboBoxCellEditor editor = DynamicComboBoxPropertyDescriptor.getLast();
    if (editor != null && (!acceptSymbols() || !Integer.valueOf(editor.getItems().length - 1).equals(value))) {
        editor = null;
    }
    if (isValueInProcess || (oldValue != null && oldValue.equals(value) && editor == null)) {
        return;
    }
    try {
        isValueInProcess = true;
        java.beans.PropertyDescriptor databaseObjectPropertyDescriptor = getPropertyDescriptor(propertyName);
        TreeViewer viewer = (TreeViewer) getAdapter(TreeViewer.class);
        if (databaseObjectPropertyDescriptor == null)
            return;
        Class<?> propertyClass = databaseObjectPropertyDescriptor.getPropertyType();
        Class<?> pec = databaseObjectPropertyDescriptor.getPropertyEditorClass();
        if (editor != null) {
            Control control = editor.getControl();
            Display display = control.getDisplay();
            final Shell shell = new Shell(control.getShell(), SWT.ON_TOP | SWT.TOOL | SWT.NO_FOCUS | SWT.APPLICATION_MODAL);
            shell.setLocation(control.toDisplay(0, 0));
            shell.setSize(control.getSize());
            shell.setLayout(new FillLayout());
            final Text text = new Text(shell, SWT.NONE);
            final String[] newValue = new String[] { null };
            String[] items = editor.getItems();
            text.setText(items[items.length - 1]);
            text.addTraverseListener(new TraverseListener() {

                @Override
                public void keyTraversed(TraverseEvent e) {
                    if (e.detail == SWT.TRAVERSE_RETURN) {
                        newValue[0] = text.getText();
                        shell.close();
                    }
                }
            });
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch()) {
                    display.sleep();
                }
            }
            if (newValue[0] != null) {
                value = newValue[0];
            }
        }
        Object oriValue = value;
        boolean changed;
        do {
            changed = false;
            boolean wasSymbolError = databaseObject.isSymbolError();
            value = databaseObject.compileProperty(propertyClass, propertyName, oriValue);
            try {
                oldValue = Engine.theApp.databaseObjectsManager.getCompiledValue(oldValue);
            } catch (UndefinedSymbolsException e) {
                oldValue = e.incompletValue();
            }
            Set<String> symbolsErrors = databaseObject.getSymbolsErrors(propertyName);
            if (symbolsErrors != null) {
                boolean[] res = ConvertigoPlugin.warningGlobalSymbols(databaseObject.getProject().getName(), databaseObject.getName(), databaseObject.getDatabaseType(), propertyName, "" + databaseObject.getCompilablePropertySourceValue(propertyName), symbolsErrors, false);
                changed = res[0];
                if (changed) {
                    Engine.theApp.databaseObjectsManager.symbolsCreateUndefined(symbolsErrors);
                } else {
                    databaseObject.getProject().undefinedGlobalSymbols = true;
                    viewer.update(getProjectTreeObject(), null);
                }
            } else if (wasSymbolError) {
                Engine.theApp.databaseObjectsManager.symbolsProjectCheckUndefined(databaseObject.getProject().getName());
                viewer.update(getProjectTreeObject(), null);
            }
        } while (changed);
        if (editor != null && value instanceof String) {
            String[] items = editor.getItems();
            int len = items.length - 1;
            String strValue = (String) value;
            value = 0;
            for (int i = 0; i < len; i++) {
                if (items[i].equals(strValue)) {
                    value = i;
                    break;
                }
                ;
            }
        }
        if (pec != null && propertyClass != int.class && propertyClass != Integer.class && value instanceof Integer) {
            Object[] values = null;
            try {
                int index = (Integer) value;
                if (PropertyWithTagsEditorAdvance.class.isAssignableFrom(pec)) {
                    Method getTags = pec.getMethod("getTags", new Class[] { DatabaseObjectTreeObject.class, String.class });
                    values = (String[]) getTags.invoke(null, new Object[] { this, propertyName });
                    value = values[index];
                } else if (Enum.class.isAssignableFrom(pec)) {
                    values = (Enum[]) pec.getMethod("values").invoke(null);
                    value = index < values.length ? values[index] : values[0];
                    if (propertyClass == String.class) {
                        value = value.toString();
                    }
                }
            } catch (ArrayIndexOutOfBoundsException e) {
                value = values.length > 0 ? values[0] : "";
                String message = "Incorrect property \"" + propertyName + "\" value for the object \"" + databaseObject.getName() + "\".";
                ConvertigoPlugin.logWarning(message);
            }
        }
        if ((EmulatorTechnologyEditor.class.equals(pec))) {
            Method getEmulatorClassNames = pec.getDeclaredMethod("getEmulatorClassNames", new Class[] { DatabaseObjectTreeObject.class });
            String[] emulatorClassNames = (String[]) getEmulatorClassNames.invoke(null, new Object[] { this });
            value = emulatorClassNames[((Integer) value).intValue()];
        }
        // Must rename bean when normalizedScreenClassName changed
        if (databaseObject instanceof ScHandlerStatement) {
            ScHandlerStatement scHandlerStatement = (ScHandlerStatement) databaseObject;
            if (propertyName.equals("normalizedScreenClassName")) {
                if (!this.rename("on" + (String) value + scHandlerStatement.getHandlerType(), Boolean.FALSE))
                    return;
            }
        } else // Must rename bean when handlerType changed
        if ((databaseObject instanceof HandlerStatement) && !(databaseObject instanceof ScDefaultHandlerStatement)) {
            // HandlerStatement handlerStatement = (HandlerStatement)databaseObject;
            if (propertyName.equals("handlerType")) {
                if (!this.rename("on" + (String) value, Boolean.FALSE))
                    return;
            }
        }
        // Set property's nillable value
        if (Boolean.TRUE.equals(databaseObjectPropertyDescriptor.getValue("nillable"))) {
            try {
                PropertyDescriptor pd = findPropertyDescriptor(propertyName);
                if ((pd != null) && (pd instanceof DataOrNullPropertyDescriptor)) {
                    Boolean isNull = ((DataOrNullPropertyDescriptor) pd).isNullProperty();
                    ((INillableProperty) databaseObject).setNullProperty(propertyName, isNull);
                    if (isNull) {
                        // Overrides fake editor value to real bean's one
                        if (value instanceof String)
                            value = "";
                        if (value instanceof XMLVector)
                            value = new XMLVector<Object>();
                    }
                }
            } catch (Exception e) {
                String message = "Error while trying to set 'isNull' attribute of property \"" + propertyName + "\" for the object \"" + databaseObject.getName() + "\".";
                ConvertigoPlugin.logException(e, message);
            }
        }
        // Check XML name property value if needed
        if (Boolean.TRUE.equals(databaseObjectPropertyDescriptor.getValue(DatabaseObject.PROPERTY_XMLNAME))) {
            if (value instanceof String) {
                String sValue = value.toString();
                if (!XMLUtils.checkName(sValue)) {
                    String message = "The property \"" + propertyName + "\" value for the object \"" + databaseObject.getName() + "\" is not a valid XML name: " + sValue;
                    ConvertigoPlugin.logWarning(message);
                    return;
                }
            }
        }
        Method setter = databaseObjectPropertyDescriptor.getWriteMethod();
        Object[] args = { value };
        setter.invoke(databaseObject, args);
        hasBeenModified(true);
        // Set treeObject isEnabled attribute value (Fix #1129)
        if (propertyName.equals("isEnabled") || propertyName.equals("isEnable")) {
            setEnabled(value.equals(true));
        }
        viewer.update(this, null);
        // update property view and display the new value for zone editor
        if (pec != null) {
            PropertySheet propertySheet = ConvertigoPlugin.getDefault().getPropertiesView();
            if (propertySheet != null && pec.getName().contains("ZoneEditor")) {
                Tree tree = (Tree) propertySheet.getCurrentPage().getControl();
                TreeItem[] treeItems = tree.getSelection();
                for (int i = 0; i < treeItems.length; i++) {
                    TreeItem treeItem = treeItems[i];
                    if (treeItem.getText().equals(databaseObjectPropertyDescriptor.getDisplayName())) {
                        PropertySheetEntry propEntry = (PropertySheetEntry) treeItem.getData();
                        propEntry.getEditor(tree).setValue(value);
                        propEntry.setValues(args);
                    }
                }
                tree.update();
            }
        }
        Engine.logStudio.info("---------------------- SetPropertyValue started: " + propertyName + "----------------------");
        if (mb != null) {
            mb.prepareBatchBuild();
        }
        BatchOperationHelper.start();
        TreeObjectEvent treeObjectEvent = new TreeObjectEvent(this, propertyName, oldValue, value);
        ConvertigoPlugin.projectManager.getProjectExplorerView().fireTreeObjectPropertyChanged(treeObjectEvent);
        BatchOperationHelper.stop();
    } catch (Exception e) {
        String message = "Error while trying to set property \"" + propertyName + "\" value for the object \"" + databaseObject.getName() + "\".";
        ConvertigoPlugin.logException(e, message);
    } finally {
        BatchOperationHelper.cancel();
        Engine.logStudio.info("---------------------- SetPropertyValue ended:   " + propertyName + "----------------------");
        isValueInProcess = false;
    }
}
Also used : TraverseEvent(org.eclipse.swt.events.TraverseEvent) XMLVector(com.twinsoft.convertigo.beans.common.XMLVector) TreeItem(org.eclipse.swt.widgets.TreeItem) TreeViewer(org.eclipse.jface.viewers.TreeViewer) INillableProperty(com.twinsoft.convertigo.beans.core.INillableProperty) PropertySheetEntry(org.eclipse.ui.views.properties.PropertySheetEntry) DatabaseObject(com.twinsoft.convertigo.beans.core.DatabaseObject) Tree(org.eclipse.swt.widgets.Tree) TreeObjectEvent(com.twinsoft.convertigo.eclipse.views.projectexplorer.TreeObjectEvent) ScDefaultHandlerStatement(com.twinsoft.convertigo.beans.statements.ScDefaultHandlerStatement) UndefinedSymbolsException(com.twinsoft.convertigo.engine.UndefinedSymbolsException) ComboBoxCellEditor(org.eclipse.jface.viewers.ComboBoxCellEditor) FillLayout(org.eclipse.swt.layout.FillLayout) Method(java.lang.reflect.Method) MobileBuilder(com.twinsoft.convertigo.engine.mobile.MobileBuilder) DatabaseObject(com.twinsoft.convertigo.beans.core.DatabaseObject) DataOrNullPropertyDescriptor(com.twinsoft.convertigo.eclipse.property_editors.DataOrNullPropertyDescriptor) PropertySheet(org.eclipse.ui.views.properties.PropertySheet) ScDefaultHandlerStatement(com.twinsoft.convertigo.beans.statements.ScDefaultHandlerStatement) ScHandlerStatement(com.twinsoft.convertigo.beans.statements.ScHandlerStatement) HandlerStatement(com.twinsoft.convertigo.beans.statements.HandlerStatement) Control(org.eclipse.swt.widgets.Control) Shell(org.eclipse.swt.widgets.Shell) 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) TraverseListener(org.eclipse.swt.events.TraverseListener) EmulatorTechnologyEditor(com.twinsoft.convertigo.eclipse.property_editors.EmulatorTechnologyEditor) Text(org.eclipse.swt.widgets.Text) IEditorPart(org.eclipse.ui.IEditorPart) CoreException(org.eclipse.core.runtime.CoreException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ConvertigoException(com.twinsoft.convertigo.engine.ConvertigoException) UndefinedSymbolsException(com.twinsoft.convertigo.engine.UndefinedSymbolsException) IEditorInput(org.eclipse.ui.IEditorInput) ScHandlerStatement(com.twinsoft.convertigo.beans.statements.ScHandlerStatement) Display(org.eclipse.swt.widgets.Display)

Aggregations

XMLVector (com.twinsoft.convertigo.beans.common.XMLVector)1 DatabaseObject (com.twinsoft.convertigo.beans.core.DatabaseObject)1 INillableProperty (com.twinsoft.convertigo.beans.core.INillableProperty)1 HandlerStatement (com.twinsoft.convertigo.beans.statements.HandlerStatement)1 ScDefaultHandlerStatement (com.twinsoft.convertigo.beans.statements.ScDefaultHandlerStatement)1 ScHandlerStatement (com.twinsoft.convertigo.beans.statements.ScHandlerStatement)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 EmulatorTechnologyEditor (com.twinsoft.convertigo.eclipse.property_editors.EmulatorTechnologyEditor)1 StringComboBoxPropertyDescriptor (com.twinsoft.convertigo.eclipse.property_editors.StringComboBoxPropertyDescriptor)1 InfoPropertyDescriptor (com.twinsoft.convertigo.eclipse.views.projectexplorer.InfoPropertyDescriptor)1 ScriptablePropertyDescriptor (com.twinsoft.convertigo.eclipse.views.projectexplorer.ScriptablePropertyDescriptor)1 TreeObjectEvent (com.twinsoft.convertigo.eclipse.views.projectexplorer.TreeObjectEvent)1 ConvertigoException (com.twinsoft.convertigo.engine.ConvertigoException)1 UndefinedSymbolsException (com.twinsoft.convertigo.engine.UndefinedSymbolsException)1 MobileBuilder (com.twinsoft.convertigo.engine.mobile.MobileBuilder)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Method (java.lang.reflect.Method)1 CoreException (org.eclipse.core.runtime.CoreException)1