- public static QName qNameFromArgument(StmtContext<?, ?, ?> ctx, final String value) {
-
- if (value == null || value.equals("")) {
- return ctx.getPublicDefinition().getStatementName();
- }
-
- String prefix;
- QNameModule qNameModule = null;
- String localName = null;
-
- String[] namesParts = value.split(":");
- switch (namesParts.length) {
- case 1:
- localName = namesParts[0];
- qNameModule = getRootModuleQName(ctx);
- break;
- default:
- prefix = namesParts[0];
- localName = namesParts[1];
- qNameModule = getModuleQNameByPrefix(ctx, prefix);
- // in case of unknown statement argument, we're not going to parse it
- if (qNameModule == null
- && ctx.getPublicDefinition().getDeclaredRepresentationClass()
- .isAssignableFrom(UnknownStatementImpl.class)) {
- localName = value;
- qNameModule = getRootModuleQName(ctx);
- }
- if (qNameModule == null
- && Iterables.getLast(ctx.getCopyHistory()) == StmtContext.TypeOfCopy.ADDED_BY_AUGMENTATION) {
- ctx = ctx.getOriginalCtx();
- qNameModule = getModuleQNameByPrefix(ctx, prefix);
- }
- break;
- }
-
- if (qNameModule == null) {
- throw new IllegalArgumentException("Error in module '" + ctx.getRoot().rawStatementArgument()
- + "': can not resolve QNameModule for '" + value + "'.");
- }
-
- QNameModule resultQNameModule = qNameModule.getRevision() == null ? QNameModule.create(
- qNameModule.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV) : qNameModule;
-
- return QName.create(resultQNameModule, localName);
- }
-
- public static QNameModule getModuleQNameByPrefix(final StmtContext<?, ?, ?> ctx, final String prefix) {
- QNameModule qNameModule;
- 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);
- }
- return qNameModule;
- }
-
- public static QNameModule getRootModuleQName(final StmtContext<?, ?, ?> ctx) {
-
- if (ctx == null) {
- return null;
- }
-
- StmtContext<?, ?, ?> rootCtx = ctx.getRoot();
- QNameModule qNameModule = null;
-
- if (StmtContextUtils.producesDeclared(rootCtx, ModuleStatement.class)) {
- qNameModule = rootCtx.getFromNamespace(ModuleCtxToModuleQName.class, rootCtx);
- } else if (StmtContextUtils.producesDeclared(rootCtx, SubmoduleStatement.class)) {
- String belongsToModuleName = firstAttributeOf(rootCtx.substatements(),
- BelongsToStatement.class);
- qNameModule = rootCtx.getFromNamespace(ModuleNameToModuleQName.class, belongsToModuleName);
- }
-
- return qNameModule.getRevision() == null ? QNameModule.create(qNameModule.getNamespace(),
- SimpleDateFormatUtil.DEFAULT_DATE_REV) : qNameModule;
- }
-
- @Nullable
- public static StatementContextBase<?, ?, ?> findNode(final 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;