--- /dev/null
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.netconf.cli.io;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.opendaylight.controller.netconf.cli.reader.ReadingException;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+
+public class IOUtil {
+
+ public static final String SKIP = "skip";
+ public static final String PROMPT_SUFIX = ">";
+ public static final String PATH_SEPARATOR = "/";
+
+ private IOUtil() {
+ }
+
+ public static boolean isQName(final String qName) {
+ final Matcher matcher = patternNew.matcher(qName);
+ return matcher.matches();
+ }
+
+ public static Date parseDate(final String revision) {
+ final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+ try {
+ return formatter.parse(revision);
+ } catch (final ParseException e) {
+ throw new IllegalArgumentException("Date not valid", e);
+ }
+ }
+
+ public static String listType(final SchemaNode schemaNode) {
+ if (schemaNode instanceof LeafListSchemaNode) {
+ return "Leaf-list";
+ } else if (schemaNode instanceof ListSchemaNode) {
+ return "List";
+ } else if (schemaNode instanceof LeafSchemaNode) {
+ return "Leaf";
+ }
+ // FIXME throw exception on unexpected state, not null/emptyString
+ return "";
+ }
+
+ public static String qNameToKeyString(final QName qName, final String moduleName) {
+ return String.format("%s(%s)", qName.getLocalName(), moduleName);
+ }
+
+ // TODO test and check regex + review format of string for QName
+ final static Pattern patternNew = Pattern.compile("([^\\)]+)\\(([^\\)]+)\\)");
+
+ public static QName qNameFromKeyString(final String qName, final Map<String, QName> mappedModules)
+ throws ReadingException {
+ final Matcher matcher = patternNew.matcher(qName);
+ if (!matcher.matches()) {
+ final String message = String.format("QName in wrong format: %s should be: %s", qName, patternNew);
+ throw new ReadingException(message);
+ }
+ final QName base = mappedModules.get(matcher.group(2));
+ if (base == null) {
+ final String message = String.format("Module %s cannot be found", matcher.group(2));
+ throw new ReadingException(message);
+ }
+ return QName.create(base, matcher.group(1));
+ }
+
+ public static boolean isSkipInput(final String rawValue) {
+ return rawValue.equals(SKIP);
+ }
+
+}