001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2008 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common Development
008: * and Distribution License("CDDL") (collectively, the "License"). You
009: * may not use this file except in compliance with the License. You can obtain
010: * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
011: * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific
012: * language governing permissions and limitations under the License.
013: *
014: * When distributing the software, include this License Header Notice in each
015: * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
016: * Sun designates this particular file as subject to the "Classpath" exception
017: * as provided by Sun in the GPL Version 2 section of the License file that
018: * accompanied this code. If applicable, add the following below the License
019: * Header, with the fields enclosed by brackets [] replaced by your own
020: * identifying information: "Portions Copyrighted [year]
021: * [name of copyright owner]"
022: *
023: * Contributor(s):
024: *
025: * If you wish your version of this file to be governed by only the CDDL or
026: * only the GPL Version 2, indicate your decision by adding "[Contributor]
027: * elects to include this software in this distribution under the [CDDL or GPL
028: * Version 2] license." If you don't indicate a single choice of license, a
029: * recipient has the option to distribute your version of this file under
030: * either the CDDL, the GPL Version 2 or to extend the choice of license to
031: * its licensees as provided above. However, if you add GPL Version 2 code
032: * and therefore, elected the GPL Version 2 license, then the option applies
033: * only if the new code is made subject to such option by the copyright
034: * holder.
035: */
036: package com.sun.jbi.jsf.handlers;
037:
038: import com.sun.enterprise.tools.admingui.util.FileUtil;
039: import com.sun.enterprise.tools.admingui.util.GuiUtil;
040: import com.sun.jbi.jsf.bean.AlertBean;
041: import com.sun.jbi.jsf.bean.UploadCopyRadioBean;
042: import com.sun.jbi.jsf.util.BeanUtilities;
043: import com.sun.jbi.jsf.util.I18nUtilities;
044: import com.sun.jbi.jsf.util.JBILogger;
045: import com.sun.jbi.ui.common.JBIAdminCommands;
046: import com.sun.jbi.ui.common.JBIManagementMessage;
047: import com.sun.jsftemplating.annotation.Handler;
048: import com.sun.jsftemplating.annotation.HandlerInput;
049: import com.sun.jsftemplating.annotation.HandlerOutput;
050: import com.sun.jsftemplating.layout.descriptors.handler.HandlerContext;
051: import java.util.logging.Logger;
052:
053: /**
054: * Provides jsftemplating handlers for Upgrade Component and Update Component
055: * use-cases
056: *
057: * @author Sun Microsystems Inc.
058: */
059: public final class UpgradeComponentHandlers {
060:
061: /**
062: * <p>
063: *
064: * Upgrades, or updates, the target component for an uploaded, or copied,
065: * component archive. <p>
066: *
067: * Input value: "archivePath" -- Type: <code> java.lang.String</code> path
068: * to validated archive <p>
069: *
070: * Input value: "jbiName" -- Type: <code> java.lang.String</code> JBI name
071: * from validated archive <p>
072: *
073: * Input value: "redirectOnFailure" -- Type: <code> java.lang.String</code>
074: * what to show if it fails <p>
075: *
076: * Input value: "redirectOnSuccess" -- Type: <code> java.lang.String</code>
077: * what to show if it works <p>
078: *
079: * Output value: "isAlertNeeded" -- Type: <code>java.lang.Boolean</code>
080: * show alert or not</p> <p>
081: *
082: * Output value: "alertSummary" -- Type: <code>String</code>summary, if
083: * failure</p> <p>
084: *
085: * Output value: "alertDetails" -- Type: <code>String</code>details, if
086: * failure</p> <p>
087: *
088: * Output value: "redirectTo" -- Type: <code>String</code> Where to go
089: * next, based on success/failure</p>
090: *
091: * @param handlerCtx <code>HandlerContext</code> provides inputs and
092: * outputs.
093: */
094: @Handler(id="jbiUpgradeComponent",input={@HandlerInput(name="archivePath",type=String.class,required=true),@HandlerInput(name="jbiName",type=String.class,required=true),@HandlerInput(name="compType",type=String.class,required=true),@HandlerInput(name="uploadSelected",type=Boolean.class,required=true),@HandlerInput(name="redirectOnFailure",type=String.class,required=true),@HandlerInput(name="redirectOnSuccess",type=String.class,required=true)},output={@HandlerOutput(name="isAlertNeeded",type=Boolean.class),@HandlerOutput(name="alertSummary",type=String.class),@HandlerOutput(name="alertDetails",type=String.class),@HandlerOutput(name="redirectTo",type=String.class)})
095: public static void jbiUpgradeComponent(HandlerContext handlerCtx) {
096: String archivePath = (String) handlerCtx
097: .getInputValue("archivePath");
098: String jbiName = (String) handlerCtx.getInputValue("jbiName");
099: String compType = (String) handlerCtx.getInputValue("compType");
100: String redirectOnFailure = (String) handlerCtx
101: .getInputValue("redirectOnFailure");
102: String redirectOnSuccess = (String) handlerCtx
103: .getInputValue("redirectOnSuccess");
104:
105: String redirectTo = redirectOnSuccess;
106:
107: sLog.fine("UpgradeComponentHandlers.jbiUpgradeCompoent(...)"
108: + ", archivePath=" + archivePath + ", jbiName="
109: + jbiName + ", redirectOnFailure=" + redirectOnFailure
110: + ", redirectOnSuccess=" + redirectOnSuccess);
111:
112: String alertDetails = "";
113: String alertSummary = "";
114: String internalError = "";
115: String successResult = "";
116: String failureResult = "";
117:
118: boolean isAlertNeeded = true;
119: boolean isRedirectSuccess = true;
120:
121: AlertBean alertBean = BeanUtilities.getAlertBean();
122: UploadCopyRadioBean uploadCpBean = BeanUtilities
123: .getUploadCopyRadioBean();
124:
125: uploadCpBean.setNavDestValid(redirectOnSuccess);
126: uploadCpBean.setNavDestInvalid(redirectOnFailure);
127:
128: try {
129: String invalidAlertDetail = JbiArchiveValidationHandler
130: .checkValidArchive(archivePath, compType);
131: //If the Archive is valid, no invalidAlertDetail is returned.
132: //Check that and then attempt update
133: if ("".equals(invalidAlertDetail)) {
134: JBIAdminCommands jac = BeanUtilities.getClient();
135: successResult = jac.updateComponent(jbiName,
136: archivePath);
137: } else {
138: failureResult = invalidAlertDetail;
139: }
140: } catch (com.sun.jbi.ui.common.JBIRemoteException jbiRemoteEx) {
141: JBIManagementMessage mgmtMsg = BeanUtilities
142: .extractJBIManagementMessage(jbiRemoteEx);
143: sLog
144: .fine("UpgradeComponentHandlers.jbiUpgradeComponent(...), caught jbiRemoteEx="
145: + jbiRemoteEx + ", mgmtMsg=" + mgmtMsg);
146: if (null == mgmtMsg) {
147: failureResult = jbiRemoteEx.getMessage();
148: if (null == failureResult) {
149: failureResult = jbiRemoteEx.toString();
150: }
151: } else {
152: failureResult = mgmtMsg.getMessage();
153: }
154: }
155: sLog
156: .fine("UpgradeComponentHandlers.jbiUpgradeComponent(...), jbiName="
157: + jbiName
158: + ", archiivePath="
159: + archivePath
160: + ", successResult="
161: + successResult
162: + ", failureResult="
163: + failureResult
164: + ", internalError=" + internalError);
165:
166: if (!"".equals(internalError)) {
167: isRedirectSuccess = false;
168: alertBean.setAlertType("error");
169: alertSummary = I18nUtilities
170: .getResourceString("jbi.internal.error.summary");
171: alertDetails += internalError + "<br />";
172: }
173:
174: if (!"".equals(successResult)) {
175: alertBean.setAlertType("info");
176: alertSummary = I18nUtilities
177: .getResourceString("jbi.upgrade.success.alert.summary.text");
178:
179: // TBD: if file was uploaded, delete it
180: // deleteTempFile(archivePath);
181: } else {
182: isRedirectSuccess = false;
183: alertBean.setAlertType("error");
184: alertSummary = I18nUtilities
185: .getResourceString("jbi.upgrade.failed.alert.summary.text");
186: alertDetails += failureResult + "<br />";
187: }
188:
189: if (isRedirectSuccess) {
190: alertDetails = "Upgrade of " + jbiName + " completed.";
191: Object[] args = { jbiName };
192: alertDetails = GuiUtil
193: .getMessage(
194: I18nUtilities
195: .getResourceString("jbi.upgrade.component.success.details"),
196: args);
197: redirectTo = redirectOnSuccess;
198: } else {
199: alertDetails = BeanUtilities
200: .addAlertFooterMessage(alertDetails);
201: redirectTo = redirectOnFailure;
202: }
203:
204: //Files gets uploaded to temporary location on hard disk before succesful upgrade, failed upgrade
205: //failed validation and needs to be cleaned up
206: if ((Boolean) handlerCtx.getInputValue("uploadSelected")) {
207: sLog
208: .fine("UpgradeComponentHandlers.jbiUpgradeComponent(...),to delete uploaded tmp file="
209: + archivePath);
210: FileUtil.delete(archivePath);
211: //Delete an invalid uploaded archive
212: }
213:
214: handlerCtx.setOutputValue("isAlertNeeded", Boolean
215: .toString(isAlertNeeded));
216: handlerCtx.setOutputValue("alertSummary", alertSummary);
217: handlerCtx.setOutputValue("alertDetails", alertDetails);
218: handlerCtx.setOutputValue("redirectTo", redirectTo);
219:
220: sLog
221: .fine("UpgradeComponentHandlers.jbiUpgradeValidatedArchive(...), "
222: + " isAlertNeeded="
223: + isAlertNeeded
224: + " isRedirectSuccess="
225: + isRedirectSuccess
226: + ", alertSummary="
227: + alertSummary
228: + ", alertDetails="
229: + alertDetails
230: + ", redirectTo=" + redirectTo);
231: }
232:
233: private static Logger sLog = JBILogger.getInstance();
234:
235: /**
236: * prevents instantiation
237: */
238: private UpgradeComponentHandlers() {
239: }
240: }
|