package org.modeldriven.fuml.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.modeldriven.fuml.xmi.stream.StreamReader; import org.modeldriven.fuml.xmi.validation.ErrorCode; import org.modeldriven.fuml.xmi.validation.ErrorSeverity; import org.modeldriven.fuml.xmi.validation.ValidationErrorEvent; public class IncrementalArtifactLoader extends ArtifactLoader { private static Log log = LogFactory.getLog(IncrementalArtifactLoader.class); public IncrementalArtifactLoader() { super(); } public void read(FileArtifact artifact) { this.artifact = artifact; StreamReader reader = new StreamReader(); IncrementalElementReader packagedElementReader = new IncrementalElementReader(); reader.addStreamNodeListener(packagedElementReader); packagedElementReader.addValidationEventListener(this); packagedElementReader.addElementAssemblerEventListener(this); BasicElementReader modelElementReader = new BasicElementReader(); reader.addStreamNodeListener(modelElementReader); modelElementReader.addValidationEventListener(this); modelElementReader.addElementAssemblerEventListener(this); modelElementReader.addElementReaderEventListener(this); try { reader.read(new FileInputStream(artifact.getFile())); } catch (FileNotFoundException e) { throw new IOException(e); } } public void read(ResourceArtifact artifact) { this.artifact = artifact; StreamReader reader = new StreamReader(); IncrementalElementReader packagedElementReader = new IncrementalElementReader(); reader.addStreamNodeListener(packagedElementReader); packagedElementReader.addValidationEventListener(this); packagedElementReader.addElementAssemblerEventListener(this); BasicElementReader modelElementReader = new BasicElementReader(); reader.addStreamNodeListener(modelElementReader); modelElementReader.addValidationEventListener(this); modelElementReader.addElementAssemblerEventListener(this); modelElementReader.addElementReaderEventListener(this); reader.read(artifact.getInputStream()); } @Override public void validationError(ValidationErrorEvent event) { if (event.getError().getCode().ordinal() == ErrorCode.INVALID_REFERENCE.ordinal()) return; // we ignore these above if (event.getError().getSeverity().ordinal() == ErrorSeverity.FATAL.ordinal()) log.error("(" + this.artifact.getURN() + ") validation error " + event.getError().getText()); else if (event.getError().getSeverity().ordinal() == ErrorSeverity.WARN.ordinal()) log.warn("(" + this.artifact.getURN() + ") validation error " + event.getError().getText()); else if (event.getError().getSeverity().ordinal() == ErrorSeverity.INFO.ordinal()) log.info("(" + this.artifact.getURN() + ") validation error " + event.getError().getText()); else log.error("(" + this.artifact.getURN() + ") validation error " + event.getError().getText()); } }