Hi Igor,

I have moved a bit forward since the last email but would like your thoughts
on it. I am now able to render the top level tab from
t*est-application-1*and test-application-2. This is after I resolved
the Wicket Runtime
Exception.

Now going forward, this is how I fire the classes that provide the
application tabs from the container application

On the HomePage of the Container Application (for example)

I instantiate the sub-application's tabs.

 StudyTab appStudy = new StudyTab("App1Tab");
 add(appStudy);

 SubjectTab appParticipants = new SubjectTab("App2Tab");
 add(appParticipants);

The homepage.html contains a reference to the components App1Tab and App2Tab

<div wicket:id="App1Tab"></div>
<div wicket:id="App2Tab"></div>

So I can see that each sub-application is contributing to the top level
(container) menu's. Thus abstracting the details to each sub application. I
am yet to render the sub-menus for each application but I guess that is easy
since its within the context of each sub application.

1. I would like to get some confirmation if I am on the right path and is
this how I should fire the sub-application's entry level tabs?
2. Is there a better way ?
3. Would like to post another question related to application context as
part of sub-applications? How would application 1..n have reference to the
application context? I guess will try to work it from my side in the
meantime.

Please let me know on #1 and #2 and if I have not deviated.

Many thanks
Regards
Niv



On Thu, Jun 17, 2010 at 4:21 PM, Nivedan Nadaraj <shravann...@gmail.com>wrote:

