- public static QName qNameFromArgument(StmtContext<?, ?, ?> ctx, String value) {
-
- String prefix;
- QNameModule qNameModule = null;
- try {
- qNameModule = QNameModule.create(new URI(""), new Date(0));
- } catch (URISyntaxException e) {
- LOG.warn(e.getMessage(), e);
- }
- String localName = null;
-
- String[] namesParts = value.split(":");
- switch (namesParts.length) {
- case 1:
- localName = namesParts[0];
-
- if (StmtContextUtils.producesDeclared(ctx.getRoot(),
- ModuleStatement.class)) {
- prefix = firstAttributeOf(
- ctx.getRoot().declaredSubstatements(),
- PrefixStatement.class);
- qNameModule = ctx
- .getFromNamespace(PrefixToModule.class, prefix);
-
- } else if (StmtContextUtils.producesDeclared(ctx.getRoot(),
- SubmoduleStatement.class)) {
- String belongsToModuleName = firstAttributeOf(ctx.getRoot()
- .declaredSubstatements(), BelongsToStatement.class);
- qNameModule = ctx.getFromNamespace(
- ModuleNameToModuleQName.class, belongsToModuleName);
- }
- break;
- case 2:
- prefix = namesParts[0];
- localName = namesParts[1];
-
- ModuleIdentifier impModIdentifier = ctx.getRoot().getFromNamespace(
- ImpPrefixToModuleIdentifier.class, prefix);
- qNameModule = ctx.getFromNamespace(
- ModuleIdentifierToModuleQName.class, impModIdentifier);
-
- if (qNameModule == null
- && StmtContextUtils.producesDeclared(ctx.getRoot(),
- SubmoduleStatement.class)) {
- String moduleName = ctx.getRoot().getFromNamespace(
- BelongsToPrefixToModuleName.class, prefix);
- qNameModule = ctx.getFromNamespace(
- ModuleNameToModuleQName.class, moduleName);
- }
-
- break;
- default:
- break;
- }
-
- return QName.create(qNameModule, localName);
- }
-
- @Nullable
- public static StatementContextBase<?, ?, ?> findCtxOfNodeInSubstatements(
- StatementContextBase<?, ?, ?> rootStmtCtx,
- final Iterable<QName> path) {
-
- StatementContextBase<?, ?, ?> parent = rootStmtCtx;
-
- Iterator<QName> pathIter = path.iterator();
- while (pathIter.hasNext()) {
- QName nextPathQName = pathIter.next();
- StatementContextBase<?, ?, ?> foundSubstatement = getSubstatementByQName(
- parent, nextPathQName);
-
- if (foundSubstatement == null) {
- return null;
- }
- if (!pathIter.hasNext()) {
- return foundSubstatement;