org.opencms.ugc.client.export.CmsXmlContentUgcApi Maven / Gradle / Ivy
Show all versions of opencms-gwt Show documentation
/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* For further information about Alkacon Software, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.ugc.client.export;
import org.opencms.ugc.client.CmsRequestCounter;
import org.opencms.ugc.client.CmsRpcCallHelper;
import org.opencms.ugc.shared.CmsUgcConstants;
import org.opencms.ugc.shared.CmsUgcContent;
import org.opencms.ugc.shared.CmsUgcException;
import org.opencms.ugc.shared.rpc.I_CmsUgcEditService;
import org.opencms.ugc.shared.rpc.I_CmsUgcEditServiceAsync;
import org.opencms.util.CmsUUID;
import org.timepedia.exporter.client.Export;
import org.timepedia.exporter.client.ExportPackage;
import org.timepedia.exporter.client.Exportable;
import org.timepedia.exporter.client.NoExport;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
/**
* Root access point for the Javascript form editing API exported with gwt-exporter. Can be used
* to acquire new form editing sessions.
*/
@Export
@ExportPackage("opencmsugc")
public class CmsXmlContentUgcApi implements Exportable {
/** The request counter. */
private CmsRequestCounter m_requestCounter = new CmsRequestCounter();
/** Service instance. */
@NoExport
public static final I_CmsUgcEditServiceAsync SERVICE = GWT.create(I_CmsUgcEditService.class);
/** The service URL. */
@NoExport
public static final String SERVICE_URL;
/**
* Default constructor for gwt-exporter.
*/
public CmsXmlContentUgcApi() {
GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
public void onUncaughtException(final Throwable e) {
handleError(e, new I_CmsErrorCallback() {
public void call(String errorType, String message, JavaScriptObject additionalData) {
throw new RuntimeException(e);
}
});
}
});
}
static {
String url = Window.Location.getHref();
// cut off fragment, parameters, and trailing slash, then append service name
url = url.replaceAll("#.*$", "").replaceAll("\\?.*$", "").replaceAll("/$", "")
+ "/org.opencms.ugc.CmsUgcEditService.gwt";
SERVICE_URL = url;
((ServiceDefTarget)SERVICE).setServiceEntryPoint(SERVICE_URL);
}
/**
* Gets the request counter.
*
* @return the request counter
*/
@NoExport
public CmsRequestCounter getRequestCounter() {
return m_requestCounter;
}
/**
* Creates an RPC helper object.
*
* @return the RPC helper
*/
@NoExport
public CmsRpcCallHelper getRpcHelper() {
return new CmsRpcCallHelper(m_requestCounter);
}
/**
* Passes an exception to the given error handling callback and optionally outputs some debug info.
*
* @param e the exception
* @param callback the error handling callback
*/
public void handleError(Throwable e, I_CmsErrorCallback callback) {
String errorCode = CmsUgcConstants.ErrorCode.errMisc.toString();
String message;
if (e instanceof CmsUgcException) {
CmsUgcException formException = (CmsUgcException)e;
errorCode = formException.getErrorCode().toString();
message = formException.getUserMessage();
} else {
message = e.getMessage();
}
if (callback != null) {
callback.call(errorCode, message, JavaScriptObject.createObject());
}
}
/**
* Loads a pre-created session.
*
* @param sessionId the session id
* @param formElement the form element
* @param onSuccess the callback to call in case of success
* @param onError the callback to call in case of an error
*/
public void initFormForSession(
final String sessionId,
final Element formElement,
final I_CmsClientCmsUgcSessionCallback onSuccess,
final I_CmsErrorCallback onError) {
getRpcHelper().executeRpc(SERVICE.getContent(new CmsUUID(sessionId), new AsyncCallback() {
public void onFailure(Throwable caught) {
handleError(caught, onError);
}
public void onSuccess(CmsUgcContent result) {
CmsClientUgcSession session = new CmsClientUgcSession(CmsXmlContentUgcApi.this, result);
session.initFormElement(formElement);
onSuccess.call(session);
}
}));
}
/**
* Sets the error callback for all uncaught exceptions.
*
* @param callback the error callback
*/
public void setErrorCallback(final I_CmsStringArrayCallback callback) {
if (callback != null) {
GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
public void onUncaughtException(Throwable e) {
String[] stack = new String[e.getStackTrace().length];
for (int i = 0; i < e.getStackTrace().length; i++) {
StackTraceElement stackEl = e.getStackTrace()[i];
stack[i] = stackEl.toString();
}
callback.call(stack);
}
});
} else {
GWT.setUncaughtExceptionHandler(null);
}
}
/**
* Sets the wait indicator callback.
*
* @param callback a callback used to switch the wait indicator off or on.
*/
public void setWaitIndicatorCallback(I_CmsBooleanCallback callback) {
m_requestCounter.setCallback(callback);
}
}