> Hi Igor,
>
> I have started work on the pattern you suggested. This is what I have done
> so far but  there seems to be some missing pieces when I integrate the tabs
> or try to fire them from container app, would be great to get some lead
> here.
>
> The Structure of the projects as follows.
> *
> Project: test-common
> Description: Will provide common interfaces that sub applications can use.
> One of them would be the CreateAppTab interface.
> *Interface to create a new tab, goes like this.
> *
> public ITab createAppTab();*
>
> Using maven POM I have marked it to be built  into a *.jar* file.The built
> jar is available in the local maven repository so other applications can
> refer to it.
>
>
> *Project: test-container
> Description: Will be the base application that will contain
> sub-applications.*
>
> This has the WebApplication and also a Sub-classed Web Application. As Part
> of its POM, I have added *test-common* as a dependency.
> I build this project as a .*WAR *file. As part of its *WEB-INF/lib*, I
> find the* test-common.jar*
> At this point it satisfies the requirements of a Container Application that
> contains the module(jar) as part of it.( Please correct me if I have
> deviated)
>
> *Project:test-application-1*
> *Description: Will be one of the applications. Provides Tab(s) that will
> be associated with this app.* *Project will be built as a .jar*
>
> I do not have a Web Application as part of this project. I include a
> dependency to* test-common.jar* in test-application-1's POM. (Since I
> thought adding dependency to test-container.war did not seem sensible,
> correct me if I am wrong.)  One of the panel class in this application
> implements the test-common's createAppTab interface and add's the returned
> ITab instance into a List. The List<ITab> is added into an instance of
> TabbedPanel. The instance of TabbedPanel is added into the Panel. I have a
> corresponding basic markup for this Panel class.
>
> *Re-Visit test-container*
> I modified the test-container's POM to include test-application-1 as a
> dependency(jar) and built it into a .WAR. The war now contains two jars 
> *test-common.jar
> and **test-application-1.jar
> Is this build strategy acceptable? In one build, able to include the
> dependent application's jar's into one single WAR.
>
> Doubts:*
>
> 1. I need to know how these individual applications/plugins will be fired
> to render the tabs (create an instance of the tabs) from the test-container.
> when the application is started on lands on the Home Page for instance?
>
>
> [On a side note what I did try on those lines was I created an instance  of
> the sub-application's class that implemented the Tab Interface and added it
> to the home page instance.
> As in..
> App1Tab tab1 = new App1Tab("someTab"); //This would fire the constructor
> and create the tab instances
> add(tab1);
>
> This was not a success, as it comes up with a Wicket runtime exception
>
> ITab.getPanel() returned a panel with invalid id [studyPanel]. You must 
> always return a panel with id equal to the provided panelId parameter.
>
> TabbedPanel [8:stab:moduleTabsList] ITab index [0]
> ]
>
>
> Thanks for the time, will be great to hear from you on this.
>
> Regards
> Niv
>
>
>
>
>
>
>
> On Thu, Jun 10, 2010 at 11:46 AM, Igor Vaynberg 
> <igor.vaynb...@gmail.com>wrote:
>
>> On Wed, Jun 9, 2010 at 8:20 PM, Nivedan Nadaraj <shravann...@gmail.com>
>> wrote:
>> > Hi Igor,
>> >
>> > Thank you for the quick response and what a ray of hope it brings! It
>> > certainly, from  your experience seems to be a very good design
>> approach. I
>> > am excited to implement it.
>> >
>> > The question(s)/confirmation at this point in time is :
>> >
>> > 1.Will Application 2..(n)  ever extend the sub-class Web Application
>> > provided by the Container Application? [I guess not, since Application-2
>> > needs to be built as a jar and packaged with Container-Application's
>> WAR.
>> > Which means sub application's (jars) will all be part of a Single Wicket
>> > Application instance] (Am I right?)
>>
>> correct, since 2..n are plugins rather then applications they do not
>> need their own application class.
>>
>> > 2. The Tab Provider Interface you mentioned that would be part of the
>> common
>> > jar in Container-Application; would that be a class like
>> > org.apache.wicket.extensions.markup.html.tabs.AbstractTab ? This is what
>> I
>> > have used at the moment.
>>
>> sure, that will work. usually i have something like this
>>
>> public interface MainTabProvider { ITab newMainTab(); }
>>
>> followed by
>>
>> public interface ApplicationPlugin extends TabProvider, .. bunch of
>> other interfaces
>>
>> -igor
>> >
>> > Appreciate your time. Glad to be using the right framework and not have
>> to
>> > switch to another framework.
>> >
>> > Many thanks
>> > Regards
>> >
>> >
>> >
>> >
>> >
>> > On Wed, Jun 9, 2010 at 10:44 PM, Igor Vaynberg <igor.vaynb...@gmail.com
>> >wrote:
>> >
>> >> ive done this many times already, wicket is perfect for things like
>> these.
>> >>
>> >> application 1 should be a simple wicket container app. this is a full
>> >> application with its own subclass of WicketApplication and is what is
>> >> going to be packaged as a war file. it should also have a module (jar)
>> >> with the interfaces for the common services it provides and a way to
>> >> retrieve those interfaces.
>> >>
>> >> application 2 should be a jar file which contains all the necessary
>> >> wicket artifacts such as pages. one of the things in it should be
>> >> something that implements a "tabprovider" interface defined in
>> >> application 1's common jar. the tabprovider would return a tab that
>> >> contains a panel from application 2, this panel would act as the entry
>> >> point into the application.
>> >>
>> >> the only other question is now packaging and deployment. the easiest
>> >> way is to take the jar from application 2 and package it into
>> >> application 1 as part of the war file. a trickier way to do it is to
>> >> have a classloader that can look in some external folder and load from
>> >> all the jars there, this external folder would contain the jars for
>> >> application 2...n.
>> >>
>> >> -igor
>> >>
>> >> On Wed, Jun 9, 2010 at 7:11 AM, Nivedan Nadaraj <shravann...@gmail.com
>> >
>> >> wrote:
>> >> > Hi All,
>> >> >
>> >> > I will try to articulate my requirement. Can I call it a Wicket based
>> >> > Portal?
>> >> >
>> >> > I have an application lets call it Application-1  that provides
>> common
>> >> > functionality such as Authentication/Authorization. It also will
>> provide
>> >> the
>> >> > Business layer/Service methods.
>> >> > As part of this web application, it builds the the TOP level tab
>> menus.
>> >> Each
>> >> > of the tab menu will represent a related business application. There
>> is
>> >> one
>> >> > single entry point to the whole application suite.
>> >> >
>> >> > Now, I want to build one of the related business
>> >> application(Application-2)
>> >> > using Wicket, Hibernate etc and inherit the common functionality
>> provided
>> >> by
>> >> > Application-1. However, I want to provide/or add to the Tab menu
>> provided
>> >> by
>> >> > Application-1 and integrate with it. As part of Application-1, I want
>> to
>> >> be
>> >> > able to provide Tab1. And as part of Appication-2, I want to be able
>> to
>> >> > provide Tab2.
>> >> >
>> >> > So when I eventually build the whole application suite, I must be
>> able to
>> >> > enable/disable a particular application tab or access to an
>> application
>> >> > through some business rules (License) etc. Also it should give me the
>> >> > flexibility to
>> >> > maintain each module/application independently and allow me to deploy
>> a
>> >> > particular module for a client.
>> >> >
>> >> > It is pretty critical that  I have a good solution that gives a
>> >> reasonable
>> >> > amount of flexibility. I am sure you must have come across such
>> >> > requirements, more like a portal. Only, I have to build it using
>> Wicket.
>> >> > Just so you are aware this is the set up for the project.
>> >> >
>> >> > Web Tier: Wicket with Wiquery
>> >> > Security: Apache Shiro
>> >> > Service Tier: Spring
>> >> > Model/Persistence: Hibernate/Spring LDAP
>> >> > Servlet Engine: Tomcat
>> >> >
>> >> > Would be great to hear some pattern I can follow and references if
>> any
>> >> that
>> >> > can serve as a start-up. Any thoughts/experience from your end would
>> be
>> >> > great and valuable.
>> >> >
>> >> > Some doubts that lurks in my mind.
>> >> >
>> >> > 1. Does Application-2 need to have a Wicket Application .i.e need to
>> >> extend
>> >> > a Wicket Application? Makes sense if I want to deploy it as a
>> stand-alone
>> >> > one.But If i want to integrate and use the set up as part of
>> >> Application-1,
>> >> > should I build the project without a Wicket Applications?
>> >> >
>> >> > 2. How does Application- 2 render the Tabs and integrate with
>> >> Application-1
>> >> > that does not know/aware of its child projects?
>> >> >
>> >> > 3. As an alternative, I can build application-2 as part of
>> application-1.
>> >> > The downside is, when a client wants only few modules, I would need
>> to
>> >> build
>> >> > and package the whole suite.This is my last resort but sure your
>> thoughts
>> >> > will make a difference.
>> >> >
>> >> > Appreciate your thoughts and time,
>> >> >
>> >> > Many thanks
>> >> > Nivedan
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> >> For additional commands, e-mail: users-h...@wicket.apache.org
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>>
>

Reply via email to