Search in sources :

Example 1 with XSDRedefine

use of org.eclipse.xsd.XSDRedefine in project webtools.sourceediting by eclipse.

the class AddXSDRedefinableContentAction method run.

public void run() {
    Object selection = ((IStructuredSelection) getSelection()).getFirstElement();
    if (selection instanceof XSDBaseAdapter) {
        selection = ((XSDBaseAdapter) selection).getTarget();
    }
    if (selection instanceof XSDRedefine) {
        ComponentSearchListDialogConfiguration configuration = new ComponentSearchListDialogConfiguration();
        configuration.setDescriptionProvider(new RedefineDescriptor());
        configuration.setSearchListProvider(new RedefineSearchListProvider((XSDRedefine) selection, this));
        ComponentSearchListDialog dialog = new ComponentSearchListDialog(Display.getDefault().getActiveShell(), Messages._UI_LABEL_REDEFINE_COMPONENT, configuration) {

            protected Control createDialogArea(Composite parent) {
                // Adjust the dialog's initial size.
                Composite mainComposite = (Composite) super.createDialogArea(parent);
                GridData gridData = (GridData) mainComposite.getLayoutData();
                gridData.heightHint = 500;
                gridData.widthHint = 350;
                return mainComposite;
            }
        };
        dialog.create();
        dialog.setBlockOnOpen(true);
        int result = dialog.open();
        if (result == Window.OK) {
            ComponentSpecification selectedComponent = dialog.getSelectedComponent();
            buildRedefine((XSDRedefine) selection, selectedComponent);
        }
    }
}
Also used : XSDRedefine(org.eclipse.xsd.XSDRedefine) ComponentSearchListDialog(org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSearchListDialog) Composite(org.eclipse.swt.widgets.Composite) ComponentSpecification(org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification) GridData(org.eclipse.swt.layout.GridData) XSDBaseAdapter(org.eclipse.wst.xsd.ui.internal.adapters.XSDBaseAdapter) IStructuredSelection(org.eclipse.jface.viewers.IStructuredSelection) ComponentSearchListDialogConfiguration(org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSearchListDialogConfiguration)

Example 2 with XSDRedefine

use of org.eclipse.xsd.XSDRedefine in project webtools.sourceediting by eclipse.

the class CommonDirectivesSection method doHandleEvent.

