blob: eb6942274ccfeee141f6551530f930d6d210e785 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008-2010 Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Sonatype, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.m2e.core.internal.content;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.eclipse.core.runtime.content.IContentDescription;
import org.eclipse.m2e.core.internal.Messages;
/**
* A content describer for POM files.
*
* @see org.eclipse.ant.internal.core.contentDescriber.AntBuildfileContentDescriber
* @author Herve Boutemy
* @since 0.9.6
*/
public final class PomFileContentDescriber extends XMLContentDescriber {
/**
* Determines the validation status for the given contents.
*
* @param contents the contents to be evaluated
* @return one of the following:
* <ul>
* <li><code>VALID</code></li>,
* <li><code>INVALID</code></li>,
* <li><code>INDETERMINATE</code></li>
* </ul>
* @throws IOException
*/
private int checkCriteria(InputSource contents) throws IOException {
PomHandler pomHandler = new PomHandler();
try {
if(!pomHandler.parseContents(contents)) {
return INDETERMINATE;
}
} catch(SAXException e) {
// we may be handed any kind of contents... it is normal we fail to parse
return INDETERMINATE;
} catch(ParserConfigurationException e) {
// some bad thing happened - force this describer to be disabled
throw new RuntimeException(Messages.PomFileContentDescriber_error);
}
// Check to see if we matched our criteria.
if(pomHandler.hasRootProjectElement()) {
if(pomHandler.hasArtifactIdElement()) {
//project and artifactId element
return VALID;
}
//only a top level project element: maybe a POM file, but maybe an Ant buildfile, a site descriptor, ...
return INDETERMINATE;
}
return INDETERMINATE;
}
@Override
public int describe(InputStream contents, IContentDescription description) throws IOException {
// call the basic XML describer to do basic recognition
if(super.describe(contents, description) == INVALID) {
return INVALID;
}
// super.describe will have consumed some chars, need to rewind
contents.reset();
// Check to see if we matched our criteria.
return checkCriteria(new InputSource(contents));
}
@Override
public int describe(Reader contents, IContentDescription description) throws IOException {
// call the basic XML describer to do basic recognition
if(super.describe(contents, description) == INVALID) {
return INVALID;
}
// super.describe will have consumed some chars, need to rewind
contents.reset();
// Check to see if we matched our criteria.
return checkCriteria(new InputSource(contents));
}
}