blob: 1c191b389cb9fbc7b02726809408013b36d85faf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// url base should be <host>:<port>//<contextRoot>
var urlBase = location.href.substr(0, location.href.indexOf('/containers/commoncontainer/'));
var contextRoot = urlBase.substr(urlBase.indexOf(location.host) + location.host.length);
var testConfig = testConfig || {};
testConfig[osapi.container.ServiceConfig.API_PATH] = contextRoot + '/rpc';
testConfig[osapi.container.ContainerConfig.RENDER_DEBUG] = '1';
// Default the security token for the container. Using this example security token requires enabling
// the DefaultSecurityTokenCodec to let UrlParameterAuthenticationHandler create valid security token.
// 10 seconds is fast, but this is mostly for demonstration purposes.
testConfig[osapi.container.ContainerConfig.GET_CONTAINER_TOKEN] = function(callback) {
gadgets.log('Updating container security token.');
callback('john.doe:john.doe:appid:cont:url:0:default', 10);
};
// Create the new CommonContainer
var CommonContainer = new osapi.container.Container(testConfig);
//Gadget site to title id map
var siteToTitleMap = {};
// Need to pull these from values supplied in the dialog
CommonContainer.init = function() {
//Create my new managed hub
CommonContainer.managedHub = new OpenAjax.hub.ManagedHub({
onSubscribe: function(topic, container) {
log(container.getClientID() + " subscribes to this topic '" + topic + "'");
return true;// return false to reject the request.
},
onUnsubscribe: function(topic, container) {
log(container.getClientID() + " unsubscribes from tthis topic '" + topic + "'");
return true;
},
onPublish: function(topic, data, pcont, scont) {
log(pcont.getClientID() + " publishes '" + data + "' to topic '" + topic + "' subscribed by " + scont.getClientID());
return true;
// return false to reject the request.
}
});
// initialize managed hub for the Container
gadgets.pubsub2router.init({
hub: CommonContainer.managedHub
});
CommonContainer.rpcRegister('set_title', window.setTitleHandler);
CommonContainer.addGadgetLifecycleCallback('com.example.commoncontainer', lifecycle());
try {
// Connect to the ManagedHub
CommonContainer.inlineClient =
new OpenAjax.hub.InlineContainer(CommonContainer.managedHub, 'container',
{
Container: {
onSecurityAlert: function(source, alertType) { /* Handle client-side security alerts */ },
onConnect: function(container) { /* Called when client connects */ },
onDisconnect: function(container) { /* Called when client connects */ }
}
});
//connect to the inline client
CommonContainer.inlineClient.connect();
} catch (e) {
// TODO: error handling should be consistent with other OS gadget initialization error handling
alert('ERROR creating or connecting InlineClient in CommonContainer.managedHub [' + e.message + ']');
}
};
//Wrapper function to set the gadget site/id and default width. Currently have some inconsistency with width actually being set. This
//seems to be related to the pubsub2 feature.
CommonContainer.renderGadget = function(gadgetURL, gadgetId) {
//going to hardcode these values for width.
var el = document.getElementById('gadget-site-' + gadgetId);
var params = {};
params[osapi.container.RenderParam.WIDTH] = '100%';
var gadgetSite = CommonContainer.newGadgetSite(el);
CommonContainer.navigateGadget(gadgetSite, gadgetURL, {}, params);
return gadgetSite;
};
//TODO: To be implemented. Identify where to hook this into the page (in the gadget title bar/gadget management, etc)
CommonContainer.navigateView = function(gadgetSite, gadgetURL, view) {
var renderParms = {};
if (view === null || view === '') {
view = 'default';
}
//TODO Evaluate Parms based on configuration
renderParms[osapi.container.RenderParam.WIDTH] = '100%';
renderParms['view'] = view;
CommonContainer.navigateGadget(gadgetSite, gadgetURL, {}, renderParms);
};
//TODO: Add in UI controls in portlet header to remove gadget from the canvas
CommonContainer.collapseGadget = function(gadgetSite) {
CommonContainer.closeGadget(gadgetSite);
};
//display the pubsub 2 event details
function log(message) {
document.getElementById('output').innerHTML = gadgets.util.escapeString(message) + '<br/>' + document.getElementById('output').innerHTML;
}
var lifecycle = function() {
var preloadStart;
var navigateStart;
var closeStart;
var unloadStart;
var renderStart;
var listeners = {};
listeners[osapi.container.CallbackType.ON_BEFORE_PRELOAD] = function(gadgetUrls) {
preloadStart = osapi.container.util.getCurrentTimeMs();
};
listeners[osapi.container.CallbackType.ON_PRELOADED] = function(response) {
var urls = [];
for(url in response) {
urls[urls.length] = url;
}
var dif = osapi.container.util.getCurrentTimeMs() - preloadStart;
log('It took ' + dif + 'ms to preload the URL(s) ' + urls + '.');
};
listeners[osapi.container.CallbackType.ON_BEFORE_NAVIGATE] = function(gadgetUrl) {
navigateStart = osapi.container.util.getCurrentTimeMs();
};
listeners[osapi.container.CallbackType.ON_NAVIGATED] = function(site) {
log('It took ' + (osapi.container.util.getCurrentTimeMs() - navigateStart) + ' ms' +
' for the site ' + site.getId() + ' to navigate.');
};
listeners[osapi.container.CallbackType.ON_BEFORE_CLOSE] = function(site) {
closeStart = osapi.container.util.getCurrentTimeMs();
};
listeners[osapi.container.CallbackType.ON_CLOSED] = function(site) {
log('It took ' + (osapi.container.util.getCurrentTimeMs() - closeStart) +
' ms to close the gadget in the site with id ' + site.getId());
};
listeners[osapi.container.CallbackType.ON_BEFORE_RENDER] = function(gadgetUrl) {
renderStart = osapi.container.util.getCurrentTimeMs();
};
listeners[osapi.container.CallbackType.ON_RENDER] = function(gadgetUrl) {
log('It took ' + (osapi.container.util.getCurrentTimeMs() - renderStart) +
' ms to render the gadget at the URL ' + gadgetUrl);
};
return listeners;
}