// TODO: common up code with XSDSelectIncludeFileWizard
public void doHandleEvent(Event event) {
    // $NON-NLS-1$
    errorText.setText("");
    if (event.widget == schemaLocationText) {
        // $NON-NLS-1$
        String errorMessage = "";
        isValidSchemaLocation = true;
        String xsdModelFile = schemaLocationText.getText();
        // $NON-NLS-1$
        String namespace = "";
        XSDSchema externalSchema = null;
        if (xsdModelFile.length() == 0) {
            // $NON-NLS-1$
            handleSchemaLocationChange(xsdModelFile, "", null);
            return;
        }
        try {
            IFile currentIFile = null;
            IEditorInput editorInput = getActiveEditor().getEditorInput();
            if (editorInput instanceof IFileEditorInput) {
                currentIFile = ((IFileEditorInput) editorInput).getFile();
            }
            URI newURI = URI.createURI(xsdModelFile);
            String xsdFile = URIHelper.getRelativeURI(newURI.toString(), currentIFile.getFullPath().toString());
            // $NON-NLS-1$
            final String normalizedXSDFile = URIHelper.normalize(xsdFile, currentIFile.getLocation().toString(), "");
            final String normalizedURI = URI.encodeFragment(URIHelper.addImpliedFileProtocol(normalizedXSDFile), true).toString();
            XSDParser parser = new XSDParser(new HashMap());
            parser.parse(normalizedURI);
            externalSchema = parser.getSchema();
            if (externalSchema != null) {
                String extNamespace = externalSchema.getTargetNamespace();
                // $NON-NLS-1$
                if (extNamespace == null)
                    extNamespace = "";
                namespace = extNamespace;
                if (externalSchema.getDiagnostics() != null && externalSchema.getDiagnostics().size() > 0) {
                    isValidSchemaLocation = false;
                    // $NON-NLS-1$
                    errorMessage = XSDEditorPlugin.getResourceString("_UI_INCORRECT_XML_SCHEMA", xsdModelFile);
                } else {
                    String currentNameSpace = xsdSchema.getTargetNamespace();
                    if (input instanceof XSDInclude || input instanceof XSDRedefine) {
                        // Check the namespace to make sure they are the same as current file
                        if (extNamespace != null) {
                            if (currentNameSpace != null && !extNamespace.equals(currentNameSpace)) {
                                // $NON-NLS-1$
                                errorMessage = XSDEditorPlugin.getResourceString("_UI_DIFFERENT_NAME_SPACE", xsdModelFile);
                                isValidSchemaLocation = false;
                            }
                        }
                    } else {
                        // Check the namespace to make sure they are different from the current file
                        if (extNamespace != null) {
                            if (currentNameSpace != null && extNamespace.equals(currentNameSpace)) {
                                // $NON-NLS-1$
                                errorMessage = XSDEditorPlugin.getResourceString("_UI_SAME_NAME_SPACE", xsdModelFile);
                                isValidSchemaLocation = false;
                            }
                        }
                    }
                }
            } else {
                errorMessage = Messages._UI_ERROR_INVALID_FILE;
                isValidSchemaLocation = false;
            }
        } catch (Exception e) {
            errorMessage = Messages._UI_ERROR_INVALID_FILE;
            isValidSchemaLocation = false;
        } finally {
            if (!isValidSchemaLocation) {
                errorText.setText(errorMessage);
                int length = errorText.getText().length();
                red = new Color(null, 255, 0, 0);
                StyleRange style = new StyleRange(0, length, red, schemaLocationText.getBackground());
                errorText.setStyleRange(style);
            } else {
                handleSchemaLocationChange(xsdModelFile, namespace, externalSchema);
            }
        }
    }
}
Also used : IFile(org.eclipse.core.resources.IFile) XSDRedefine(org.eclipse.xsd.XSDRedefine) HashMap(java.util.HashMap) Color(org.eclipse.swt.graphics.Color) StyleRange(org.eclipse.swt.custom.StyleRange) URI(org.eclipse.emf.common.util.URI) IFileEditorInput(org.eclipse.ui.IFileEditorInput) XSDParser(org.eclipse.xsd.util.XSDParser) IEditorInput(org.eclipse.ui.IEditorInput) XSDSchema(org.eclipse.xsd.XSDSchema) XSDInclude(org.eclipse.xsd.XSDInclude)

Example 3 with XSDRedefine

use of org.eclipse.xsd.XSDRedefine in project webtools.sourceediting by eclipse.

the class XSDCommonUIUtils method getInputXSDAnnotation.

