001    /**
002     * Copyright 2010 The Kuali Foundation Licensed under the
003     * Educational Community License, Version 2.0 (the "License"); you may
004     * not use this file except in compliance with the License. You may
005     * obtain a copy of the License at
006     *
007     * http://www.osedu.org/licenses/ECL-2.0
008     *
009     * Unless required by applicable law or agreed to in writing,
010     * software distributed under the License is distributed on an "AS IS"
011     * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
012     * or implied. See the License for the specific language governing
013     * permissions and limitations under the License.
014     */
015    
016    package org.kuali.student.lum.lu.ui.main.client;
017    
018    
019    import org.kuali.student.common.messages.dto.MessageList;
020    import org.kuali.student.common.ui.client.application.Application;
021    import org.kuali.student.common.ui.client.application.ApplicationContext;
022    import org.kuali.student.common.ui.client.application.KSAsyncCallback;
023    import org.kuali.student.common.ui.client.mvc.Controller;
024    import org.kuali.student.common.ui.client.mvc.breadcrumb.BreadcrumbManager;
025    import org.kuali.student.common.ui.client.mvc.history.HistoryManager;
026    import org.kuali.student.common.ui.client.service.MessagesRpcService;
027    import org.kuali.student.common.ui.client.service.SecurityRpcService;
028    import org.kuali.student.common.ui.client.service.SecurityRpcServiceAsync;
029    import org.kuali.student.common.ui.client.util.BrowserUtils;
030    import org.kuali.student.common.ui.client.util.WindowTitleUtils;
031    import org.kuali.student.common.ui.client.widgets.ApplicationPanel;
032    import org.kuali.student.common.ui.client.widgets.KSFooter;
033    import org.kuali.student.lum.common.client.widgets.AppLocations;
034    import org.kuali.student.lum.lu.ui.main.client.controllers.ApplicationController;
035    import org.kuali.student.lum.lu.ui.main.client.theme.LumTheme;
036    import org.kuali.student.lum.lu.ui.main.client.widgets.ApplicationHeader;
037    
038    import com.google.gwt.core.client.EntryPoint;
039    import com.google.gwt.core.client.GWT;
040    import com.google.gwt.dom.client.StyleInjector;
041    import com.google.gwt.user.client.rpc.SerializationException;
042    import com.google.gwt.user.client.rpc.SerializationStreamFactory;
043    import com.google.gwt.user.client.rpc.SerializationStreamReader;
044    
045    public class LUMMainEntryPoint implements EntryPoint{
046    
047        private ApplicationController manager = null;
048        private AppLocations locations = new AppLocations();
049        private ApplicationHeader header = GWT.create(ApplicationHeader.class);
050        @Override
051        public void onModuleLoad() {
052            final ApplicationContext context = Application.getApplicationContext();
053    
054            final String injectString = LumTheme.INSTANCE.getLumCss().getCssString();
055            StyleInjector.injectStylesheet(injectString);   
056    
057            try {
058                loadMessages(context);                    
059                loadApp(context);
060            } catch (Exception e) {
061                GWT.log("Error loading entrypoint", e);
062            } 
063        }
064    
065        private void initScreen(){
066            manager = new ApplicationController("KualiStudent", header);
067            WindowTitleUtils.setApplicationTitle(Application.getApplicationContext().getMessage("applicationName"));
068            ApplicationPanel.get().add(manager);
069            ApplicationPanel.get().add(new KSFooter());
070            HistoryManager.bind(manager, locations);
071            BreadcrumbManager.bind(manager);
072            HistoryManager.processWindowLocation();
073            if(manager.getCurrentView() == null)
074                manager.showDefaultView(Controller.NO_OP_CALLBACK);
075            header.setHeaderTitle(Application.getApplicationContext().getMessage("applicationTitleLabel"));
076        }
077        
078        private void loadMessages(final ApplicationContext context) throws SerializationException {
079            MessageList commonMessageList =  getMsgSerializedObject("commonMessages" );
080            MessageList lumMessageList =  getMsgSerializedObject("luMessages" );
081            context.addMessages(commonMessageList.getMessages());
082            context.addMessages(lumMessageList.getMessages());
083        }
084    
085        @SuppressWarnings("unchecked")
086        public  <T> T getMsgSerializedObject(String key ) throws SerializationException
087        {
088            String serialized = BrowserUtils.getString( key );
089            SerializationStreamFactory ssf = GWT.create( MessagesRpcService.class); // magic
090            SerializationStreamReader ssr = ssf.createStreamReader( serialized );
091            T ret = (T)ssr.readObject();
092            return ret;
093        } 
094          
095        public void loadApp(final ApplicationContext context){
096            SecurityRpcServiceAsync securityRpc = GWT.create(SecurityRpcService.class);
097            
098            securityRpc.getPrincipalUsername(new KSAsyncCallback<String>(){
099                public void handleFailure(Throwable caught) {
100                    context.setUserId("Unknown");
101                    initScreen();
102                }
103    
104                @Override
105                public void onSuccess(String principalId) {
106                    context.setUserId(principalId);
107                    initScreen();
108                }            
109            });
110        }
111    
112    }