Author: hoang_to
Date: 2011-08-15 05:05:23 -0400 (Mon, 15 Aug 2011)
New Revision: 7124
Added:
portal/trunk/gadgets/core/src/main/java/org/exoplatform/portal/gadget/core/ShindigClientEndpoint.java
Modified:
portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIGadgetEditor.java
portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/portal/gadget-configuration.xml
Log:
GTNPORTAL-1957: Caching issue when edit gadget in ApplicationRegistry
Added:
portal/trunk/gadgets/core/src/main/java/org/exoplatform/portal/gadget/core/ShindigClientEndpoint.java
===================================================================
---
portal/trunk/gadgets/core/src/main/java/org/exoplatform/portal/gadget/core/ShindigClientEndpoint.java
(rev 0)
+++
portal/trunk/gadgets/core/src/main/java/org/exoplatform/portal/gadget/core/ShindigClientEndpoint.java 2011-08-15
09:05:23 UTC (rev 7124)
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2011 eXo Platform SAS.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.exoplatform.portal.gadget.core;
+
+import org.exoplatform.container.xml.InitParams;
+import org.exoplatform.container.xml.ValueParam;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * An endpoint to send requests to Shindig from Portal.
+ *
+ * This endpoint is necessary as Shindig does not expose any public API to manipulates
+ * its caches from Portal.
+ *
+ * @author <a href="hoang281283(a)gmail.com">Minh Hoang TO</a>
+ * @date 8/15/11
+ */
+public class ShindigClientEndpoint
+{
+
+ private final long delay;
+
+ private final Timer timer;
+
+ public ShindigClientEndpoint(InitParams params) throws Exception
+ {
+ long delayTime = 1000;
+ if(params != null)
+ {
+ ValueParam delayParam = params.getValueParam("delayTime");
+ delayTime = Long.parseLong(delayParam.getValue());
+ }
+ delay = delayTime;
+ timer = new Timer(true);
+ }
+
+ /**
+ * Etablish URLConnection to shindigURL and post request data to it
+ *
+ * @param requestData
+ * @param shindigURL
+ */
+ public void sendRequest(String requestData, String shindigURL)
+ {
+ timer.schedule(createTimerTask(requestData, shindigURL), delay);
+ }
+
+ private TimerTask createTimerTask(final String requestData, final String shindigURL)
+ {
+ return new TimerTask()
+ {
+ @Override
+ public void run()
+ {
+ OutputStreamWriter out = null;
+ InputStream in = null;
+
+ try
+ {
+ URLConnection conn = new URL(shindigURL).openConnection();
+ conn.setDoOutput(true);
+ out = new OutputStreamWriter(conn.getOutputStream());
+ out.write(requestData);
+ out.flush();
+
+ in = conn.getInputStream(); //Don't remove this if you don't
understand!
+ }
+ catch (IOException ioEx)
+ {
+ ioEx.printStackTrace();
+
+ }
+ finally
+ {
+ try
+ {
+ if (out != null)
+ out.close();
+ }
+ catch (IOException ex)
+ {
+ ex.printStackTrace();
+ }
+
+ try
+ {
+ if (in != null)
+ in.close();
+ }
+ catch (IOException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+
+ }
+ };
+ }
+
+}
Modified:
portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIGadgetEditor.java
===================================================================
---
portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIGadgetEditor.java 2011-08-15
08:46:31 UTC (rev 7123)
+++
portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/applicationregistry/webui/component/UIGadgetEditor.java 2011-08-15
09:05:23 UTC (rev 7124)
@@ -26,9 +26,11 @@
import org.exoplatform.application.gadget.GadgetRegistryService;
import org.exoplatform.application.gadget.Source;
import org.exoplatform.application.gadget.SourceStorage;
+import org.exoplatform.commons.serialization.api.annotations.Serialized;
+import org.exoplatform.portal.gadget.core.ShindigClientEndpoint;
+import org.exoplatform.portal.webui.application.GadgetUtil;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
-import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.webui.config.InitParams;
import org.exoplatform.webui.config.Param;
import org.exoplatform.webui.config.annotation.ComponentConfig;
@@ -37,20 +39,18 @@
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
+import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.event.EventListener;
-import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.exception.MessageException;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormInput;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.UIFormTextAreaInput;
import org.exoplatform.webui.form.validator.ExpressionValidator;
-import org.exoplatform.webui.form.validator.IdentifierValidator;
import org.exoplatform.webui.form.validator.MandatoryValidator;
import org.exoplatform.webui.form.validator.ResourceValidator;
import org.exoplatform.webui.form.validator.StringLengthValidator;
import org.exoplatform.webui.form.validator.Validator;
-
import java.io.Serializable;
import java.util.Calendar;
@@ -215,6 +215,13 @@
sourceStorage.saveSource(gadget, source);
+ //Send request to invalidate the cache on Shindig
+ String requestData =
"{\"context\":{\"ignoreCache\":\"true\"},\"gadgets\":["
+ "{\"url\":\"" + GadgetUtil.reproduceUrl(gadget.getUrl(),
gadget.isLocal()) + "\"}]}";
+ String gadgetServerURL = GadgetUtil.getGadgetServerUrl();
+ String gadgetShindigURL = gadgetServerURL +
(gadgetServerURL.endsWith("/")?"" : "/") +
"metadata";
+ ShindigClientEndpoint endPoint =
uiForm.getApplicationComponent(ShindigClientEndpoint.class);
+ endPoint.sendRequest(requestData, gadgetShindigURL);
+
uiManagement.removeChild(UIGadgetEditor.class);
// This will update the source and also update the gadget related
// cached meta data
Modified:
portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/portal/gadget-configuration.xml
===================================================================
---
portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/portal/gadget-configuration.xml 2011-08-15
08:46:31 UTC (rev 7123)
+++
portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/portal/gadget-configuration.xml 2011-08-15
09:05:23 UTC (rev 7124)
@@ -39,6 +39,10 @@
</values-param>
</init-params>
</component>
+
+ <component>
+ <type>org.exoplatform.portal.gadget.core.ShindigClientEndpoint</type>
+ </component>
<external-component-plugins>
<target-component>org.exoplatform.commons.chromattic.ChromatticManager</target-component>