/*
* RHQ Management Platform
* Copyright (C) 2005-2010 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.coregui.client.components.upload;
import com.google.gwt.core.client.GWT;
import org.rhq.coregui.client.CoreGUI;
public class BundleDistributionFileUploadForm extends FileUploadForm {
private int bundleVersionId;
private String createInitialBundleVersionToken;
public BundleDistributionFileUploadForm(boolean showUploadButton) {
super(CoreGUI.getMessages().view_upload_bundleDistFile(), "0", true, showUploadButton, null);
setAction(GWT.getModuleBaseURL() + "BundleDistributionFileUploadServlet");
}
/**
* If this component successfully uploaded a bundle distribution file and created the bundle version, this
* will return the new bundle version's ID. Otherwise, 0 is returned.
*
* @return the new bundle version ID
*/
public int getBundleVersionId() {
return this.bundleVersionId;
}
/**
* If this component uploaded a bundle distribution file but failed to create the bundle version
* due to a BundleNotFoundException, this will return the token necessary to then call
* createInitialBundleVersionViaToken(). Otherwise, null is returned.
*
* @return the token required for a a subsequent call to createInitialBundleVersionViaToken().
*/
public String getCreateInitialBundleVersionToken() {
return this.createInitialBundleVersionToken;
}
protected boolean processSubmitCompleteResults(String submitCompleteEventResults) {
bundleVersionId = parseResponse(submitCompleteEventResults);
return (bundleVersionId > 0 || null != createInitialBundleVersionToken);
}
private int parseResponse(String results) {
// the upload servlet will respond with "BundleNotFoundException [createInitialBundleVersionToken]" to indicate
// that the BV create failed because the bundle does not yet exist.
String bundleNotFoundMsgPrefix = "BundleNotFoundException [";
int startBundleNotFoundMsgPrefix = results.indexOf(bundleNotFoundMsgPrefix);
if (startBundleNotFoundMsgPrefix >= 0) {
int endBundleNotFoundMsgPrefix = startBundleNotFoundMsgPrefix + bundleNotFoundMsgPrefix.length();
int startBundleNotFoundMsgPostfix = results.indexOf(']', endBundleNotFoundMsgPrefix);
if (startBundleNotFoundMsgPostfix < 0) {
return 0; // this should never happen, we should always have the ending "]" bracket
}
this.createInitialBundleVersionToken = results.substring(endBundleNotFoundMsgPrefix,
startBundleNotFoundMsgPostfix);
return 0;
}
// the upload servlet will respond with "success [bundleVersionId]" on success
String successMsgPrefix = "success [";
int startSuccessMsgPrefix = results.indexOf(successMsgPrefix);
if (startSuccessMsgPrefix < 0) {
return 0; // must mean it wasn't a success - results is probably an error message
}
int endSuccessMsgPrefix = startSuccessMsgPrefix + successMsgPrefix.length();
int startSuccessMsgPostfix = results.indexOf(']', endSuccessMsgPrefix);
if (startSuccessMsgPostfix < 0) {
return 0; // this should never happen, if we have "success [" we should always have the ending "]" bracket
}
String bundleVersionIdString = results.substring(endSuccessMsgPrefix, startSuccessMsgPostfix);
int id = 0;
try {
id = Integer.parseInt(bundleVersionIdString);
} catch (Exception e) {
CoreGUI.getErrorHandler().handleError(MSG.view_upload_error_bundleDistFile(), e);
}
return id;
}
}