package com.bexp;
//import com.bexp.swing.*; //to assertain loose coupling - dont do it!
import org.JWrapper.*;
import org.JWrapper.util.*;
import com.bexp.ejb.*;
import java.util.*;
import java.io.*;
import javax.xml.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import static org.JWrapper.function.*;
public abstract class SDApp
implements ASSERT.Alerter
{
/** A map Class<-->EntityWrpSrc */
protected Map entities
= new HashMap();
public Map getEntitiesMap()
{ return entities; }
/** A map Class<-->JSimpleCompositeWrapper */
protected Map entity_wrp
= new HashMap();
public Map getEntityWrpMap()
{ return entity_wrp; }
/*
protected Vector startup_wizard_pages
= new Vector();
*/
/** wConfig should contain wOptions, but only wOptions should be editable explicitly,
* whereas wConfig should contain invisible config info to be saved.*/
protected JSimpleCompositeWrapper
startup_page = new JSimpleCompositeWrapper("Login info"),
wConfig = new JSimpleCompositeWrapper("config"),
wOptions = new JSimpleCompositeWrapper("Options"),
wTools = new JSimpleCompositeWrapper("Tools");
public JSimpleCompositeWrapper getWConfig()
{ return wConfig; }
static Properties langMap = new Properties();
public static Properties getLangMap()
{ return langMap; }
public static String translate(String in)
{ return langMap.getProperty(in,in); }
protected JSimpleDiscreteWrapper wLang
= new JSimpleDiscreteWrapper("Locale",
new JAccessAdapter(String.class)
{
String name;
public String get()
{return name;}
public void _set(String f) throws Exception
{
name = f;
//alert("loading "+name);//testing
getLangMap().clear();
getLangMap().loadFromXML(getClass().getClassLoader().getResourceAsStream("lang/"+name+".xml"));
}
});
/** Root node */
protected JSimpleCompositeWrapper wEntityStock;
protected JSimpleCompositeWrapper wMenu = new JSimpleCompositeWrapper("menu");
protected String username = "guest";
public String getUsername() { return username; }
public void setUsername(String str) { username=str; }
protected JScalarWrapper wUsername =
new JScalarWrapper("username",
new JBeanAccessAdapter(this,"Username"));
protected String password = "guest";
public String getPassword() { return password; }
public void setPassword(String str) { password=str; }
protected JScalarWrapper wPassword =
new org.JWrapper.util.JPasswordWrapper("password",
new JBeanAccessAdapter(this,"Password"));
protected String hostname = "localhost";
public String getHostname() { return hostname; }
public void setHostname(String str) { hostname=str; }
protected JScalarWrapper wHost =
new org.JWrapper.JScalarWrapper("host",
new JBeanAccessAdapter(this,"Hostname"));
protected String mail_event_command = "";
public String getMailEventCommand() { return mail_event_command; }
public void setMailEventCommand(String str) { mail_event_command=str; }
protected JScalarWrapper wMailEventCommand =
new JScalarWrapper("Mail Event Command",
new JBeanAccessAdapter(this,"MailEventCommand"));
JScalarWrapper HDCWPSw =
new JScalarWrapper("Table view load page size",
new JAccessAdapter(Integer.class)
{
public Integer get()
{ return JHomeDynamicCompositeWrapper.getPageSize(); }
public void _set(Integer ps)
{ JHomeDynamicCompositeWrapper.setPageSize(ps); }
});
public JScalarWrapper getHDCWPSWrp()
{ return HDCWPSw; }
JSimpleDiscreteWrapper createEventIgnored_w =
new JSimpleDiscreteWrapper("Ignore create event?",
new JAccessAdapter(Boolean.class)
{
public Boolean get()
{ return JHomeDynamicCompositeWrapper.getCreateEventIgnored(); }
public void _set(Boolean ignore)
{ JHomeDynamicCompositeWrapper.setCreateEventIgnored(ignore); }
});
protected boolean running;
public boolean isRunning()
{
return running;
}
//-----------------------
//~~~~~~~~~~~~~~~ CONSTRUCTOR:
public SDApp() throws Exception
{
//ASSERT.setAlerter(this);//bad idea? is 'this' constructed enough at this point?
wEntityStock = new JSimpleCompositeWrapper("");
startup_page.add( wUsername );
startup_page.add( wPassword );
wConfig.add(wOptions);
wOptions.add(HDCWPSw);
wOptions.add(createEventIgnored_w);
createEventIgnored_w.addObject(true, new JSimpleCompositeWrapper("true"));
createEventIgnored_w.addObject(false, new JSimpleCompositeWrapper("false"));
wOptions.add(wMailEventCommand);
wOptions.getUserFunctions()
.put("save",new UserFunction("Save Setup",wTools)
{
public void act() throws Exception
{
TransformerFactory transFactory = TransformerFactory.newInstance();
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
char[] config =
ObjSession
.getSession()
.getCurrentPerson()
.getConfig();
Document candidate = (config!=null)?
(
builder.parse(new InputSource(new CharArrayReader(
config)))
):null;
Document doc = org.JWrapper.util.DOMAdapter.createDocument(wConfig,candidate);
DOMSource dom_src = new DOMSource(doc);
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
//ByteArrayOutputStream os = new ByteArrayOutputStream();
CharArrayWriter sw = new CharArrayWriter();
StreamResult result
= new StreamResult(sw);
transformer.transform(dom_src,result);
sw.flush();
//os.flush();
//os.close();
com.bexp.ejb.Person.SDObj cperson = ObjSession.getSession().getCurrentPerson();
cperson.setConfig(sw.toCharArray());
cperson.save();
}
} );
JSimpleCompositeWrapper wSession = new JSimpleCompositeWrapper("Session");
wSession.getUserFunctions()
.put("connect",new UserFunction("Connect As",wSession)
{ public void act() throws Exception { run(); } } );
wSession.getUserFunctions()
.put("exit",new UserFunction("Exit",wSession)
{ public void act() { exit(); } } );
wMenu.add(wSession);
wTools.getUserFunctions()
.put("options",new UserFunction("Options",wTools)
{ public void act() throws Exception { edit(wOptions); } } );
wTools.getUserFunctions()
.put("run_gc",new UserFunction("Run Garbage Collector",wTools)
{ public void act() throws Exception
{
setWaitingState(true);
(new Thread(){public void run()
{
System.out.println("");
System.gc();
System.out.println("");
} }).start();
setWaitingState(false);
}
});
wTools.getUserFunctions()
.put("run_gc_s",new UserFunction("Run Server Garbage Collector",wTools)
{ public void act() throws Exception
{
setWaitingState(true);
System.out.println("");
ObjSession.getSession().runSGC();
System.out.println("");
setWaitingState(false);
}
});
wMenu.add(wTools);
JSimpleCompositeWrapper wHelp = new JSimpleCompositeWrapper("Help");
wHelp.getUserFunctions()
.put("help_about",new UserFunction("About",wHelp)
{ public void act() { alert("Business Experts Service Desk v3.9 Copyright 2006");} } );
wHelp.getUserFunctions()
.put("help",new UserFunction("Help",wHelp)
{ public void act() { showDocumentation();} } );
wMenu.add(wHelp);
//--- lang:
wOptions.add(wLang);
//wLang.addObject("",)
Properties locales = new Properties();
try
{
locales.loadFromXML(getClass().getClassLoader().getResourceAsStream("lang/locales.xml"));
} catch(Throwable th) {th.printStackTrace();}
for(Object key:locales.keySet())
{
String name = (String) key;
wLang.addObject(name,new JSimpleCompositeWrapper((String)locales.get(key)));
}
/*
File langDir = new File("lang");
File[] langFiles = langDir.listFiles(new FileFilter()
{public boolean accept(File f){return f.isFile();}});
for(File f : langFiles)
{
wLang.addObject(f,new JSimpleCompositeWrapper(f.getName().split("\\.")[0]));
}
*/
}
public abstract void showDocumentation();
/**
*
* should be overridden in subcless which wants to be non-interactive
*/
protected boolean isInteractive()
{ return true; }
/** A method called after the user supplied all info like
* username,password,hostname etc. */
public void run() throws Exception
{
System.out.println("");// debug
running = true;
ASSERT.setAlerter(this);
boolean keep_trying = true;
while(keep_trying)
try
{
SDDialog login_dlg = createDialog(startup_page,null,true);
final SDDialog DLG = login_dlg;
JAccessAdapter edit_result
= new JVarAccessAdapter(new Boolean(Boolean.FALSE));
final JAccessAdapter RESw = edit_result;
UserFunction
LogIn = new UserFunction("Log in",startup_page)
{
JAccessAdapter RESULT=RESw;
SDDialog DIALOG = DLG;
public void act() throws Exception
{ RESULT.set(true); DIALOG.close();}
},
Close = new UserFunction("Close",startup_page)
{
JAccessAdapter RESULT=RESw;
SDDialog DIALOG = DLG;
public void act() throws Exception
{ RESULT.set(false); DIALOG.close();}
};
startup_page.getUserFunctions().put("login",LogIn);
startup_page.getUserFunctions().put("close",Close);
login_dlg.open();
if(! edit_result.get().booleanValue())
if((!ObjSession.isConnected()))
{
System.out.println("++++++++++++ By! ++++++++++++++++");
exit();
if(!running) { return; }
} else { return; }
//this.edit(startup_page);
showWrapper(null);// clear show area if user said OK
ASSERT.setWaitingState(true);
ObjSession.connect(hostname,username,password);
keep_trying=false;
} catch(Throwable ex)
{
if(ex instanceof javax.naming.CommunicationException)
{ alert("Server unreachable.");ex.printStackTrace(); }
else if(ex instanceof javax.naming.NameNotFoundException)
{ alert("Server component not deployed."); }
else if(ex instanceof java.lang.NoClassDefFoundError)
{ alert("Server unreachable.");ex.printStackTrace(); }
else
{ alert(ex); }
keep_trying=this.confirm("Something goes wrong. Try again?");
if(!keep_trying) { exit(); }
}
finally
{ ASSERT.setWaitingState(false); }
//connected!
ObjSession.getSession().setClientSide(true);
ASSERT.setWaitingState(true);
//-----direct dir_tree->wrappers variant:
//
readSiteMap();
//
try
{
subscribeToMessages();
} catch(Exception ex) {alert(ex);}
try
{ wEntityStock.setName(username+"@"+hostname); }
catch(Exception ex) { ex.printStackTrace(); }
//
try
{
synchronized(this)
{
char[] config =
ObjSession
.getSession()
.getCurrentPerson()
.getConfig();
if(config!=null)
org.JWrapper.util.DOMAdapter
.fillWrapperFromXML(wConfig,new CharArrayReader(config));
}
} catch(Exception ex)
{
System.out.println("Reading config failed: "+ex);
ex.printStackTrace();
}
ASSERT.setWaitingState(false);
//
System.out.println("");// debug
}
protected void readSiteMap()
{
try
{
Document document;
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
//document = builder.parse(new File("sitemap.xml"));
document = builder.parse(this.getClass().getClassLoader()
.getResourceAsStream(this.getSitemapPath()));
System.out.println("document is "+document);
System.out.println(new BufferedReader(new InputStreamReader(this.getClass().getClassLoader()
.getResourceAsStream("sitemap.xml"))).readLine());
//root_node.add();
wEntityStock.removeAll();
JWrapper wXML = xml_to_wrappers((Element) document
.getDocumentElement(),"com.bexp");
//System.out.println("wXML is "+wXML);
wEntityStock.add(wXML);
//System.out.println(this.entities);//testing
//System.out.println(document.toString());//testing
for(EntityWrpSrc ews : entities.values())
{
JWrapper config = ews.getConfig();
if(config!=null) { wOptions.add(config); }
}
} catch(Exception ex) {alert(ex);}
}
public String getSitemapPath()
{ return "sitemap.xml"; }//this is the default, should be overridden if needed
private void subscribeToMessages() throws Exception
{
HomeEventProxy hproxy = ObjSession.getSession().getEventProxy(com.bexp.ejb.Message.SDObj.class);
hproxy.getRecvSignal().disconnect_all();
hproxy.getRecvSignal().connect(
new function1()
{
IObjHome msg_home = ObjSession.getSession().getHome(com.bexp.ejb.Message.SDObj.class);
public Void Op(ObjHomeEvent evt) throws Exception
{
if(evt.getEventID()==ObjHomeEvent.Changed)
{
com.bexp.ejb.Message.MessageEvent msg_evt
= (com.bexp.ejb.Message.MessageEvent) evt;
if(ObjSession.getSession().getCurrentPerson().getPK().equals(msg_evt.getRecipientPK()))
{
com.bexp.ejb.Message.SDObj message = msg_home.getObj(evt.getObjectPK());
if(message.getIsRead().booleanValue()==false)
{
alert("You have received a message." +
"You can read it in 'Message' section");
if((mail_event_command!=null)&&(mail_event_command.length()>0))
{
String cmd = mail_event_command.replace("",
message.getMsgBody().replaceAll("(\"[^\"]*)(\\s)([^\"]*\")", "\1\\s\3"));
String cmds[] = cmd.split("\\s");
for(int i=0; i()
{
EntityWrpSrc ews = EWS;
public EntityWrpSrc Op()
{return ews;}
}));//;ews.createChooserWrapper();
entities.put(ews.getEntityClass().getPackage(),ews);
if(result!=null)// i.e. if already there's something to return
{
//System.out.println("case 1");
entity_wrp.put(ews.getEntityClass().getPackage(),cwrp);
if(ews.visible()) { cwrp.add(WRP); }
}
else
{
//System.out.println("case 2");
if(ews.visible())
{
//System.out.println("case 2.0");
result = WRP;
//entity_wrp.put(ews.getEntityClass().getPackage(),result);
} else {/*System.out.println("case 2.1");*/result=null;} }
}//other cases like 'DefaultInfo.class' are ignored here
} catch(Exception ex) { /*ex.printStackTrace();*//*ignore*/; }//uncomment to debug
}
}
if(result!=null)
if(result instanceof JCompositeWrapper)
try
{
if(((JCompositeWrapper)result).size()==0) { result=null; }
} catch(Throwable th) { /*result=result*/ }
return result;
}
/**
* Stack of open dialogs
*/
protected Stack open_dialogs = new Stack();
/** Namely. Edit the Wrapper. Contains common logic.
* all UI-specific logic should be implemented in editWrapper in subclasses.
* Subject to change in future.*/
public final boolean edit(JWrapper wrp) throws Exception
{ return edit(wrp,true); }
public final boolean edit(JWrapper wrp, boolean modal) throws Exception
{
SDDialog parent_dlg = null;
try{ parent_dlg = open_dialogs.peek(); } catch(Exception ex) {}
SDDialog dlg = createDialog(wrp,parent_dlg, modal);
final SDDialog DLG = dlg;
JAccessAdapter edit_result
= new JVarAccessAdapter(new Boolean(Boolean.FALSE));
final JAccessAdapter RESw = edit_result;
UserFunction
Confirm = new UserFunction("confirm","OK",wrp)
{
JAccessAdapter RESULT=RESw;
SDDialog DIALOG = DLG;
public void act() throws Exception
{ RESULT.set(true); DIALOG.close();}
},
Cancel = new UserFunction("cancel","Cancel",wrp)
{
SDDialog DIALOG = DLG;
JAccessAdapter RESULT=RESw;
public void act() throws Exception
{ RESULT.set(false); DIALOG.close();}
};
/*
Map functions = wrp.getUserFunctions();
functions.put("confirm",Confirm);
functions.put("cancel",Cancel);
dlg.open();
functions.remove("confirm");
functions.remove("cancel");
*/
dlg.addUserFunction(Confirm);
dlg.addUserFunction(Cancel);
open_dialogs.push(dlg);
dlg.open();
open_dialogs.pop();
return edit_result.get().booleanValue();
}
/**look: edit(JWrapper)*/
protected abstract SDDialog createDialog(JWrapper wrp, SDDialog parent, boolean modal) throws Exception;
//protected abstract SDStockView createStockView(JWrapper wrp) throws Exception;
/** Displays somehow the wrapper in root window, for swing perhaps in 'right pane' */
//same as viewDCWrapper was made for?
public abstract void showWrapper(JWrapper wrp);
/** Alert method replacing ::alert(Object) in ASSERT.Alerter class*/
public void alert(Object subject)
{
System.out.println("-------------------------------");
System.out.println(subject);
if(subject instanceof Exception)
{
Exception ex = (Exception) subject;
if(ex instanceof SecurityException)
{System.out.println("------------- Access denied! -----------------");}
//((Exception)subject).printStackTrace();
System.out.println(ex.getCause());
}
System.out.println("-------------------------------");
}
/** Alert method replacing ::alert(Object,Object) in ASSERT.Alerter class*/
public void alert(Object src,Object subject)
{
alert(src.getClass().getName()+":\n");
alert(subject);
}
/** Show user a confirmation dialog with question str.
* Expected: 'yes' or 'no' */
public abstract boolean confirm(String str);
//stale
// subject to remove, but perhaps we'll need it?
/*
protected abstract void viewDCWrapper(JDynamicCompositeWrapper wrp);
protected abstract void viewDCWrapper
(JDiscreteWrapper dw);
*/
//stale
/** Like selectWrapper(JDiscreteWrapper<... ; another argument type */
public final JWrapper selectWrapper(JCompositeWrapper cw)
throws Exception
{
List result = selectWrappers(cw);
if(result.size()>1) { throw new Exception("Choose only one!"); }
if(result.size()==0) {return null;}
return result.get(0);
}
public abstract List selectWrappers(JCompositeWrapper cw)
throws Exception;
/** Subclesses should provide implementation of this method.
* Expected behaviour: ask user to pick up the :Wrapper -
* one of provided in passed parameter */
public final JWrapper selectWrapper
(JDiscreteWrapper dw)
throws Exception
{
List result = selectWrappers(dw);
if(result.size()>1) { throw new Exception("Choose only one!"); }
if(result.size()==0) {return null;}
return result.get(0);
}
public abstract List selectWrappers
(JDiscreteWrapper dw)
throws Exception;
public final JWrapper selectWrapperFromStock
(JCompositeWrapper cw)
throws Exception
{
List result = selectWrappersFromStock(cw);
if(result==null) {return null;}
if(result.size()==0) {return null;}
if(result.size()>1) { throw new Exception("Choose only one!"); }
return result.get(0);
}
public List selectWrappersFromStock(Class target_class)
throws Exception
{
JCompositeWrapper wStockSubtree = (target_class!=null)?entity_wrp.get(target_class.getPackage()):null;
List wrps = null;
if(wStockSubtree!=null)
{ wrps = selectWrappersFromStock(wStockSubtree); }
if(wrps==null)
{
System.out.println("@@@@@@@@@@ selecting...");
EntityWrpSrc e_src = getEntitiesMap()
.get(target_class.getPackage());
JDiscreteWrapper
chooser
= e_src.createChooserWrapper();
chooser.set_value(0);
wrps = selectWrappers(chooser);
}
return wrps;
}
public List selectWrappersFromStock(JCompositeWrapper cw)
throws Exception
{
final JAccessAdapter DLG_F
= new JVarAccessAdapter(null);
//final function0 DLG_F;
final JAccessAdapter>> wrp_selector
= new JVarAccessAdapter>>(null);
//final function0 wrp_selector;
JAccessAdapter> edit_result
= new JVarAccessAdapter>(null);
final JAccessAdapter> RESw = edit_result;
UserFunction
Confirm = new UserFunction("OK",cw)
{
JAccessAdapter DIALOG_F = DLG_F;
JAccessAdapter>> WRP_SELECTOR = wrp_selector;
JAccessAdapter> RESULT=RESw;
public void act() throws Exception
{ RESULT.set(wrp_selector.get().Op()); DIALOG_F.get().close();}
},
Cancel = new UserFunction("Cancel",cw)
{
JAccessAdapter DIALOG_F = DLG_F;
JAccessAdapter> RESULT=RESw;
public void act() throws Exception
{ RESULT.set(null); DIALOG_F.get().close();}
};
Map functions = cw.getUserFunctions();
functions.put("confirm",Confirm);
functions.put("cancel",Cancel);
Pair> > pair = getStockWrappersSelector(cw);
if(pair==null) { return null; }
SDDialog dlg = pair.get1st();
DLG_F.set(dlg);
wrp_selector.set(pair.get2nd());
open_dialogs.push(dlg);
dlg.open();
open_dialogs.pop();
functions.remove("confirm");
functions.remove("cancel");
System.out.print("Selected: "); System.out.println(edit_result.get());//debug
return edit_result.get();
}
protected abstract Pair> >
getStockWrappersSelector(JCompositeWrapper cw) throws Exception;
/** Provides deferred function call returnung
* something like ::edit(JWrapper) inside*/
public Collection getEditors(JWrapper _ewrp) throws Exception
{
Collection result = new LinkedList();
if(_ewrp instanceof JLeafWrapper)
{
final JLeafWrapper l_ewrp = (JLeafWrapper)_ewrp;
Class target_class = l_ewrp.getAccessAdapter().getTargetClass();
final Class target_class_ = target_class;
final EntityWrpSrc esrc = (target_class!=null)?entities.get(target_class.getPackage()):null;
final JCompositeWrapper wStockSubtree = (target_class!=null)?entity_wrp.get(target_class.getPackage()):null;
if(esrc!=null)
{
final function0 default_f;
if(wStockSubtree==null)
{
default_f = new function0()
{
JLeafWrapper lewrp = l_ewrp;
EntityWrpSrc e_src = esrc;
public Void Op() throws Exception
{
//new SingleWrapperTableView(this.);
JDiscreteWrapper
chooser
= e_src.createChooserWrapper();
chooser.set_value(0);
JWrapper wrp = selectWrapper(chooser);
if(wrp==null) {return null;}
JWrapper parent_wrp = wrp.getParent();
//assert (parent_wrp!=null) : "You have selected something wrong :) ";
//lewrp.setRawValue(chooser.getRawValue().getObjByWrapper(wrp));
if(parent_wrp==null) { throw new Exception("You have selected something wrong :) "); }
lewrp.setRawValue(((JHomeDynamicCompositeWrapper) parent_wrp).getHandleByWrapper(wrp).getObj());
return null;
}
};
}
else
default_f = new function0()
{
JLeafWrapper lewrp = l_ewrp;
//EntityWrpSrc e_src = esrc;
//JCompositeWrapper subtree = wStockSubtree;
Class target_class = target_class_;
public Void Op() throws Exception
{
JWrapper wrp = selectWrappersFromStock(target_class).get(0);
if(wrp==null) {return null;}
JWrapper parent_wrp = wrp.getParent();
if(parent_wrp==null) { throw new Exception("You have selected something wrong :) "); }
lewrp.setRawValue(((JHomeDynamicCompositeWrapper) parent_wrp)
.getHandleByWrapper(wrp).getObj());
return null;
}
};
UserFunction selector = new UserFunction("choose","Select",_ewrp)
{
JLeafWrapper lewrp = l_ewrp;
EntityWrpSrc e_src = esrc;
function0 _default_f = default_f;
public void act() throws Exception
{
if(lewrp.getRawValue()!=null)
{
JAccessAdapter aa = lewrp.getAccessAdapter();
JHomeDynamicCompositeWrapper dwrp;
if(aa instanceof ObjHandleAccessAdapter)
{
dwrp = esrc.createDefaultWrapper(
new SingleObjSrc(
new function0()
{
public ObjHandle Op() throws Exception
{return ((ObjHandleAccessAdapter)lewrp.getAccessAdapter()).getHandle();}
}
));
} else
{
dwrp = esrc.createDefaultWrapper(
new SingleObjSrc(
new function0()
{
public ObjHandle Op() throws Exception
{return new ObjHandle((Obj)lewrp.getRawValue(),true);}
}
));
}
show_single_wrapper(lewrp ,dwrp, _default_f);
dwrp.terminate();
} else
{
_default_f.Op();
}
//return null;
}
},
editor = new UserFunction("open","Edit",_ewrp)
{
JLeafWrapper lewrp = l_ewrp;
EntityWrpSrc e_src = esrc;
public void act() throws Exception
{
JAccessAdapter aa = lewrp.getAccessAdapter();
JHomeDynamicCompositeWrapper dcw;
if(aa instanceof ObjHandleAccessAdapter)
{
dcw = esrc.createDefaultWrapper(
new SingleObjSrc(
new function0()
{
public ObjHandle Op() throws Exception
{return ((ObjHandleAccessAdapter)lewrp.getAccessAdapter()).getHandle();}
}
));
} else
{
dcw = esrc.createDefaultWrapper(
new SingleObjSrc(
new function0()
{
public ObjHandle Op() throws Exception
{return new ObjHandle((Obj)lewrp.getRawValue(),true);}
}
));
}
dcw.edit(dcw.getWrapperByObj((Obj)lewrp.getRawValue()));
//return null;
}
};
final UserFunction editor_ = editor;
l_ewrp.getSignalChanged().connect(
new function0()
{
JLeafWrapper LW = l_ewrp;
UserFunction EDIT = editor_;
public Void Op() throws Exception
{
try{ EDIT.setIsEnabled(LW.getRawValue()!=null); }
catch(Exception ex) {}//do nothing
return null;
}
});
editor.setIsEnabled(l_ewrp.getRawValue()!=null);
//return f;
if(l_ewrp.getAccessAdapter().isRW()) { result.add(selector); }
result.add(editor);
}
}
else
if(_ewrp instanceof JDynamicCompositeWrapper)
{
final JDynamicCompositeWrapper dcw = (JDynamicCompositeWrapper) _ewrp;
UserFunction editor = new UserFunction("open","Edit",_ewrp)
{
JDynamicCompositeWrapper DCW = dcw;
public void act() throws Exception
{
edit(DCW);
}
};
result.add(editor);
}
//return null;//default
return result;
}
protected abstract void show_single_wrapper(
JLeafWrapper _ref_wrp,
JHomeDynamicCompositeWrapper _dcwrp,
function0 _edit_f
) throws Exception;
/** The means to provide user ability to run
* general-purpose 'use cases'(function points; right term?)
* of JWrapper class. Look: JWrapper::getUserFunctions() */
/*
public final java.util.Vector > getCommonFunctions(JWrapper wrp)
{
java.util.Vector > ret =
new java.util.Vector >(0);
if(wrp instanceof JLeafWrapper)
if(! (wrp instanceof JDiscreteWrapper))
if(((JLeafWrapper)wrp).getAccessAdapter()
.getTargetClass().isAssignableFrom(Obj.class))
{
final JLeafWrapper lw = (JLeafWrapper) wrp;
/**
if(lw.getAccessAdapter().getTargetClass()==com.bexp.ejb.BE.SDObj.class)
{
function0 selectFunction = new function0()
{
JLeafWrapper LW = lw;
public Void Op() throws Exception
{
DefaultBEWrapper bew =
new DefaultBEWrapper(defaultObjSrc);
JWrapper wrp = selectWrapper(bew);
if(wrp==null) {return null;}
LW.setRawValue(bew.getObjByWrapper(wrp));
return null;
}
};
ret.add(selectFunction);
}
else
if(lw.getAccessAdapter().getTargetClass()==OU.class)
{
function0 selectFunction = new function0()
{
JLeafWrapper LW = lw;
public Void Op() throws Exception
{
DefaultOUWrapper ouw =
new DefaultOUWrapper(defaultObjSrc);
JWrapper wrp = selectWrapper(ouw);
if(wrp==null) {return null;}
LW.setRawValue(ouw.getObjByWrapper(wrp));
return null;
}
};
ret.add(selectFunction);
}
}
return ret;
}
*/
}
|