001: /*
002: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
004: *
005: * This program is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU General Public License version
007: * 2 only, as published by the Free Software Foundation.
008: *
009: * This program is distributed in the hope that it will be useful, but
010: * WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * General Public License version 2 for more details (a copy is
013: * included at /legal/license.txt).
014: *
015: * You should have received a copy of the GNU General Public License
016: * version 2 along with this work; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
018: * 02110-1301 USA
019: *
020: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
021: * Clara, CA 95054 or visit www.sun.com if you need additional
022: * information or have any questions.
023: */
024:
025: package com.sun.jumpimpl.process;
026:
027: import com.sun.jump.command.JUMPExecutiveLifecycleRequest;
028: import com.sun.jump.command.JUMPResponse;
029: import com.sun.jump.common.JUMPApplication;
030: import com.sun.jump.executive.JUMPApplicationProxy;
031: import com.sun.jump.executive.JUMPIsolateProxy;
032:
033: public class JUMPApplicationProxyImpl implements JUMPApplicationProxy {
034:
035: /**
036: * The application this Proxy is associated with.
037: */
038: private JUMPApplication application;
039:
040: /**
041: * This Proxy's application ID.
042: */
043: private int applicationId;
044:
045: /**
046: * The Isolate which this application is running within.
047: */
048: private JUMPIsolateProxyImpl isolateProxy;
049:
050: /**
051: * The (executive) RequestSender from the JUMPIsolateProxyImpl.
052: **/
053: private RequestSenderHelper requestSender;
054:
055: /**
056: * Creates an instance of JUMPApplicationProxy. This method is expected to be
057: * called by the JUMPIsolateProxy implementation.
058: */
059: JUMPApplicationProxyImpl(JUMPApplication application,
060: int applicationId, JUMPIsolateProxyImpl isolateProxy) {
061: this .application = application;
062: this .applicationId = applicationId;
063: this .isolateProxy = isolateProxy;
064:
065: this .requestSender = isolateProxy.getRequestSender();
066: }
067:
068: /**
069: * Returns the JUMPApplication this proxy is accociated with.
070: */
071: public JUMPApplication getApplication() {
072: return application;
073: }
074:
075: /**
076: * Returns the isolateProxy proxy this application is running in.
077: */
078: public JUMPIsolateProxy getIsolateProxy() {
079: return isolateProxy;
080: }
081:
082: /**
083: * Pauses the application associated with this
084: * <code>JUMPApplicationProxy</code>.
085: **/
086: public void pauseApp() {
087: if (isolateProxy.isAlive()) {
088: JUMPResponse response = requestSender.sendRequest(
089: isolateProxy, new JUMPExecutiveLifecycleRequest(
090: JUMPExecutiveLifecycleRequest.ID_PAUSE_APP,
091: new String[] { Integer
092: .toString(applicationId) }));
093: requestSender.handleBooleanResponse(response);
094: }
095: }
096:
097: /**
098: * Resumes the application associated with this
099: * <code>JUMPApplicationProxy</code>.
100: **/
101: public void resumeApp() {
102: if (isolateProxy.isAlive()) {
103: JUMPResponse response = requestSender
104: .sendRequest(
105: isolateProxy,
106: new JUMPExecutiveLifecycleRequest(
107: JUMPExecutiveLifecycleRequest.ID_RESUME_APP,
108: new String[] { Integer
109: .toString(applicationId) }));
110: requestSender.handleBooleanResponse(response);
111: }
112: }
113:
114: /**
115: * Destroys the application associated with this
116: * <code>JUMPApplicationProxy</code>.
117: **/
118: public void destroyApp() {
119:
120: // There is only one app in the isolate.
121: // Let the app state be reflected eagerly to the Isolate Proxy.
122: isolateProxy.setStateToDestroyed();
123:
124: JUMPResponse response = requestSender.sendRequest(isolateProxy,
125: new JUMPExecutiveLifecycleRequest(
126: JUMPExecutiveLifecycleRequest.ID_DESTROY_APP,
127: new String[] { Integer.toString(applicationId),
128: "true" }));
129: requestSender.handleBooleanResponse(response);
130: }
131:
132: /**
133: * Returns the state of the application associated with this
134: * <code>JUMPApplicationProxy</code>.
135: **/
136: public int getAppState() {
137: if (!isolateProxy.isAlive()) {
138: return DESTROYED;
139: }
140:
141: return RUNNING;
142: }
143:
144: public String toString() {
145: return Integer.toString(applicationId);
146: }
147: }
|