package org.jboss.windup.rules.apps.javaee.service; import org.apache.commons.lang3.StringUtils; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.graph.model.ProjectModel; import org.jboss.windup.graph.service.GraphService; 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.JmsConnectionFactoryModel; import org.jboss.windup.rules.apps.javaee.model.JmsDestinationModel; import org.jboss.windup.rules.apps.javaee.model.JmsDestinationType; import java.util.Set; /** * Contains methods for querying, updating, and deleting {@link JNDIResourceModel} * * @author <a href="mailto:bradsdavis@gmail.com">Brad Davis</a> * */ public class JNDIResourceService extends GraphService<JNDIResourceModel> { public JNDIResourceService(GraphContext context) { super(context, JNDIResourceModel.class); } /** * Create unique; if existing convert an existing {@link JNDIResourceModel} if one exists. */ public synchronized JNDIResourceModel createUnique(Set<ProjectModel> applications, String jndiName) { JNDIResourceModel jndiResourceModel = getUniqueByProperty(JNDIResourceModel.JNDI_LOCATION, jndiName); if (jndiResourceModel == null) { jndiResourceModel = super.create(); jndiResourceModel.setJndiLocation(jndiName); jndiResourceModel.setApplications(applications); } else { for (ProjectModel application : applications) { if (!jndiResourceModel.isAssociatedWithApplication(application)) jndiResourceModel.addApplication(application); } } return jndiResourceModel; } /** * Associate a type with the given resource model. */ public void associateTypeJndiResource(JNDIResourceModel resource, String type) { if (type == null || resource == null) { return; } if (StringUtils.equals(type, "javax.sql.DataSource") && !(resource instanceof DataSourceModel)) { DataSourceModel ds = GraphService.addTypeToModel(this.getGraphContext(), resource, DataSourceModel.class); } else if (StringUtils.equals(type, "javax.jms.Queue") && !(resource instanceof JmsDestinationModel)) { JmsDestinationModel jms = GraphService.addTypeToModel(this.getGraphContext(), resource, JmsDestinationModel.class); jms.setDestinationType(JmsDestinationType.QUEUE); } else if (StringUtils.equals(type, "javax.jms.QueueConnectionFactory") && !(resource instanceof JmsConnectionFactoryModel)) { JmsConnectionFactoryModel jms = GraphService.addTypeToModel(this.getGraphContext(), resource, JmsConnectionFactoryModel.class); jms.setConnectionFactoryType(JmsDestinationType.QUEUE); } else if (StringUtils.equals(type, "javax.jms.Topic") && !(resource instanceof JmsDestinationModel)) { JmsDestinationModel jms = GraphService.addTypeToModel(this.getGraphContext(), resource, JmsDestinationModel.class); jms.setDestinationType(JmsDestinationType.TOPIC); } else if (StringUtils.equals(type, "javax.jms.TopicConnectionFactory") && !(resource instanceof JmsConnectionFactoryModel)) { JmsConnectionFactoryModel jms = GraphService.addTypeToModel(this.getGraphContext(), resource, JmsConnectionFactoryModel.class); jms.setConnectionFactoryType(JmsDestinationType.TOPIC); } } }