+ static @NonNull DataSchemaContextNode<?> of(final @NonNull DataSchemaNode schema) {
+ if (schema instanceof ContainerLike) {
+ return new ContainerContextNode((ContainerLike) schema);
+ } else if (schema instanceof ListSchemaNode) {
+ return fromListSchemaNode((ListSchemaNode) schema);
+ } else if (schema instanceof LeafSchemaNode) {
+ return new LeafContextNode((LeafSchemaNode) schema);
+ } else if (schema instanceof ChoiceSchemaNode) {
+ return new ChoiceNodeContextNode((ChoiceSchemaNode) schema);
+ } else if (schema instanceof LeafListSchemaNode) {
+ return fromLeafListSchemaNode((LeafListSchemaNode) schema);
+ } else if (schema instanceof AnydataSchemaNode) {
+ return new AnydataContextNode((AnydataSchemaNode) schema);
+ } else if (schema instanceof AnyxmlSchemaNode) {
+ return new AnyXmlContextNode((AnyxmlSchemaNode) schema);
+ } else {
+ throw new IllegalStateException("Unhandled schema " + schema);
+ }
+ }
+
+ // FIXME: do we tolerate null argument? do we tolerate unknown subclasses?
+ static @Nullable DataSchemaContextNode<?> lenientOf(final @Nullable DataSchemaNode schema) {
+ if (schema instanceof ContainerLike) {
+ return new ContainerContextNode((ContainerLike) schema);
+ } else if (schema instanceof ListSchemaNode) {
+ return fromListSchemaNode((ListSchemaNode) schema);
+ } else if (schema instanceof LeafSchemaNode) {
+ return new LeafContextNode((LeafSchemaNode) schema);
+ } else if (schema instanceof ChoiceSchemaNode) {
+ return new ChoiceNodeContextNode((ChoiceSchemaNode) schema);
+ } else if (schema instanceof LeafListSchemaNode) {
+ return fromLeafListSchemaNode((LeafListSchemaNode) schema);
+ } else if (schema instanceof AnydataSchemaNode) {
+ return new AnydataContextNode((AnydataSchemaNode) schema);
+ } else if (schema instanceof AnyxmlSchemaNode) {
+ return new AnyXmlContextNode((AnyxmlSchemaNode) schema);
+ } else {
+ return null;
+ }
+ }
+