/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.foundation.dm.javaparser; import java.util.logging.Level; import java.util.logging.Logger; import org.openflexo.localization.FlexoLocalization; public abstract class ClassSourceCode extends AbstractSourceCode { private static final Logger logger = Logger.getLogger(ClassSourceCode.class.getPackage().getName()); private ParsedJavaClass _parsedClass; protected ClassSourceCode(SourceCodeOwner owner, String propertyName, String hasParseErrorPropertyName, String parseErrorWarningPropertyName) { super(owner, propertyName, hasParseErrorPropertyName, parseErrorWarningPropertyName); } protected ClassSourceCode(SourceCodeOwner owner) { super(owner); } @Override public abstract String makeComputedCode(); public abstract void interpretEditedJavaClass(ParsedJavaClass javaClass); @Override public void interpretEditedCode(ParsedJavaElement javaElement) { interpretEditedJavaClass((ParsedJavaClass) javaElement); } public ParsedJavaClass getParsedClass() throws ParserNotInstalledException { if (_parsedClass == null) { return parseCode(getCode()); } return _parsedClass; } @Override protected ParsedJavaClass parseCode(final String qualifiedCode) throws ParserNotInstalledException { if (_javaClassParser == null) { throw new ParserNotInstalledException(); } try { // Try to parse if (qualifiedCode == null) { throw new JavaParseException(); } _parsedClass = _javaClassParser.parseClass(qualifiedCode, getOwner().getDMModel()); setHasParseErrors(false); return _parsedClass; } catch (JavaParseException e) { setHasParseErrors(true); setParseErrorWarning("<html><font color=\"red\">" + FlexoLocalization.localizedForKey("parse_error_warning") + "</font></html>"); if (logger.isLoggable(Level.FINE)) { logger.fine("Parse error while parsing class: " + qualifiedCode); } return null; } } @Override public ParsedJavadoc parseJavadoc(final String qualifiedCode) throws ParserNotInstalledException { if (_javaClassParser == null) { throw new ParserNotInstalledException(); } try { return _javaClassParser.parseJavadocForClass(qualifiedCode, getOwner().getDMModel()); } catch (JavaParseException e) { setHasParseErrors(true); setParseErrorWarning("<html><font color=\"red\">" + FlexoLocalization.localizedForKey("parse_error_warning") + "</font></html>"); return null; } } private static JavaClassParser _javaClassParser; public static void setJavaClassParser(JavaClassParser javaClassParser) { _javaClassParser = javaClassParser; } public static JavaClassParser getJavaClassParser() { return _javaClassParser; } /** * Overrides isJavaParserInstalled * * @see org.openflexo.foundation.dm.javaparser.AbstractSourceCode#isJavaParserInstalled() */ @Override protected boolean isJavaParserInstalled() { return _javaClassParser != null; } public void setParsedClass(ParsedJavaClass parsedClass) { _parsedClass = parsedClass; } }