diff --git a/model/src/main/java/lcsb/mapviewer/model/LogMarker.java b/model/src/main/java/lcsb/mapviewer/model/LogMarker.java new file mode 100644 index 0000000000000000000000000000000000000000..90379cee6d8407b59733058f90a1f70661fe3427 --- /dev/null +++ b/model/src/main/java/lcsb/mapviewer/model/LogMarker.java @@ -0,0 +1,72 @@ +package lcsb.mapviewer.model; + +import org.apache.logging.log4j.Marker; + +import lcsb.mapviewer.common.exception.NotImplementedException; +import lcsb.mapviewer.model.map.BioEntity; + +public class LogMarker implements Marker { + + /** + * + */ + private static final long serialVersionUID = 1L; + + private ProjectLogEntry entry; + + public LogMarker(String type, BioEntity bioEntity) { + entry = new ProjectLogEntry(); + entry.setType(type); + if (bioEntity != null) { + entry.setObjectIdentifier(bioEntity.getElementId()); + entry.setObjectClass(bioEntity.getClass().getSimpleName()); + if (bioEntity.getModel() != null) { + entry.setMapName(bioEntity.getModel().getName()); + } + } + } + + @Override + public Marker addParents(Marker... markers) { + throw new NotImplementedException(); + } + + @Override + public String getName() { + throw new NotImplementedException(); + } + + @Override + public Marker[] getParents() { + throw new NotImplementedException(); + } + + @Override + public boolean hasParents() { + throw new NotImplementedException(); + } + + @Override + public boolean isInstanceOf(Marker m) { + throw new NotImplementedException(); + } + + @Override + public boolean isInstanceOf(String name) { + throw new NotImplementedException(); + } + + @Override + public boolean remove(Marker marker) { + throw new NotImplementedException(); + } + + @Override + public Marker setParents(Marker... markers) { + throw new NotImplementedException(); + } + + public ProjectLogEntry getEntry() { + return entry; + } +} diff --git a/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java b/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java index 77d6d229641f45b70c4dca91ab07c546d9cbade9..8cd0b748ae5fab040ed3df148f12905ce493f776 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java @@ -815,6 +815,9 @@ public abstract class Element implements BioEntity, Serializable, SbmlArgument { @XmlTransient @Override public Model getModel() { + if (model == null) { + return null; + } return model.getModel(); } diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java index 71c3000adc8a17b414489de9ea18cc4936f71695..c73e0e47c930c1eb9bf7fd973bb02f3e19bc4a7e 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java @@ -9,6 +9,7 @@ import javax.mail.MessagingException; import org.apache.commons.io.FileUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.LogEvent; import org.hibernate.HibernateException; import org.primefaces.model.DefaultTreeNode; import org.primefaces.model.TreeNode; @@ -22,7 +23,6 @@ import lcsb.mapviewer.annotation.services.annotators.ElementAnnotator; import lcsb.mapviewer.commands.*; import lcsb.mapviewer.common.*; import lcsb.mapviewer.common.exception.InvalidArgumentException; -import lcsb.mapviewer.common.exception.NotImplementedException; import lcsb.mapviewer.converter.*; import lcsb.mapviewer.converter.graphics.DrawingException; import lcsb.mapviewer.converter.graphics.MapGenerator; @@ -1167,8 +1167,31 @@ public class ProjectService implements IProjectService { return project; } - private Set<ProjectLogEntry> createLogEntries(MinervaLoggerAppender appender) { - throw new NotImplementedException(); + Set<ProjectLogEntry> createLogEntries(MinervaLoggerAppender appender) { + Set<ProjectLogEntry> result = new HashSet<>(); + for (LogEvent event : appender.getWarnings()) { + result.add(createLogEntry("WARNING", event)); + } + for (LogEvent event : appender.getErrors()) { + result.add(createLogEntry("ERROR", event)); + } + return result; + } + + private ProjectLogEntry createLogEntry(String severity, LogEvent event) { + ProjectLogEntry entry = null; + if (event.getMarker() != null) { + if (event.getMarker() instanceof LogMarker) { + entry = ((LogMarker) event.getMarker()).getEntry(); + } + } + if (entry==null) { + entry = new ProjectLogEntry(); + entry.setType("OTHER"); + } + entry.setSeverity(severity); + entry.setContent(event.getMessage().getFormattedMessage()); + return entry; } } diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java index 24281d4e6acb8b8932dd2c9bb7faf0fccbb0b6c5..12182db2512081e69a433abc5885d3d2490e0676 100644 --- a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java +++ b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java @@ -8,8 +8,9 @@ import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.*; +import org.apache.logging.log4j.core.impl.Log4jLogEvent; +import org.apache.logging.log4j.message.SimpleMessage; import org.apache.poi.util.IOUtils; import org.junit.*; import org.mockito.Mockito; @@ -18,20 +19,19 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.Rollback; import lcsb.mapviewer.commands.CopyCommand; +import lcsb.mapviewer.common.MinervaLoggerAppender; import lcsb.mapviewer.converter.ComplexZipConverter; import lcsb.mapviewer.converter.ComplexZipConverterParams; import lcsb.mapviewer.converter.graphics.MapGenerator; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser; import lcsb.mapviewer.converter.zip.*; -import lcsb.mapviewer.model.Project; -import lcsb.mapviewer.model.ProjectStatus; +import lcsb.mapviewer.model.*; import lcsb.mapviewer.model.cache.UploadedFileEntry; import lcsb.mapviewer.model.map.*; import lcsb.mapviewer.model.map.layout.DataOverlayImageLayer; import lcsb.mapviewer.model.map.layout.Layout; import lcsb.mapviewer.model.map.model.*; -import lcsb.mapviewer.model.map.species.Element; -import lcsb.mapviewer.model.map.species.Protein; +import lcsb.mapviewer.model.map.species.*; import lcsb.mapviewer.model.user.*; import lcsb.mapviewer.persist.dao.ProjectDao; import lcsb.mapviewer.persist.dao.map.LayoutDao; @@ -657,4 +657,29 @@ public class ProjectServiceTest extends ServiceTestFunctions { assertEquals(ProjectStatus.FAIL, project.getStatus()); projectService.removeProject(project, null, false); } + + @Test + public void testCreateLogEntries() throws Exception { + Protein protein = new GenericProtein("id"); + MinervaLoggerAppender appender = MinervaLoggerAppender.createAppender(); + appender.append(Log4jLogEvent.newBuilder() + .setLevel(Level.WARN) + .setMessage(new SimpleMessage("Hello world")) + .setMarker(new LogMarker("type", protein)) + .build()); + appender.append(Log4jLogEvent.newBuilder() + .setLevel(Level.ERROR) + .setMessage(new SimpleMessage("Hello world 2")) + .setMarker(new LogMarker("type2", protein)) + .build()); + appender.append(Log4jLogEvent.newBuilder() + .setLevel(Level.ERROR) + .setMessage(new SimpleMessage("Hello world 3")) + .build()); + + ProjectService service = Mockito.mock(ProjectService.class, Mockito.CALLS_REAL_METHODS); + Set<ProjectLogEntry> entries = service.createLogEntries(appender); + assertEquals(3, entries.size()); + } + }