public static XSDAnnotation getInputXSDAnnotation(XSDConcreteComponent input, boolean createIfNotExist) {
    XSDAnnotation xsdAnnotation = null;
    XSDFactory factory = XSDFactory.eINSTANCE;
    if (input instanceof XSDAttributeDeclaration) {
        XSDAttributeDeclaration xsdComp = (XSDAttributeDeclaration) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDAttributeGroupDefinition) {
        XSDAttributeGroupDefinition xsdComp = (XSDAttributeGroupDefinition) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDElementDeclaration) {
        XSDElementDeclaration xsdComp = (XSDElementDeclaration) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDNotationDeclaration) {
        XSDNotationDeclaration xsdComp = (XSDNotationDeclaration) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDXPathDefinition) {
        XSDXPathDefinition xsdComp = (XSDXPathDefinition) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDModelGroup) {
        XSDModelGroup xsdComp = (XSDModelGroup) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDModelGroupDefinition) {
        XSDModelGroupDefinition xsdComp = (XSDModelGroupDefinition) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDIdentityConstraintDefinition) {
        XSDIdentityConstraintDefinition xsdComp = (XSDIdentityConstraintDefinition) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDWildcard) {
        XSDWildcard xsdComp = (XSDWildcard) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDSchema) {
        XSDSchema xsdComp = (XSDSchema) input;
        List list = xsdComp.getAnnotations();
        if (list.size() > 0) {
            xsdAnnotation = (XSDAnnotation) list.get(0);
        } else {
            if (createIfNotExist && xsdAnnotation == null) {
                xsdAnnotation = factory.createXSDAnnotation();
                if (xsdComp.getContents() != null) {
                    xsdComp.getContents().add(0, xsdAnnotation);
                }
            }
        }
        return xsdAnnotation;
    } else if (input instanceof XSDFacet) {
        XSDFacet xsdComp = (XSDFacet) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDTypeDefinition) {
        XSDTypeDefinition xsdComp = (XSDTypeDefinition) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDInclude) {
        XSDInclude xsdComp = (XSDInclude) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDImport) {
        XSDImport xsdComp = (XSDImport) input;
        xsdAnnotation = xsdComp.getAnnotation();
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            xsdComp.setAnnotation(xsdAnnotation);
        }
    } else if (input instanceof XSDRedefine) {
        XSDRedefine xsdComp = (XSDRedefine) input;
        List contents = xsdComp.getContents();
        for (int i = 0; i < contents.size(); i++) {
            Object content = contents.get(i);
            if (content instanceof XSDAnnotation) {
                xsdAnnotation = (XSDAnnotation) content;
                break;
            }
        }
        if (createIfNotExist && xsdAnnotation == null) {
            xsdAnnotation = factory.createXSDAnnotation();
            contents.add(0, xsdAnnotation);
        }
        return xsdAnnotation;
    } else if (input instanceof XSDAnnotation) {
        xsdAnnotation = (XSDAnnotation) input;
    }
    if (createIfNotExist) {
        formatAnnotation(xsdAnnotation);
    }
    return xsdAnnotation;
}
Also used : XSDFactory(org.eclipse.xsd.XSDFactory) XSDRedefine(org.eclipse.xsd.XSDRedefine) XSDModelGroup(org.eclipse.xsd.XSDModelGroup) XSDWildcard(org.eclipse.xsd.XSDWildcard) XSDAttributeGroupDefinition(org.eclipse.xsd.XSDAttributeGroupDefinition) XSDTypeDefinition(org.eclipse.xsd.XSDTypeDefinition) XSDNotationDeclaration(org.eclipse.xsd.XSDNotationDeclaration) XSDFacet(org.eclipse.xsd.XSDFacet) XSDElementDeclaration(org.eclipse.xsd.XSDElementDeclaration) XSDIdentityConstraintDefinition(org.eclipse.xsd.XSDIdentityConstraintDefinition) List(java.util.List) ArrayList(java.util.ArrayList) EList(org.eclipse.emf.common.util.EList) EObject(org.eclipse.emf.ecore.EObject) XSDModelGroupDefinition(org.eclipse.xsd.XSDModelGroupDefinition) XSDImport(org.eclipse.xsd.XSDImport) XSDAnnotation(org.eclipse.xsd.XSDAnnotation) XSDXPathDefinition(org.eclipse.xsd.XSDXPathDefinition) XSDAttributeDeclaration(org.eclipse.xsd.XSDAttributeDeclaration) XSDSchema(org.eclipse.xsd.XSDSchema) XSDInclude(org.eclipse.xsd.XSDInclude)

Example 4 with XSDRedefine

use of org.eclipse.xsd.XSDRedefine in project webtools.sourceediting by eclipse.

the class XSDDirectivesSchemaLocationUpdater method updateSchemaLocation.

/**
 * Modifies the schema location by opening the schema location dialog and
 * processing the results. This method refactors the code in
 * XSDImportSection$widgetSelected and SchemaLocationSection$widgetSelected
 * and the processing in handleSchemaLocationChange()
 */
