/* * Copyright (c) 2014 Magnet Systems, Inc. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.magnet.plugin.r2m.helpers; import com.magnet.langpack.builder.rest.parser.validation.BodyValidationResult; import com.magnet.langpack.builder.rest.parser.validation.BodyValidator; import com.magnet.langpack.builder.rest.parser.validation.ValidationResultEntry; import com.magnet.plugin.r2m.models.JSONError; import com.magnet.plugin.r2m.constants.PluginIcon; import org.jdesktop.swingx.JXLabel; import javax.swing.*; import java.util.List; import java.util.Collections; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * JSON validator according to Rest-By-Example specification */ public class JSONValidator { private static final String UNUSED_SYMBOLS = "\n|,|:|\"|\t"; private static final String IS_JSON_VERIFY = "^\\{|^\\[|]$|}$"; public static boolean isJSON(String text) { Pattern pattern = Pattern.compile(IS_JSON_VERIFY); Matcher matcher = pattern.matcher(removeUnusedSymbols(text.trim())); int matchCount = 0; while (matcher.find()) { matchCount++; } return matchCount >= 2; } public static List<JSONError> validateJSON(String text, JComponent field, JTextArea jsonField) { BodyValidationResult validationResult = BodyValidator.validateBody(text); if (validationResult.isValid()) { return Collections.EMPTY_LIST; } JsonErrorConverter jsonErrorConverter = new JsonErrorConverter(text, validationResult.getErrors()); List<JSONError> errors = jsonErrorConverter.convert(); // Highlight error in payload HighlightHelper.highlightErrors(errors, jsonField); return errors; } public static BodyValidationResult validateBody(String text) { return BodyValidator.validateBody(text); } private static String removeUnusedSymbols(String text) { return text.replaceAll(UNUSED_SYMBOLS, " "); } public static StringBuilder getErrorMessage(List<ValidationResultEntry> errors) { StringBuilder errorMessage = new StringBuilder(); for (ValidationResultEntry error : errors) { errorMessage.append(null != error.getMessage() ? error.getMessage() : error.toString()).append("\n"); } return errorMessage; } private static void setMessageToField(JComponent field, String text, boolean isNeedVisible) { if (field instanceof JXLabel) { ((JXLabel) field).setText(text); if (isNeedVisible) { ((JXLabel) field).setIcon(PluginIcon.errorIcon); } else { ((JXLabel) field).setIcon(PluginIcon.validIcon); } } else if (field instanceof JTextField) { ((JTextField) field).setText(text); field.setVisible(isNeedVisible); } else if (field instanceof JTextArea) { ((JTextArea) field).setText(text); field.setVisible(isNeedVisible); } } }