blob: 3174a80d233c8e0d6370e71c775e7639922889f3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.j2ee.weblogic9.dd.model;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.netbeans.api.annotations.common.NullAllowed;
import org.netbeans.modules.j2ee.deployment.common.api.Version;
import org.netbeans.modules.schema2beans.AttrProp;
import org.netbeans.modules.schema2beans.NullEntityResolver;
import org.openide.util.NbBundle;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
/**
*
* @author Petr Hejl
*/
public final class EjbJarModel extends BaseDescriptorModel {
private static final Pattern SCHEMA_1031 = Pattern.compile("http://xmlns\\.oracle\\.com/weblogic/weblogic-ejb-jar/1\\.[0-2]/weblogic-ejb-jar\\.xsd"); // NOI18N
private static final Pattern SCHEMA_1211 = Pattern.compile("http://xmlns\\.oracle\\.com/weblogic/weblogic-ejb-jar/1\\.[3-5]/weblogic-ejb-jar\\.xsd"); // NOI18N
private static final Pattern SCHEMA_1221 = Pattern.compile("http://xmlns\\.oracle\\.com/weblogic/weblogic-ejb-jar/1\\.[6]/weblogic-ejb-jar\\.xsd"); // NOI18N
private final WeblogicEjbJar bean;
private EjbJarModel(WeblogicEjbJar bean) {
super(bean);
this.bean = bean;
}
public static EjbJarModel forFile(File file) throws IOException {
InputStream is = new BufferedInputStream(new FileInputStream(file));
try {
return forInputStream(is);
} finally {
is.close();
}
}
public static EjbJarModel forInputStream(InputStream is) throws IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(false);
Document doc;
try {
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setEntityResolver(NullEntityResolver.newInstance());
doc = builder.parse(is);
} catch (SAXException ex) {
throw new RuntimeException(NbBundle.getMessage(EjbJarModel.class, "MSG_CantCreateXMLDOMDocument"), ex);
} catch (ParserConfigurationException ex) {
throw new RuntimeException(NbBundle.getMessage(EjbJarModel.class, "MSG_CantCreateXMLDOMDocument"), ex);
}
String ns = doc.getDocumentElement().getNamespaceURI();
if ("http://xmlns.oracle.com/weblogic/weblogic-ejb-jar".equals(ns)) { // NOI18N
String value = doc.getDocumentElement().getAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation"); // NOI18N
if (SCHEMA_1031.matcher(value).matches()) {
return new EjbJarModel(org.netbeans.modules.j2ee.weblogic9.dd.ejb1031.WeblogicEjbJar.createGraph(doc));
} else if (SCHEMA_1211.matcher(value).matches()) {
return new EjbJarModel(org.netbeans.modules.j2ee.weblogic9.dd.ejb1211.WeblogicEjbJar.createGraph(doc));
} else if (SCHEMA_1221.matcher(value).matches()) {
return new EjbJarModel(org.netbeans.modules.j2ee.weblogic9.dd.ejb1221.WeblogicEjbJar.createGraph(doc));
} else {
return new EjbJarModel(org.netbeans.modules.j2ee.weblogic9.dd.ejb1221.WeblogicEjbJar.createGraph(doc));
}
} else if ("http://www.bea.com/ns/weblogic/weblogic-ejb-jar".equals(ns)) { // NOI18N
return new EjbJarModel(org.netbeans.modules.j2ee.weblogic9.dd.ejb1030.WeblogicEjbJar.createGraph(doc));
}
return new EjbJarModel(org.netbeans.modules.j2ee.weblogic9.dd.ejb90.WeblogicEjbJar.createGraph(doc));
}
public static EjbJarModel generate(@NullAllowed Version serverVersion) {
if (serverVersion != null) {
if (serverVersion.isAboveOrEqual(VERSION_12_2_1)) {
return generate1221();
} else if (serverVersion.isAboveOrEqual(VERSION_12_1_1)) {
return generate1211();
} else if (serverVersion.isAboveOrEqual(VERSION_10_3_1)) {
return generate1031();
} else if (serverVersion.isAboveOrEqual(VERSION_10_3_0)) {
return generate1030();
}
}
return generate90();
}
private static EjbJarModel generate90() {
org.netbeans.modules.j2ee.weblogic9.dd.ejb90.WeblogicEjbJar webLogicEjbJar = new org.netbeans.modules.j2ee.weblogic9.dd.ejb90.WeblogicEjbJar();
webLogicEjbJar.createAttribute("xmlns:j2ee", "xmlns:j2ee", AttrProp.CDATA | AttrProp.IMPLIED, null, null); // NOI18N
webLogicEjbJar.setAttributeValue("xmlns:j2ee", "http://java.sun.com/xml/ns/j2ee"); // NOI18N
webLogicEjbJar.setAttributeValue("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); // NOI18N
webLogicEjbJar.setAttributeValue("xsi:schemaLocation", "http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-ejb-jar.xsd"); // NOI18N
return new EjbJarModel(webLogicEjbJar);
}
private static EjbJarModel generate1030() {
org.netbeans.modules.j2ee.weblogic9.dd.ejb1030.WeblogicEjbJar webLogicEjbJar = new org.netbeans.modules.j2ee.weblogic9.dd.ejb1030.WeblogicEjbJar();
webLogicEjbJar.setAttributeValue("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); // NOI18N
webLogicEjbJar.setAttributeValue("xsi:schemaLocation", "http://www.bea.com/ns/weblogic/weblogic-ejb-jar http://www.bea.com/ns/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"); // NOI18N
return new EjbJarModel(webLogicEjbJar);
}
private static EjbJarModel generate1031() {
org.netbeans.modules.j2ee.weblogic9.dd.ejb1031.WeblogicEjbJar webLogicEjbJar = new org.netbeans.modules.j2ee.weblogic9.dd.ejb1031.WeblogicEjbJar();
webLogicEjbJar.setAttributeValue("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); // NOI18N
webLogicEjbJar.setAttributeValue("xsi:schemaLocation", "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"); // NOI18N
return new EjbJarModel(webLogicEjbJar);
}
private static EjbJarModel generate1211() {
org.netbeans.modules.j2ee.weblogic9.dd.ejb1211.WeblogicEjbJar webLogicEjbJar = new org.netbeans.modules.j2ee.weblogic9.dd.ejb1211.WeblogicEjbJar();
webLogicEjbJar.setAttributeValue("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); // NOI18N
webLogicEjbJar.setAttributeValue("xsi:schemaLocation", "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.3/weblogic-ejb-jar.xsd"); // NOI18N
return new EjbJarModel(webLogicEjbJar);
}
private static EjbJarModel generate1221() {
org.netbeans.modules.j2ee.weblogic9.dd.ejb1221.WeblogicEjbJar webLogicEjbJar = new org.netbeans.modules.j2ee.weblogic9.dd.ejb1221.WeblogicEjbJar();
webLogicEjbJar.setAttributeValue("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); // NOI18N
webLogicEjbJar.setAttributeValue("xsi:schemaLocation", "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.6/weblogic-ejb-jar.xsd"); // NOI18N
return new EjbJarModel(webLogicEjbJar);
}
public void setReference(String ejbName, String ejbType, String referenceName, String jndiName) {
WeblogicEnterpriseBeanType enterpriseBean = getWeblogicEnterpriseBean(ejbName);
for (ResourceDescriptionType type : enterpriseBean.getResourceDescription()) {
String refName = type.getResRefName();
if (referenceName.equals(refName)) {
type.setJndiName(jndiName);
return;
}
}
ResourceDescriptionType type = enterpriseBean.addResourceDescription();
type.setResRefName(referenceName);
type.setJndiName(jndiName);
}
public String getReferenceJndiName(String ejbName, String referenceName) {
WeblogicEnterpriseBeanType enterpriseBean = null;
for (WeblogicEnterpriseBeanType ejb : bean.getWeblogicEnterpriseBean()) {
if (ejbName.equals(ejb.getEjbName())) {
enterpriseBean = ejb;
break;
}
}
if (enterpriseBean == null) {
return null;
}
for (ResourceDescriptionType type : enterpriseBean.getResourceDescription()) {
String refName = type.getResRefName();
if (referenceName.equals(refName)) {
return type.getJndiName();
}
}
return null;
}
public String getDestinationJndiName(String mdbName) {
// TODO logical JMS destinations support ?
// http://download.oracle.com/docs/cd/E12840_01/wls/docs103/ejb/message_beans.html#wp1164140
WeblogicEnterpriseBeanType enterpriseBean = null;
for (WeblogicEnterpriseBeanType ejb : bean.getWeblogicEnterpriseBean()) {
if (mdbName.equals(ejb.getEjbName())) {
enterpriseBean = ejb;
break;
}
}
if (enterpriseBean == null) {
return null;
}
MessageDrivenDescriptorType descriptor = enterpriseBean.getMessageDrivenDescriptor();
if (descriptor != null) {
return descriptor.getDestinationJndiName();
}
return null;
}
private WeblogicEnterpriseBeanType getWeblogicEnterpriseBean(String name) {
for (WeblogicEnterpriseBeanType enterpriseBean : bean.getWeblogicEnterpriseBean()) {
if (name.equals(enterpriseBean.getEjbName())) {
return enterpriseBean;
}
}
WeblogicEnterpriseBeanType type = bean.addWeblogicEnterpriseBean();
type.setEjbName(name);
return type;
}
}