public static void updateSchemaLocation(XSDSchema xsdSchema, Object selection, boolean isInclude) {
    Shell shell = Display.getCurrent().getActiveShell();
    IFile currentIFile = null;
    IEditorInput editorInput = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput();
    ViewerFilter filter;
    if (editorInput instanceof IFileEditorInput) {
        currentIFile = ((IFileEditorInput) editorInput).getFile();
        filter = new // $NON-NLS-1$
        ResourceFilter(// $NON-NLS-1$
        new String[] { ".xsd" }, new IFile[] { currentIFile }, null);
    } else {
        filter = new // $NON-NLS-1$
        ResourceFilter(// $NON-NLS-1$
        new String[] { ".xsd" }, null, null);
    }
    XSDSelectIncludeFileWizard fileSelectWizard = new // $NON-NLS-1$
    XSDSelectIncludeFileWizard(// $NON-NLS-1$
    xsdSchema, // $NON-NLS-1$
    isInclude, // $NON-NLS-1$
    XSDEditorPlugin.getXSDString("_UI_FILEDIALOG_SELECT_XML_SCHEMA"), // $NON-NLS-1$
    XSDEditorPlugin.getXSDString("_UI_FILEDIALOG_SELECT_XML_DESC"), filter, new StructuredSelection(selection));
    WizardDialog wizardDialog = new WizardDialog(shell, fileSelectWizard);
    wizardDialog.create();
    wizardDialog.setBlockOnOpen(true);
    int result = wizardDialog.open();
    if (result == Window.OK) {
        IFile selectedIFile = fileSelectWizard.getResultFile();
        String schemaFileString;
        if (selectedIFile != null && currentIFile != null) {
            schemaFileString = URIHelper.getRelativeURI(selectedIFile.getLocation(), currentIFile.getLocation());
        } else if (selectedIFile != null && currentIFile == null) {
            schemaFileString = selectedIFile.getLocationURI().toString();
        } else {
            schemaFileString = fileSelectWizard.getURL();
        }
        // $NON-NLS-1$
        String attributeSchemaLocation = "schemaLocation";
        if (selection instanceof XSDImport) {
            XSDImport xsdImport = (XSDImport) selection;
            // $NON-NLS-1$
            xsdImport.getElement().setAttribute(attributeSchemaLocation, schemaFileString);
            String namespace = fileSelectWizard.getNamespace();
            if (namespace == null)
                // $NON-NLS-1$
                namespace = "";
            XSDSchema externalSchema = fileSelectWizard.getExternalSchema();
            java.util.Map map = xsdSchema.getQNamePrefixToNamespaceMap();
            Element schemaElement = xsdSchema.getElement();
            // update the xmlns in the schema element first, and then update the
            // import element next so that the last change will be in the import element. This keeps the
            // selection on the import element
            TypesHelper helper = new TypesHelper(externalSchema);
            String prefix = helper.getPrefix(namespace, false);
            if (map.containsKey(prefix)) {
                prefix = null;
            }
            if (prefix == null || (prefix != null && prefix.length() == 0)) {
                // $NON-NLS-1$
                StringBuffer newPrefix = new StringBuffer("pref");
                int prefixExtension = 1;
                while (map.containsKey(newPrefix.toString()) && prefixExtension < 100) {
                    // $NON-NLS-1$
                    newPrefix = new StringBuffer("pref" + String.valueOf(prefixExtension));
                    prefixExtension++;
                }
                prefix = newPrefix.toString();
            }
            // $NON-NLS-1$
            String attributeNamespace = "namespace";
            if (namespace.length() > 0) {
                // if ns already in map, use its corresponding prefix
                if (map.containsValue(namespace)) {
                    TypesHelper typesHelper = new TypesHelper(xsdSchema);
                    prefix = typesHelper.getPrefix(namespace, false);
                } else // otherwise add to the map
                {
                    // $NON-NLS-1$
                    schemaElement.setAttribute("xmlns:" + prefix, namespace);
                }
                // prefixText.setText(prefix);
                xsdImport.getElement().setAttribute(attributeNamespace, namespace);
            }
            // into the resource set
            if (// redundant
            selection instanceof XSDImportImpl) {
                XSDImportImpl xsdImportImpl = (XSDImportImpl) selection;
                xsdImportImpl.importSchema();
            }
        } else if (selection instanceof XSDInclude) {
            XSDInclude xsdInclude = (XSDInclude) selection;
            xsdInclude.getElement().setAttribute(attributeSchemaLocation, schemaFileString);
        } else if (selection instanceof XSDRedefine) {
            XSDRedefine xsdRedefine = (XSDRedefine) selection;
            xsdRedefine.getElement().setAttribute(attributeSchemaLocation, schemaFileString);
        }
    }
}
Also used : IFile(org.eclipse.core.resources.IFile) XSDRedefine(org.eclipse.xsd.XSDRedefine) ViewerFilter(org.eclipse.jface.viewers.ViewerFilter) Element(org.w3c.dom.Element) StructuredSelection(org.eclipse.jface.viewers.StructuredSelection) Shell(org.eclipse.swt.widgets.Shell) XSDImportImpl(org.eclipse.xsd.impl.XSDImportImpl) XSDSelectIncludeFileWizard(org.eclipse.wst.xsd.ui.internal.wizards.XSDSelectIncludeFileWizard) TypesHelper(org.eclipse.wst.xsd.ui.internal.util.TypesHelper) IFileEditorInput(org.eclipse.ui.IFileEditorInput) XSDImport(org.eclipse.xsd.XSDImport) WizardDialog(org.eclipse.jface.wizard.WizardDialog) IEditorInput(org.eclipse.ui.IEditorInput) XSDSchema(org.eclipse.xsd.XSDSchema) XSDInclude(org.eclipse.xsd.XSDInclude)

