Package nextapp.echo2.testapp.serial

Source Code of nextapp.echo2.testapp.serial.SerialApp

/*
* This file is part of the Echo Web Application Framework (hereinafter "Echo").
* Copyright (C) 2002-2009 NextApp, Inc.
*
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*/

package nextapp.echo2.testapp.serial;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Enumeration;

import javax.servlet.http.HttpSession;

import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.Border;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.ListBox;
import nextapp.echo2.app.Window;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.list.DefaultListModel;
import nextapp.echo2.testapp.interactive.InteractiveApp;
import nextapp.echo2.webcontainer.ContainerContext;
import nextapp.echo2.webrender.UserInstance;

public class SerialApp extends ApplicationInstance {
   
    private ListBox listBox;
    private Window mainWindow;
   
    private void doLoad() {
        try {
            String fileName = "session.data";
            FileInputStream fis = new FileInputStream(fileName);
            ObjectInputStream ois = new ObjectInputStream(fis);
            String sessionKey = (String) ois.readObject();
            UserInstance userInstance = (UserInstance) ois.readObject();
            getSession().setAttribute(sessionKey, userInstance);
            ois.close();
            fis.close();
            showDialog(false, sessionKey + " loaded successfully.");
        } catch (ClassNotFoundException ex) {
            showDialog(true, "Exception occurred: " + ex);
            ex.printStackTrace();
        } catch (IOException ex) {
            showDialog(true, "Exception occurred: " + ex);
            ex.printStackTrace();
        }
    }

    private void doRefresh() {
        DefaultListModel listModel = (DefaultListModel) listBox.getModel();
        listModel.removeAll();
        Enumeration enumeration = getSession().getAttributeNames();
        while (enumeration.hasMoreElements()) {
            String sessionKey = (String) enumeration.nextElement();
            listModel.add(sessionKey);
        }
    }

    private void doStore() {
        String sessionKey = (String) listBox.getSelectedValue();
        UserInstance userInstance = (UserInstance) getSession().getAttribute(sessionKey);
        if (userInstance == null) {
            showDialog(true, "No instance selected.");
            return;
        }
        try {
            String fileName = "session.data";
            FileOutputStream fos = new FileOutputStream(fileName);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(sessionKey);
            oos.writeObject(userInstance);
            oos.flush();
            oos.close();
            fos.close();
            showDialog(false, sessionKey + " serialized successfully.");
        } catch (IOException ex) {
            showDialog(true, "Exception occurred: " + ex);
            ex.printStackTrace();
        }
       
    }
   
    private HttpSession getSession() {
        ContainerContext containerContext = (ContainerContext) getContextProperty(ContainerContext.CONTEXT_PROPERTY_NAME);
        return containerContext.getSession();
    }

    /**
     * @see nextapp.echo2.app.ApplicationInstance#init()
     */
    public Window init() {
        if (InteractiveApp.LIVE_DEMO_SERVER) {
            throw new RuntimeException("Serialization test disabled on live demo server.");
        }
       
        mainWindow = new Window();
        mainWindow.setTitle("NextApp Echo2 Serialization Test Application");
       
        ContentPane content = new ContentPane();
        mainWindow.setContent(content);
       
        Column mainColumn = new Column();
        mainColumn.setBorder(new Border(new Extent(4), Color.BLUE, Border.STYLE_OUTSET));
        mainColumn.setInsets(new Insets(40));
        mainColumn.setCellSpacing(new Extent(20));
        content.add(mainColumn);
       
        Column serializeColumn = new Column();
        mainColumn.add(serializeColumn);
       
        Button button;

        serializeColumn.add(new Label("Available Applications:"));
       
        listBox = new ListBox();
        listBox.setWidth(new Extent(100, Extent.PERCENT));
        serializeColumn.add(listBox);
       
        button = new Button("[ Refresh ]");
        button.addActionListener(new ActionListener() {
           
            /**
             * @see nextapp.echo2.app.event.ActionListener#actionPerformed(nextapp.echo2.app.event.ActionEvent)
             */
            public void actionPerformed(ActionEvent e) {
                doRefresh();
            }
        });
        serializeColumn.add(button);
       
        button = new Button("[ Serialize ]");
        button.addActionListener(new ActionListener() {
           
            /**
             * @see nextapp.echo2.app.event.ActionListener#actionPerformed(nextapp.echo2.app.event.ActionEvent)
             */
            public void actionPerformed(ActionEvent e) {
                doStore();
            }
        });
        serializeColumn.add(button);
       
        button = new Button("[ Load Serialized Application ]");
        button.addActionListener(new ActionListener() {
           
            /**
             * @see nextapp.echo2.app.event.ActionListener#actionPerformed(nextapp.echo2.app.event.ActionEvent)
             */
            public void actionPerformed(ActionEvent e) {
                doLoad();
            }
        });
        mainColumn.add(button);
       
        return mainWindow;
    }

    private void showDialog(boolean error, String message) {
         WindowPane windowPane = new WindowPane();
         windowPane.setModal(true);
         windowPane.setTitle(error ? "Error" : "Status");
         windowPane.setTitleBackground(error ? Color.RED : Color.GREEN);
         windowPane.setInsets(new Insets(20));
         windowPane.add(new Label(message));
         mainWindow.getContent().add(windowPane);
    }
}
TOP

Related Classes of nextapp.echo2.testapp.serial.SerialApp

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.