GrokHandler.java
- /*
- * This file is part of dependency-check-core.
- *
- * 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.
- *
- * Copyright (c) 2019 Jeremy Long. All Rights Reserved.
- */
- package org.owasp.dependencycheck.xml.assembly;
- import javax.annotation.concurrent.NotThreadSafe;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- /**
- * A handler to read Grok Assembly XML files.
- *
- * @author Jeremy Long
- */
- @NotThreadSafe
- public class GrokHandler extends DefaultHandler {
- /**
- * An XML node name.
- */
- private static final String ERROR = "error";
- /**
- * An XML node name.
- */
- private static final String WARNING = "warning";
- /**
- * An XML node name.
- */
- private static final String COMPANY_NAME = "companyName";
- /**
- * An XML node name.
- */
- private static final String PRODUCT_NAME = "productName";
- /**
- * An XML node name.
- */
- private static final String PRODUCT_VERSION = "productVersion";
- /**
- * An XML node name.
- */
- private static final String COMMENTS = "comments";
- /**
- * An XML node name.
- */
- private static final String FILE_DESCRIPTION = "fileDescription";
- /**
- * An XML node name.
- */
- private static final String FILE_NAME = "fileName";
- /**
- * An XML node name.
- */
- private static final String FILE_VERSION = "fileVersion";
- /**
- * An XML node name.
- */
- private static final String INTERNAL_NAME = "internalName";
- /**
- * An XML node name.
- */
- private static final String ORIGINAL_FILE_NAME = "originalFilename";
- /**
- * An XML node name.
- */
- private static final String FULLNAME = "fullName";
- /**
- * An XML node name.
- */
- private static final String NAMESPACE = "namespace";
- /**
- * The current rule being read.
- */
- private final AssemblyData data = new AssemblyData();
- /**
- * The current node text being extracted from the element.
- */
- private StringBuilder currentText;
- /**
- * Handles the start element event.
- *
- * @param uri the uri of the element being processed
- * @param localName the local name of the element being processed
- * @param qName the qName of the element being processed
- * @param attributes the attributes of the element being processed
- * @throws SAXException thrown if there is an exception processing
- */
- @Override
- public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
- currentText = new StringBuilder();
- }
- /**
- * Handles the end element event.
- *
- * @param uri the URI of the element
- * @param localName the local name of the element
- * @param qName the qName of the element
- * @throws SAXException thrown if there is an exception processing
- */
- @Override
- public void endElement(String uri, String localName, String qName) throws SAXException {
- if (null != qName) {
- switch (qName) {
- case COMPANY_NAME:
- data.setCompanyName(currentText.toString());
- break;
- case PRODUCT_NAME:
- data.setProductName(currentText.toString());
- break;
- case PRODUCT_VERSION:
- data.setProductVersion(currentText.toString());
- break;
- case COMMENTS:
- data.setComments(currentText.toString());
- break;
- case FILE_DESCRIPTION:
- data.setFileDescription(currentText.toString());
- break;
- case FILE_NAME:
- data.setFileName(currentText.toString());
- break;
- case FILE_VERSION:
- data.setFileVersion(currentText.toString());
- break;
- case INTERNAL_NAME:
- data.setInternalName(currentText.toString());
- break;
- case ORIGINAL_FILE_NAME:
- data.setOriginalFilename(currentText.toString());
- break;
- case FULLNAME:
- data.setFullName(currentText.toString());
- break;
- case NAMESPACE:
- data.addNamespace(currentText.toString());
- break;
- case ERROR:
- data.setError(currentText.toString());
- break;
- case WARNING:
- data.setWarning(currentText.toString());
- break;
- default:
- break;
- }
- }
- }
- /**
- * Collects the body text of the node being processed.
- *
- * @param ch the char array of text
- * @param start the start position to copy text from in the char array
- * @param length the number of characters to copy from the char array
- * @throws SAXException thrown if there is a parsing exception
- */
- @Override
- public void characters(char[] ch, int start, int length) throws SAXException {
- currentText.append(ch, start, length);
- }
- AssemblyData getAssemblyData() {
- return data;
- }
- }