Example 5 with XSDRedefine

use of org.eclipse.xsd.XSDRedefine in project webtools.sourceediting by eclipse.

the class XSDSimpleTypeDefinitionAdapter method isAnonymous.

public boolean isAnonymous() {
    XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition) target;
    EObject eContainer = xsdSimpleTypeDefinition.eContainer();
    return !(eContainer instanceof XSDSchema || eContainer instanceof XSDRedefine);
}
Also used : XSDRedefine(org.eclipse.xsd.XSDRedefine) XSDSimpleTypeDefinition(org.eclipse.xsd.XSDSimpleTypeDefinition) EObject(org.eclipse.emf.ecore.EObject) XSDSchema(org.eclipse.xsd.XSDSchema)

Aggregations

XSDRedefine (org.eclipse.xsd.XSDRedefine)20 XSDSchema (org.eclipse.xsd.XSDSchema)11 ArrayList (java.util.ArrayList)8 XSDConcreteComponent (org.eclipse.xsd.XSDConcreteComponent)8 List (java.util.List)7 EObject (org.eclipse.emf.ecore.EObject)6 XSDAttributeGroupDefinition (org.eclipse.xsd.XSDAttributeGroupDefinition)6 XSDInclude (org.eclipse.xsd.XSDInclude)6 XSDModelGroupDefinition (org.eclipse.xsd.XSDModelGroupDefinition)6 XSDSimpleTypeDefinition (org.eclipse.xsd.XSDSimpleTypeDefinition)5 Iterator (java.util.Iterator)4 IADTObject (org.eclipse.wst.xsd.ui.internal.adt.facade.IADTObject)4 XSDComplexTypeDefinition (org.eclipse.xsd.XSDComplexTypeDefinition)4 IFile (org.eclipse.core.resources.IFile)3 EList (org.eclipse.emf.common.util.EList)3 IEditorInput (org.eclipse.ui.IEditorInput)3 XSDAttributeDeclaration (org.eclipse.xsd.XSDAttributeDeclaration)3 XSDElementDeclaration (org.eclipse.xsd.XSDElementDeclaration)3 XSDImport (org.eclipse.xsd.XSDImport)3 XSDSchemaDirective (org.eclipse.xsd.XSDSchemaDirective)3