package org.jboss.windup.rules.apps.javaee.rules; import org.apache.commons.lang3.StringUtils; import org.jboss.windup.config.AbstractRuleProvider; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.loader.RuleLoaderContext; import org.jboss.windup.config.metadata.RuleMetadata; import org.jboss.windup.config.operation.GraphOperation; import org.jboss.windup.config.phase.PreReportGenerationPhase; import org.jboss.windup.config.query.Query; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.graph.model.LinkModel; import org.jboss.windup.graph.service.GraphService; import org.jboss.windup.graph.service.LinkService; import org.jboss.windup.reporting.model.association.LinkableModel; import org.jboss.windup.rules.apps.javaee.model.DataSourceModel; import org.jboss.windup.rules.apps.javaee.model.JNDIResourceModel; import org.jboss.windup.rules.apps.javaee.model.JmsDestinationModel; import org.jboss.windup.rules.apps.javaee.model.ThreadPoolModel; import org.jboss.windup.rules.apps.javaee.service.JNDIResourceService; import org.ocpsoft.rewrite.config.ConditionBuilder; import org.ocpsoft.rewrite.config.Configuration; import org.ocpsoft.rewrite.config.ConfigurationBuilder; import org.ocpsoft.rewrite.context.EvaluationContext; /** * Links server resources (datasources, jms, etc) to EAP 6 resource setup documentation */ @RuleMetadata(phase = PreReportGenerationPhase.class, id = "Resolve Links to Server Documentation") public class ResolveServerResourceLinksRuleProvider extends AbstractRuleProvider { @Override public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext) { return ConfigurationBuilder.begin() .addRule() .when(when()) .perform(new GraphOperation() { @Override public void perform(GraphRewrite event, EvaluationContext context) { processServerResources(event.getGraphContext()); } @Override public String toString() { return "ResolveServerResourceLinksRule"; } }); } protected ConditionBuilder when() { return Query.fromType(JNDIResourceModel.class).or(Query.fromType(ThreadPoolModel.class)); } protected void processServerResources(GraphContext context) { JNDIResourceService jndiService = new JNDIResourceService(context); GraphService<ThreadPoolModel> threadPoolService = new GraphService<>(context, ThreadPoolModel.class); for(JNDIResourceModel model : jndiService.findAll()) { processJndiResource(context, model); } for(ThreadPoolModel model : threadPoolService.findAll()) { processThreadPool(context, model); } } protected void processJndiResource(GraphContext context, JNDIResourceModel payload) { if (payload instanceof DataSourceModel) { processDataSource(context, (DataSourceModel) payload); } else if (payload instanceof JmsDestinationModel) { processJMSDestination(context, (JmsDestinationModel) payload); } } private void processJMSDestination(GraphContext context, JmsDestinationModel destination) { LinkService linkService = new LinkService(context); LinkableModel linkable = GraphService.addTypeToModel(context, destination, LinkableModel.class); LinkModel jmsDestinationLink = linkService .getOrCreate( "Destination Setup", "https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/sect-Configuration1.html"); linkable.addLink(jmsDestinationLink); } private void processThreadPool(GraphContext context, ThreadPoolModel threadPool) { LinkService linkService = new LinkService(context); LinkableModel linkable = GraphService.addTypeToModel(context, threadPool, LinkableModel.class); LinkModel jmsDestinationLink = linkService .getOrCreate( "Thread Pool Setup", "https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/sect-Configuring_EJB_Thread_Pools.html"); linkable.addLink(jmsDestinationLink); } private void processDataSource(GraphContext context, DataSourceModel dataSource) { LinkService linkService = new LinkService(context); LinkableModel linkable = GraphService.addTypeToModel(context, dataSource, LinkableModel.class); if (StringUtils.equals("Oracle", dataSource.getDatabaseTypeName())) { LinkModel eap6OracleLink = linkService .getOrCreate( "Oracle DataSource Setup", "https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/sect-Example_Datasources.html#Example_Oracle_Datasource"); linkable.addLink(eap6OracleLink); } else if (StringUtils.equals("MySQL", dataSource.getDatabaseTypeName())) { LinkModel lnk = linkService .getOrCreate( "MySQL DataSource Setup", "https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/sect-Example_Datasources.html#Example_MySQL_Datasource1"); linkable.addLink(lnk); } else if (StringUtils.equals("Postgres", dataSource.getDatabaseTypeName())) { LinkModel lnk = linkService .getOrCreate( "Postgres DataSource Setup", "https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/sect-Example_Datasources.html#Example_PostgreSQL_Datasource1"); linkable.addLink(lnk); } else if (StringUtils.equals("SqlServer", dataSource.getDatabaseTypeName())) { LinkModel lnk = linkService .getOrCreate( "SqlServer DataSource Setup", "https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/sect-Example_Datasources.html#Example_Microsoft_SQLServer_Datasource1"); linkable.addLink(lnk); } else if (StringUtils.equals("DB2", dataSource.getDatabaseTypeName())) { LinkModel lnk = linkService .getOrCreate( "DB2 DataSource Setup", "https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/sect-Example_Datasources.html#Example_IBM_DB2_Datasource"); linkable.addLink(lnk); } else if (StringUtils.equals("Sybase", dataSource.getDatabaseTypeName())) { LinkModel lnk = linkService .getOrCreate( "Sybase DataSource Setup", "https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/sect-Example_Datasources.html#Example_Sybase_Datasource"); linkable.addLink(lnk); } LinkModel eap6Link = linkService .getOrCreate( "DataSource Documentation", "https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/chap-Datasource_Management.html"); linkable.addLink(eap6Link); } }