Package org.modeshape.sequencer.teiid.model.ReferenceResolver

Examples of org.modeshape.sequencer.teiid.model.ReferenceResolver.UnresolvedReference


                        LOGGER.debug("annotated object UUID is blank");
                        continue;
                    }

                    final Node node = getResolver().getNode(uuid);
                    final UnresolvedReference unresolved = ((node == null) ? getResolver().addUnresolvedReference(uuid) : null);

                    // description
                    final String description = annotation.getAttributeValue(CoreLexicon.ModelId.DESCRIPTION, URI);

                    if (!StringUtil.isBlank(description)) {
                        if (node != null) {
                            node.addMixin(JcrId.ANNOTATED);
                            setProperty(node, JcrId.DESCRIPTION, description);
                        } else if (unresolved != null) {
                            unresolved.addMixin(JcrId.ANNOTATED);
                            unresolved.addProperty(JcrId.DESCRIPTION, description, false);
                        }
                    }

                    // keywords
                    final String keywordsValue = annotation.getAttributeValue(CoreLexicon.ModelId.KEYWORD, URI);

                    if (!StringUtil.isBlank(keywordsValue)) {
                        if ((node != null) && !node.isNodeType(JcrId.ANNOTATED)) {
                            node.addMixin(JcrId.ANNOTATED);
                        } else if (unresolved != null) {
                            unresolved.addMixin(JcrId.ANNOTATED);
                        }

                        for (final String keyword : keywordsValue.split("\\s")) {
                            if (node != null) {
                                addPropertyValue(node, JcrId.KEYWORDS, keyword);
                            } else if (unresolved != null) {
                                unresolved.addProperty(JcrId.KEYWORDS, keyword, true);
                            }
                        }
                    }

                    for (final XmiElement child : annotation.getChildren()) {
                        boolean hasTags = false;

                        if (CoreLexicon.ModelId.TAGS.equals(child.getName())) {
                            String key = child.getAttributeValue(CoreLexicon.ModelId.KEY, URI);

                            if (StringUtil.isBlank(key)) {
                                continue;
                            }

                            final String value = child.getAttributeValue(CoreLexicon.ModelId.VALUE, URI);
                            final String[] parts = key.split(":", 2); // part 0 = namespace prefix, part 2 = property name

                            // don't process if namespace is being ignored
                            if (isIgnoredTag(parts[0])) {
                                if (node != null) {
                                    LOGGER.debug("tag '{0}' not added as property of node '{1}'", key, node.getName());
                                } else if (unresolved != null) {
                                    LOGGER.debug("tag '{0}' not added as property of node '{1}'", key, unresolved.getUuid());
                                }

                                continue; // key should be ignored
                            }

                            if ((node != null) && LOGGER.isDebugEnabled()) {
                                LOGGER.debug("annotated object node name '{0}' has type of '{1}' and key of '{2}'",
                                             node.getName(),
                                             node.getPrimaryNodeType().getName(),
                                             key);
                            }

                            // only process when MED helper doesn't
                            if (!getMedHelper().process(modelNode, node, unresolved, child)) {
                                if (!hasTags) {
                                    hasTags = true;

                                    if (node != null) {
                                        node.addMixin(JcrId.TAGS);
                                    } else if (unresolved != null) {
                                        unresolved.addMixin(JcrId.TAGS);
                                    }
                                }

                                if (node != null) {
                                    setProperty(node, key, value);
                                } else if (unresolved != null) {
                                    unresolved.addProperty(key, value, false);
                                }
                            }
                        } else {
                            LOGGER.debug("Unexpected element processing an annotation: {0}", child.getName());
                        }
View Full Code Here


            } else {
                assert false;
            }

            if (source == null) {
                UnresolvedReference unresolvedSource = resolver.addUnresolvedReference(inputUuid);
                unresolvedSource.addResolvedName(referencerUuid, JcrId.TRANSFORMED_FROM_NAMES);
            } else {
                if (unresolved != null) {
                    unresolved.addProperty(JcrId.TRANSFORMED_FROM_NAMES, source.getName(), true);
                } else {
                    assert false;
View Full Code Here

        LOGGER.debug("=========mappings='{0}'", mappings.getName());
        final ReferenceResolver resolver = getResolver();
        final String targetUuid = mappings.getAttributeValue(ModelId.TARGET, URI);
        final String uuid = resolver.resolveInternalReference(targetUuid);
        final Node targetNode = resolver.getNode(uuid);
        UnresolvedReference unresolved = null;

        // add SQL mixin
        if (targetNode == null) {
            unresolved = resolver.addUnresolvedReference(uuid);
            unresolved.addMixin(JcrId.WITH_SQL);
            unresolved.addMixin(JcrId.TRANSFORMED);
        } else if (!targetNode.isNodeType(JcrId.WITH_SQL)) {
            targetNode.addMixin(JcrId.WITH_SQL);
            targetNode.addMixin(JcrId.TRANSFORMED);
        }
View Full Code Here

        final String columnHref = nested.getAttributeValue(ModelId.OUTPUTS, URI);
        final String columnUuid = resolver.resolveInternalReference(columnHref);

        // virtual column node
        final Node columnNode = resolver.getNode(columnUuid);
        UnresolvedReference unresolvedColumn = null;

        if (columnNode == null) {
            unresolvedColumn = resolver.addUnresolvedReference(columnUuid);
            unresolvedColumn.addMixin(JcrId.TRANSFORMED);
        } else if (!columnNode.isNodeType(JcrId.TRANSFORMED)) {
            columnNode.addMixin(JcrId.TRANSFORMED);
        }

        // nested children are inputs which are the referenced source columns
View Full Code Here

        // sets a weak reference

        final ReferenceResolver resolver = getResolver();
        final Node referencedNode = resolver.getNode(referencedUuid);
        UnresolvedReference unresolvedReference = null;

        if (unresolvedReferencer != null) {
            // add reference
            unresolvedReferencer.addReference(propertyName, referencedUuid);
        } else {
            assert referencerNode != null;
            if (referencedNode == null) {
                // resolved referencer, unresolved referenced
                unresolvedReference = resolver.addUnresolvedReference(referencedUuid);
                unresolvedReference.addReferencerReference(referencerNode.getProperty(XmiLexicon.JcrId.UUID).getString(),
                                                           propertyName);
            } else {
                // resolved referencer, resolved referenced
                if (!referencedNode.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
                    referencedNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
View Full Code Here

            if (resolved == null) {
                LOGGER.debug("**** uuid {0} is still unresolved during last phase of writing model", entry.getKey());
                continue;
            }

            final UnresolvedReference unresolved = entry.getValue();
            final ValueFactory valueFactory = resolved.getSession().getValueFactory();

            // add mixins
            for (final String mixin : unresolved.getMixins()) {
                resolved.addMixin(mixin);
                LOGGER.debug("adding mixin {0} to resolved node {1}", mixin, resolved.getName());
            }

            { // add properties
                for (final String propName : unresolved.getProperties().keySet()) {
                    UnresolvedProperty property = unresolved.getProperties().get(propName);
                    assert (property != null);

                    boolean multiValued = property.isMulti();

                    if (multiValued) {
                        Value[] propertyValues = new Value[property.getValues().size()];
                        int i = 0;

                        for (String value : property.getValues()) {
                            propertyValues[i++] = valueFactory.createValue(value);
                        }
                    } else {
                        // single valued
                        final String mappedName = this.medHelper.getMappedPropertyName(propName);
                        resolved.setProperty(mappedName, property.getValue());
                        LOGGER.debug("setting property '{0}' with value '{1}' to resolved node {2}",
                                     propName,
                                     property.getValue(),
                                     resolved.getName());
                    }
                }
            }

            { // add weakreferences
                for (final String propertyName : unresolved.getReferences().keySet()) {
                    final Collection<String> refs = unresolved.getReferences().get(propertyName);

                    if ((refs == null) || refs.isEmpty()) {
                        continue;
                    }

                    boolean multiValued = false;

                    if (resolved.hasProperty(propertyName)) {
                        multiValued = resolved.getProperty(propertyName).isMultiple();

                        if (multiValued) {
                            Value[] values = new Value[refs.size()];
                            int i = 0;

                            for (final String value : refs) {
                                Node referencedNode = this.resolver.getNode(value);

                                if (referencedNode == null) {
                                    this.resolver.addUnresolvedReference(value);
                                } else {
                                    values[i++] = valueFactory.createValue(referencedNode, true);
                                }
                            }

                            resolved.setProperty(propertyName, values);
                        } else {
                            // single valued property so just use first value
                            resolved.setProperty(propertyName, refs.iterator().next());
                        }
                    } else {
                        LOGGER.debug("**** resolved property does not have property '{0}'. The value has {1}  reference(s) and first reference is '{2}'",
                                     propertyName,
                                     refs.size(),
                                     refs.iterator().next());
                    }
                }
            }

            { // add referenced node name to referencer property
                for (final String propertyName : unresolved.getReferenceNames().keySet()) {
                    final Collection<String> referencerUuids = unresolved.getReferenceNames().get(propertyName);

                    if ((referencerUuids == null) || referencerUuids.isEmpty()) {
                        continue;
                    }

                    for (final String uuid : referencerUuids) {
                        Node referencerNode = this.resolver.getNode(uuid);

                        if (referencerNode == null) {
                            // referencer node is unresolved
                            UnresolvedReference unresolvedReferencer = this.resolver.addUnresolvedReference(uuid);
                            unresolvedReferencer.addProperty(propertyName, resolved.getName(), true);
                        } else {
                            referencerNode.setProperty(propertyName,
                                                       new Value[] { this.context.valueFactory().createValue(
                                                               resolved.getName()) });
                        }
                    }
                }
            }

            { // referencer references
                Multimap<String, String> refRefs = unresolved.getReferencerReferences();

                for (final String propertyName : refRefs.keySet()) {
                    if (!resolved.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
                        resolved.addMixin(JcrConstants.MIX_REFERENCEABLE);
                    }

                    Value weakRef = valueFactory.createValue(resolved, true);

                    // property needs to get set with the weak reference of the resolved node
                    for (final String referencerUuuid : refRefs.get(propertyName)) {
                        Node referencer = this.resolver.getNode(referencerUuuid);

                        if (referencer == null) {
                            UnresolvedReference unresolvedReferencer = this.resolver.addUnresolvedReference(referencerUuuid);
                            unresolvedReferencer.addReference(propertyName, entry.getKey());
                        } else {
                            if (referencer.hasProperty(propertyName)) {
                                Property prop = referencer.getProperty(propertyName);

                                if (prop.isMultiple()) {
View Full Code Here

            final ValueFactory valueFactory = columnNode.getSession().getValueFactory();

            for (final String accessPatternRef : accessPatterns.split("\\s")) {
                final String accessPatternUuid = resolver.resolveInternalReference(accessPatternRef);
                final Node accessPatternNode = resolver.getNode(accessPatternUuid);
                UnresolvedReference unresolved = null;

                // - relational:accessPatterns (weak reference) multiple
                if (accessPatternNode == null) {
                    unresolved = resolver.addUnresolvedReference(accessPatternUuid);
                    unresolved.addReferencerReference(columnElement.getUuid(), JcrId.ACCESS_PATTERNS);
                } else {
                    if (!accessPatternNode.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
                        accessPatternNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
                    }

                    final Value weakReference = valueFactory.createValue(accessPatternNode, true);
                    addPropertyValue(columnNode, JcrId.ACCESS_PATTERNS, weakReference);
                }

                // - relational:accessPatternHrefs (string) multiple
                addPropertyValue(columnNode, JcrId.ACCESS_PATTERN_HREFS, accessPatternRef);

                // - relational:accessPatternXmiUuids (string) multiple
                addPropertyValue(columnNode, JcrId.ACCESS_PATTERN_XMI_UUIDS, accessPatternUuid);

                // - relational:accessPatternNames (string) multiple
                if (accessPatternNode != null) {
                    addPropertyValue(columnNode, JcrId.ACCESS_PATTERN_NAMES, accessPatternNode.getName());
                } else if (unresolved != null) {
                    unresolved.addResolvedName(columnElement.getUuid(), JcrId.ACCESS_PATTERN_NAMES);
                } else {
                    assert false;
                }
            }
        }
View Full Code Here

            final ValueFactory valueFactory = node.getSession().getValueFactory();

            for (final String columnRef : columns.split("\\s")) {
                final String columnUuid = resolver.resolveInternalReference(columnRef);
                final Node columnNode = resolver.getNode(columnUuid);
                UnresolvedReference unresolved = null;

                // - relational:columns (weak reference) multiple
                if (columnNode == null) {
                    unresolved = resolver.addUnresolvedReference(columnUuid);
                    unresolved.addReferencerReference(element.getUuid(), JcrId.COLUMNS);
                } else {
                    if (!columnNode.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
                        columnNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
                    }

                    final Value weakReference = valueFactory.createValue(columnNode, true);
                    addPropertyValue(node, JcrId.COLUMNS, weakReference);
                }

                // - relational:columnXmiUuids (string) multiple
                addPropertyValue(node, JcrId.COLUMN_XMI_UUIDS, columnUuid);

                // - relational:columnNames (string) multiple
                if (columnNode != null) {
                    addPropertyValue(node, JcrId.COLUMN_NAMES, columnNode.getName());
                } else if (unresolved != null) {
                    unresolved.addResolvedName(element.getUuid(), JcrId.COLUMN_NAMES);
                } else {
                    assert false;
                }
            }
        }
View Full Code Here

            final ValueFactory valueFactory = node.getSession().getValueFactory();

            for (final String foreignKeyRef : foreignKeys.split("\\s")) {
                final String foreignKeyUuid = resolver.resolveInternalReference(foreignKeyRef);
                final Node foreignKeyNode = resolver.getNode(foreignKeyUuid);
                UnresolvedReference unresolved = null;

                // - relational:foreignKeys (weakreference) multiple
                if (foreignKeyNode == null) {
                    unresolved = resolver.addUnresolvedReference(foreignKeyUuid);
                    unresolved.addReferencerReference(element.getUuid(), JcrId.FOREIGN_KEYS);
                } else {
                    if (!foreignKeyNode.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
                        foreignKeyNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
                    }

                    final Value weakReference = valueFactory.createValue(foreignKeyNode, true);
                    addPropertyValue(node, JcrId.FOREIGN_KEYS, weakReference);
                }

                // - relational:foreignKeyXmiUuids (string) multiple
                addPropertyValue(node, JcrId.FOREIGN_KEY_XMI_UUIDS, foreignKeyUuid);

                // - relational:foreignKeyHrefs (string) multiple
                addPropertyValue(node, JcrId.FOREIGN_KEY_HREFS, foreignKeyRef);

                // - relational:foreignKeyNames (string) multiple
                if (foreignKeyNode != null) {
                    addPropertyValue(node, JcrId.UNIQUE_KEY_NAMES, foreignKeyNode.getName());
                } else if (unresolved != null) {
                    unresolved.addResolvedName(element.getUuid(), JcrId.FOREIGN_KEY_NAMES);
                } else {
                    assert false;
                }
            }
        }
View Full Code Here

            final ValueFactory valueFactory = columnNode.getSession().getValueFactory();

            for (final String indexRef : indexes.split("\\s")) {
                final String indexUuid = resolver.resolveInternalReference(indexRef);
                final Node indexNode = resolver.getNode(indexUuid);
                UnresolvedReference unresolved = null;

                // - relational:indexes (weakreference) multiple
                if (indexNode == null) {
                    unresolved = resolver.addUnresolvedReference(indexUuid);
                    unresolved.addReferencerReference(columnElement.getUuid(), JcrId.INDEXES);
                } else {
                    if (!indexNode.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
                        indexNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
                    }

                    final Value weakReference = valueFactory.createValue(indexNode, true);
                    addPropertyValue(columnNode, JcrId.INDEXES, weakReference);
                }

                // - relational:indexXmiUuids (string) multiple
                addPropertyValue(columnNode, JcrId.INDEX_XMI_UUIDS, indexUuid);

                // - relational:indexHrefs (string) multiple
                addPropertyValue(columnNode, JcrId.INDEX_HREFS, indexRef);

                // - relational:indexNames (string) multiple
                if (indexNode != null) {
                    addPropertyValue(columnNode, JcrId.INDEX_NAMES, indexNode.getName());
                } else if (unresolved != null) {
                    unresolved.addResolvedName(columnElement.getUuid(), JcrId.INDEX_NAMES);
                } else {
                    assert false;
                }
            }
        }
View Full Code Here

TOP

Related Classes of org.modeshape.sequencer.teiid.model.ReferenceResolver.UnresolvedReference

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.