package org.jboss.windup.rules.apps.java.scan.operation.packagemapping; import java.util.Map; import java.util.logging.Logger; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.graph.model.ArchiveModel; import org.jboss.windup.graph.model.resource.FileModel; import org.jboss.windup.graph.model.resource.IgnoredFileModel; import org.jboss.windup.graph.service.ArchiveService; import org.jboss.windup.graph.service.GraphService; import org.jboss.windup.graph.service.WindupConfigurationService; import org.jboss.windup.rules.apps.java.archives.model.IdentifiedArchiveModel; import org.jboss.windup.rules.apps.java.archives.model.IgnoredArchiveModel; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.util.wrappers.event.listener.GraphChangedListener; import org.jboss.windup.util.Logging; /** * {@link GraphChangedListener} responsible for identifying {@link ArchiveModel} instances based upon their contained package names. * * @author <a href="mailto:jesse.sightler@gmail.com">Jess Sightler</a> */ public class ArchivePackageNameIdentificationGraphChangedListener implements GraphChangedListener { private static Logger LOG = Logging.get(ArchivePackageNameIdentificationGraphChangedListener.class); private GraphRewrite event; public ArchivePackageNameIdentificationGraphChangedListener(GraphRewrite event) { this.event = event; } @Override public void vertexPropertyChanged(Vertex vertex, String key, Object oldValue, Object setValue) { try { if (ArchiveModel.ARCHIVE_NAME.equals(key)) { ArchiveService archiveService = new ArchiveService(event.getGraphContext()); ArchiveModel archive = archiveService.frame(vertex); // archive has already been identified, just ignore it if (archive instanceof IgnoredArchiveModel || archive instanceof IdentifiedArchiveModel) return; // check if it can be ignored as a vendor archive boolean exclusivelyKnown = PackageNameMapping.isExclusivelyKnownArchive(event, archive.getFilePath()); // If this is a file that the user specified as the input application, do not ignore it for (FileModel inputFile : WindupConfigurationService.getConfigurationModel(this.event.getGraphContext()).getInputPaths()) { if (inputFile.equals(archive)) exclusivelyKnown = false; } if (exclusivelyKnown) { IgnoredFileModel ignoredFileModel = new GraphService<>(event.getGraphContext(), IgnoredFileModel.class).addTypeToModel(archive); ignoredFileModel.setIgnoredRegex("3rd Party Archive"); new GraphService<>(event.getGraphContext(), IdentifiedArchiveModel.class).addTypeToModel(archive); } } } catch (Throwable t) { LOG.warning("Failed to check package name mapping due to: " + t.getMessage()); } } @Override public void vertexPropertyRemoved(Vertex vertex, String key, Object removedValue) { } @Override public void vertexAdded(Vertex vertex) { } @Override public void vertexRemoved(Vertex vertex, Map<String, Object> props) { } @Override public void edgeAdded(Edge edge) { } @Override public void edgePropertyChanged(Edge edge, String key, Object oldValue, Object setValue) { } @Override public void edgePropertyRemoved(Edge edge, String key, Object removedValue) { } @Override public void edgeRemoved(Edge edge, Map<String, Object> props) { } }