001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999-2005 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * Initial developer: JOnAS Team
022: * --------------------------------------------------------------------------
023: * $Id: ViewBean.java 7799 2005-12-14 14:46:27Z moghrabi $
024: * --------------------------------------------------------------------------
025: */package org.objectweb.alarm.beans;
026:
027: import java.rmi.RemoteException;
028: import java.util.Collection;
029:
030: import javax.ejb.SessionBean;
031: import javax.ejb.SessionContext;
032:
033: /**
034: * Session bean View. Does not implement SessionSynchronization. We assume that
035: * this bean and AlarmManager run in the same JVM. Each Session bean is
036: * dedicated to 1 client: Here, the ViewProxy class. Each Session may be
037: * connected to 1 Profil or not.
038: */
039: public class ViewBean implements SessionBean {
040:
041: /**
042: * Reference to the alarm manager
043: */
044: private static transient AlarmManager alarmManager = null;
045:
046: /**
047: * Profil reference
048: */
049: private Profil prof = null;
050:
051: /**
052: * Set the context for this bean
053: * @param ctx the context
054: * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
055: */
056: public void setSessionContext(SessionContext ctx) {
057:
058: }
059:
060: /**
061: * Remove
062: * @see javax.ejb.SessionBean#ejbRemove()
063: */
064: public void ejbRemove() {
065: }
066:
067: /**
068: * The Session bean must define 1 or more ejbCreate methods.
069: */
070: public void ejbCreate() {
071: // Get a reference on the AlarmManager.
072: alarmManager = AlarmManager.getInstance();
073: }
074:
075: /**
076: * Passivate
077: * @see javax.ejb.SessionBean#ejbPassivate()
078: */
079: public void ejbPassivate() {
080: }
081:
082: /**
083: * Activate
084: * @see javax.ejb.SessionBean#ejbActivate()
085: */
086: public void ejbActivate() {
087: }
088:
089: /**
090: * @return all messages for the current profil
091: * @throws RemoteException if remote call failed
092: */
093: public AlarmData[] getAllAlarms() throws RemoteException {
094: if (prof == null) {
095: throw new RemoteException(
096: "No Profil defined for this session");
097: }
098: Collection alist = prof.getAlarms(true);
099: return (AlarmData[]) alist.toArray(new AlarmData[0]);
100: }
101:
102: /**
103: * @return new messages for the current profil
104: * @throws RemoteException if remote call failed
105: */
106: public AlarmData[] getNewAlarms() throws RemoteException {
107: if (prof == null) {
108: throw new RemoteException(
109: "No Profil defined for this session");
110: }
111: Collection alist = prof.getAlarms(false);
112: return (AlarmData[]) alist.toArray(new AlarmData[0]);
113: }
114:
115: /**
116: * @return an enumeration of all available profils
117: */
118: public String[] getProfils() {
119: return alarmManager.getProfilNames();
120: }
121:
122: /**
123: * Chooses to work on a particular profil.
124: * @param name of the profil
125: * @throws RemoteException if remote call failed
126: */
127: public void setProfil(String name) throws RemoteException {
128: if (name == null) {
129: prof = null;
130: return;
131: }
132: prof = alarmManager.getProfil(name);
133: if (prof == null) {
134: throw new RemoteException(
135: "This Profil does not exist yet: " + name);
136: }
137: }
138:
139: /**
140: * @return the Alarm Level for Profil specified
141: * @param name of the profil
142: * @throws RemoteException if remote call failed
143: */
144: public int alarmLevel(String name) throws RemoteException {
145: Profil prof = alarmManager.getProfil(name);
146: if (prof == null) {
147: throw new RemoteException(
148: "This Profil does not exist yet: " + name);
149: }
150: return prof.getCurrentLevel();
151: }
152:
153: /**
154: * Forget this message because problem has been taken into account.
155: * @param pk primary key
156: * @throws RemoteException if remote call failed
157: */
158: public void forgetAlarm(String pk) throws RemoteException {
159: alarmManager.forgetAlarm(pk);
160: }
161:
162: /**
163: * creates a new Profil
164: * @param device the name of the device
165: * @param level the severity level
166: * @return the newly created profil
167: * @throws RemoteException if remote call failed
168: */
169: public String newProfil(String device, String level)
170: throws RemoteException {
171:
172: // Check arg validity
173: if (device.length() == 0) {
174: throw new RemoteException("null device string");
175: }
176: if (!level.startsWith("S") && !level.startsWith("W")
177: && !level.startsWith("I")) {
178: throw new RemoteException("severity must be one of S|W|I");
179: }
180:
181: prof = alarmManager.newProfil(device, level);
182: if (prof == null) {
183: return null;
184: }
185: return prof.getName();
186: }
187:
188: /**
189: * remove a Profil
190: * @param name the name of the profil
191: * @throws RemoteException if remote call failed
192: */
193: public void removeProfil(String name) throws RemoteException {
194: if (name == null) {
195: return;
196: }
197: boolean ok = alarmManager.delProfil(name);
198: if (!ok) {
199: throw new RemoteException(
200: "This Profil does not exist yet: " + name);
201: }
202: }
203: }
|