package railo.runtime.tag;
import railo.runtime.PageContext;
import railo.runtime.exp.ApplicationException;
import railo.runtime.exp.PageException;
import railo.runtime.exp.SecurityException;
import railo.runtime.ext.tag.TagImpl;
import railo.runtime.functions.other.CreateObject;
import railo.runtime.net.proxy.ProxyData;
import railo.runtime.net.proxy.ProxyDataImpl;
import railo.runtime.security.SecurityManager;
/**
* Lets you call methods in COM, CORBA, and JAVA objects.
*
*
*
**/
public final class ObjectTag extends TagImpl {
/*
* Component
* - name
* - component
TODO support full functonallity
Component
-------------
name
component
Com
----------
type
action
class
name
context
server
Corba
--------------------
type
context
class
name
locale
Java
--------------------
type
action
class
name
Webservice
---------------------------
webservice
name
all
-------------
name
component
type
action
class
context
server
locale
webservice
*/
private String name;
private String component;
private String type="";
private String action;
private String clazz;
private String context;
private String server;
private String locale;
private String webservice;
private String delimiters=",";
private String username;
private String password;
private String proxyServer;
private int proxyPort;
private String proxyUser;
private String proxyPassword;
@Override
public void release() {
super.release();
name=null;
component=null;
type="";
action=null;
clazz=null;
context=null;
server=null;
locale=null;
webservice=null;
delimiters=",";
username=null;
password=null;
proxyServer=null;
proxyPort=-1;
proxyUser=null;
proxyPassword=null;
}
@Override
public int doStartTag() throws PageException {
if(component!=null) {
pageContext.setVariable(name,CreateObject.doComponent(pageContext,component));
}
else if(type.equals("java")) {
checkAccess(pageContext,type);
checkClass();
pageContext.setVariable(name,CreateObject.doJava(pageContext,clazz,context,delimiters));
}
else if(type.equals("com")) {
checkAccess(pageContext,type);
checkClass();
pageContext.setVariable(name,CreateObject.doCOM(pageContext,clazz));
}
else if(type.equals("webservice")) {
checkAccess(pageContext,type);
checkWebservice();
ProxyData proxy=null;
if(proxyServer!=null){
proxy=new ProxyDataImpl(proxyServer,proxyPort,proxyUser,proxyPassword);
}
pageContext.setVariable(name,CreateObject.doWebService(pageContext,webservice,username,password,proxy));
}
else {
if(type==null) throw new ApplicationException("to less attributes defined for tag object");
throw new ApplicationException("wrong value for attribute type",
"types are com,java,corba and the only supported type (at the moment) are com,component,java");
}
return SKIP_BODY;
}
private static void checkAccess(PageContext pc, String type) throws SecurityException {
if(pc.getConfig().getSecurityManager().getAccess(SecurityManager.TYPE_TAG_OBJECT)==SecurityManager.VALUE_NO)
throw new SecurityException("can't access tag [object] with type ["+type+"]",
"access is prohibited by security manager");
}
/**
* check if attribute class is defined
* @throws ApplicationException
*/
private void checkClass() throws ApplicationException {
if(clazz==null)throw new ApplicationException("attribute class must be defined");
}
/**
* check if attribute webservice is defined
* @throws ApplicationException
*/
private void checkWebservice() throws ApplicationException {
if(webservice==null)throw new ApplicationException("attribute webservice must be defined");
}
@Override
public int doEndTag() {
return EVAL_PAGE;
}
/**
* @param locale The locale to set.
*/
public void setLocale(String locale) {
this.locale = locale;
}
/**
* @param name The name to set.
*/
public void setName(String name) {
this.name = name;
}
/**
* @param server The server to set.
*/
public void setServer(String server) {
this.server = server;
}
/**
* @param type The type to set.
*/
public void setType(String type) {
this.type = type.toLowerCase().trim();
}
/**
* @param webservice The webservice to set.
*/
public void setWebservice(String webservice) {
this.type="webservice";
this.webservice = webservice;
}
/**
* @param action The action to set.
*/
public void setAction(String action) {
this.action = action;
}
/**
* @param clazz The clazz to set.
*/
public void setClass(String clazz) {
this.clazz = clazz;
}
/**
* @param component The component to set.
*/
public void setComponent(String component) {
this.component = component;
}
/**
* @param context The context to set.
*/
public void setContext(String context) {
this.context = context;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
/**
* @param proxyServer the proxyServer to set
*/
public void setProxyServer(String proxyServer) {
this.proxyServer = proxyServer;
}
/**
* @param proxyPort the proxyPort to set
*/
public void setProxyPort(double proxyPort) {
this.proxyPort = (int)proxyPort;
}
/**
* @param proxyUser the proxyUser to set
*/
public void setProxyUser(String proxyUser) {
this.proxyUser = proxyUser;
}
/**
* @param proxyPassword the proxyPassword to set
*/
public void setProxyPassword(String proxyPassword) {
this.proxyPassword = proxyPassword;
}
/**
* @param delimiters the delimiters to set
*/
public void setDelimiters(String delimiters) {
this.delimiters = delimiters;
}
}